web-dev-qa-db-ja.com

LaravelとWordpress同じサーバー/ドメイン上

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]フラグで書き換えが止まらないようです。

2
Niek de Gooijer

ログでわかるように、最初の条件が一致しませんでした。

applying pattern '^/login' to uri 'login/'

login//で始まらない

したがって、ルールを次のように変更する必要があります

RewriteRule "^login/" "index.php" [L]
2
Froggiz