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

时间:2015-11-26 13:09:34

标签: wordpress apache laravel mod-rewrite

我正在尝试在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]旗帜上。

3 个答案:

答案 0 :(得分:5)

结束在ServerFault上询问相同的问题。我得到了答案。将它链接在这里以供参考:

https://serverfault.com/questions/739728/laravel-and-wordpress-on-same-server-domain

答案 1 :(得分:2)

正如评论中所述,这是回复:

正如您在日志中看到的那样,第一个条件不匹配:

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

login/不以/

开头

因此您需要将规则更改为

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

答案 2 :(得分:0)

可以向默认的Laravel .htaccess文件添加重写条件,以允许Laravel忽略对子目录(/ wordpress)的所有请求。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Ignore Wordpress directory
    RewriteCond $1 !^(wordpress)

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>