如何让WordPress和Laravel与htaccess共享顶级网址

时间:2013-01-27 03:47:43

标签: url-rewriting .htaccess

编辑 这是我的问题的主要编辑,基于评论中的反馈,以及对meta.stackoverflow的一些阅读。

我改变了目标,现在我的首要任务是在Laravel和WP之间路由顶级网址:我不再寻求共享代码/数据库/用户信誉等。

问题:我需要哪些重写规则来实现这样的URL结构:

/            // (home) delivered by WP
/content1    // WP
/content(n)  // WP
/dashboard   // delivered by Laravel
/widgets/mywidget/    // Laravel
  • 所有Laravel页面都在/ admin或/ widgets中,其他一切都将由WordPress处理,包括404s
  • 我会将WP和Laravel完全分开。
  • 我的同事和我将使用管理员帐户编辑WP,不会有其他WP用户
  • 我将完全单独管理这两个应用的演示文稿

我按如下方式设置了我的文件,并测试了每个应用程序是否彼此独立工作。 (即如果Laravel的重写规则是唯一使用的,Laravel使用laravel-index.php工作正常)

来自网络根目录:public_html /

/wordpress
/laravel3   // app dir
/css        // these are from the laravel public dir 
/images     //
/js, etc    //
/index.php  // WP index.php
/laravel-index.php    // laravel's index.php

我在共享托管环境中,无法访问httpd.conf。

这是我的.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^widgets  -  [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# Laravel
<IfModule mod_rewrite.c>
RewriteRule !^widgets - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>

这样:

  • 我可以访问我的WordPress页面,
  • WP为未知网址提供WP-404,但
  • / widgets获得了一个vanilla服务器404,而
  • /laravel-index.php/widgets显示正确的内容。

另一个问题是WP Dashboard正在向/ dashboard发送请求,我想将其重定向到Laravel

感谢阅读!

1 个答案:

答案 0 :(得分:2)

对于WordPress,您需要将不在窗口小部件或仪表板文件夹中的所有请求发送到index.php

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond !^widgets
RewriteCond !^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

对于Laravel,您需要执行相反的操作,仅将窗口小部件或仪表板内的请求发送到laravel-index.php

# Laravel
<IfModule mod_rewrite.c>
RewriteCond ^widgets
RewriteCond ^dashboard
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ laravel-index.php/$1 [L]
</IfModule>