2013-02-16 98 views
0

早安堆栈!我的网站是目前的结构是这样的:.htaccess子目录中的执行顺序(wordpress/laravel)

  1. http://www.mywordpressite.com/
  2. http://www.mywordpressite.com/.htaccess
  3. http://www.mywordpressite.com/portal/
  4. http://www.mywordpressite.com/portal/.htaccess

我了解宇宙的是,如果我浏览到门户网站,(4)” .htaccess将被解析,而不是(或优先于)(2)的.htaccess。实际上,我观察到,即使在导航到(3)http://www.mywordpressite.com/portal/时,来自(2)的.htaccess也正在接管。

正如你可以想像,根目录是一个WordPress网站与标准的WordPress .htaccess文件:

/.htaccess

<files wp-config.php> 
Order deny,allow 
deny from all 
</files> 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

门户是一个Laravel门户,具有标准Laravel。 htaccess文件

/portal/.htaccess

<IfModule mod_rewrite.c> 
    Options -MultiViews 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

我注意到的是,如果我删除(2)/.htaccess,突然间,所有东西都可以在门户网站上运行,所以肯定会发生冲突。我不会在这里发布我的虚拟主机的东西,因为两个.htaccess的工作/做他们应该做的 - 只是不在同一时间:

/.htaccess重定向管道所有输入的地方输入不对应于index.php文件中的文件或目录以便更好地解析。

/portal/.htaccess做了类似的事情。

我已经注意到的是,既.htaccesses,如果我浏览到,通常会通过门户网站的.htaccess解析的路线,如http://www.mywordpressite.com/portal/this/is/a/route我最终从我WordPress的网站得到一个404(例如它将URL传递到wordpress根目录的/index.php文件中),当然这个页面在WP中不存在。

当我删除wp /.htaccess时,当然wordpress不能正常工作,但突然之间,门户网站的.htaccess开始正常工作,并通过将url参数传递到/ portal来触发相应的路由/index.php进行处理。

这似乎倒退给我。有什么建议么?

+1

你有没有尝试从WP规则集中排除'/ portal',像这样:'RewriteRule^index \ .php $ - [L]'下面的'RewriteCond%{REQUEST_URI}!/ portal [NC]',在门户规则集中添加'/ portal',如下所示:'RewriteCond%{REQUEST_URI} ^/portal [NC]'?正如MikeAnthony所说,你必须在门户规则集中添加'RewriteBase/portal'。 – 2013-02-16 23:51:56

回答

1

我觉得你的问题在于这样一个事实:你忽略了在门户网站访问文件RewriteBase

RewriteBase /portal/ 

我不是一个超文本访问的天才,所以我无法解释发生了什么当你离开它。但我相信这就是解决方案。