Laravel(5.1)プロジェクト内でWordPressサイトをホストしようとしています。次の構造があります(一部を削除)
├── app
├── config
├── public
│ ├── index.php
│ ├── wordpress -> ../wordpress
│ └── .htaccess
├── resources
├── storage
├── vendor
└── wordpress
├── index.php
├── wp-admin
├── wp-config.php
├── wp-includes
└── .htaccess
Vhostドキュメントルートはパブリックです。
Wordpressは、.htaccessを通過するすべてのものをキャッチする必要があります。ただし、たとえば/ loginはlaravelに移動する必要があります。プロジェクトが大きくなると、Laravelのリクエストをキャッチするルールを追加する予定です。/publicの次の.htaccessファイル:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/login" "index.php" [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^(.*)$" "wordpress/$1" [L]
</IfModule>
しかし、/ loginにリクエストを送信すると、wordpressページになります。ログの一部は次のとおりです。
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern '^/login' to uri 'login/'
add path info postfix: /var/www/public/login -> /var/www/public/login/
strip per-dir prefix: /var/www/public/login/ -> login/
applying pattern '^(.*)$' to uri 'login/'
RewriteCond: input='/var/www/public/login' pattern='!-d' => matched
RewriteCond: input='/var/www/public/login' pattern='!-f' => matched
rewrite 'login/' -> 'wordpress/login/'
add per-dir prefix: wordpress/login/ -> /var/www/public/wordpress/login/
strip document_root prefix: /var/www/public/wordpress/login/ -> /wordpress/login/
internal redirect with /wordpress/login/ [INTERNAL REDIRECT]
[L]フラグで書き換えが止まらないようです。
ログでわかるように、最初の条件が一致しませんでした。
applying pattern '^/login' to uri 'login/'
login/
が/
で始まらない
したがって、ルールを次のように変更する必要があります
RewriteRule "^login/" "index.php" [L]