Php

Laravel 和 Wordpress 在同一伺服器/域上

  • November 30, 2015

我正在嘗試在 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]

引用自:https://serverfault.com/questions/739728