8

編集: これは、コメントのフィードバックと、meta.stackoverflow に関する少しの読み物に基づいて、私の質問を大幅に編集したものです。

私は目標を変更しました。今は、Laravel と WP の間でトップレベルの URL をルーティングすることを優先しています。コード/データベース/ユーザーの資格情報などを共有することはもう求めていません。

質問: 次のような URL 構造を実現するには、どのような書き換え規則が必要ですか?

/            // (home) delivered by WP
/content1    // WP
/content(n)  // WP
/dashboard   // delivered by Laravel
/widgets/mywidget/    // Laravel
  • すべての Laravel ページは /admin または /widgets にあり、404 を含め、それ以外はすべて WordPress によって処理されます。
  • WP と Laravel を完全に分離します。
  • 同僚と管理者アカウントを使用して WP を編集します。他の WP ユーザーはいません。
  • 2 つのアプリのプレゼンテーションを完全に個別に管理します

ファイルを次のようにセットアップし、各アプリケーションが互いに独立して動作することをテストしました。(つまり、Laravel の書き換えルールのみが使用されている場合、Laravel は laravel-index.php を使用して正常に動作します)

Web ルートから: public_html/

/wordpress
/laravel3   // app dir
/css        // these are from the laravel public dir 
/images     //
/js, etc    //
/index.php  // WP index.php
/laravel-index.php    // laravel's index.php

httpd.conf にアクセスできない共有ホスティング環境にいます。

これが私の.htaccessです

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^widgets  -  [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# Laravel
<IfModule mod_rewrite.c>
RewriteRule !^widgets - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>

この上:

  • WordPress ページにアクセスでき、
  • WP は未知の URL に対して WP-404 を提供しますが、
  • /widgets はバニラ サーバー 404 を取得しますが、
  • /laravel-index.php/widgets は適切なコンテンツを表示します。

追加の問題は、WP ダッシュボードが /dashboard へのリクエストを盗んでいることです。これを Laravel にリダイレクトしたいと考えています。

読んでくれてありがとう!

4

1 に答える 1

2

WordPress の場合、ウィジェットまたはダッシュボード フォルダーにないすべてのリクエストを index.php に送信する必要があります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond !^widgets
RewriteCond !^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Laravel の場合、反対のことを行う必要があります。ウィジェットまたはダッシュボード内にあるリクエストのみを laravel-index.php に送信します。

# Laravel
<IfModule mod_rewrite.c>
RewriteCond ^widgets
RewriteCond ^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>
于 2013-09-24T15:26:20.160 に答える