【问题标题】:Laravel and Wordpress on same server/domainLaravel 和 Wordpress 在同一服务器/域上
【发布时间】:2016-02-29 14:31:06
【问题描述】:

我正在尝试在 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] 标志处停止。

【问题讨论】:

  • 你应该看看 Themosis:framework.themosis.com
  • 虽然这是一个很好的建议,但这并不是一个可行的解决方案。 Laravel 部分已经在开发中。

标签: wordpress apache laravel mod-rewrite


【解决方案1】:

如评论中所问,回复如下:

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

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

login/ 不以/ 开头

所以你需要把你的规则改成

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

【讨论】:

    【解决方案2】:

    最后在 ServerFault 上问了同样的问题。我得到了答案。在此链接以供参考:

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

    【讨论】:

      【解决方案3】:

      可以向默认的 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>
      

      【讨论】:

      • 这对我的情况没有帮助。因为 url 不应该包含 /wordpress。例如 {url}/login 和 {url}/portal 应该由 laravel 处理,而 {url}/info 和 {url}/blog 应该由 Wordpress 处理。
      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 2017-03-27
      • 2012-07-13
      • 1970-01-01
      • 2015-05-15
      • 2014-01-02
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多