.htaccess RewriteRule跨不同目录的冲突

时间:2014-05-19 22:38:24

标签: php apache .htaccess mod-rewrite lamp

在我的Ubuntu开发机器上运行LAMP堆栈。对于我工作的每个网站,我在root下创建一个新目录:

/var/www/somesite.com

/var/www/anothersite.com

我遇到的问题是apache不允许跨这些文件夹重复重写规则。例如,如果我设置了这个:

RewriteRule ^ track /(.*)$ /somesite.com/order_track.php [nc,L]

http://localhost/somesite.com/track/abc123 - 按意图工作

同样的声明不适用于anothersite.com

RewriteRule ^ track /(.*)$/anothersite.com/order_track.php [nc,L]

http://localhost/anothersite.com/track/abc123 - Apache返回404。

清除浏览器缓存并重新启动Apache无效。 Apache似乎“记住”第一个使用的rewriterule。这发生在我的所有计算机上(家庭,工作,笔记本电脑)

编辑:我应该提到我在每个目录中都有一个htaccess文件。 root / var / www不包含htaccess文件。每个目录的htaccess都应该独立运行。但他们没有。

2 个答案:

答案 0 :(得分:0)

您可以在/somesite.com/.htaccess

中使用此功能
RewriteEngine On
RewriteBase /somesite.com/

RewriteRule ^track/(.*)$ order_track.php [NC,L]

然后在/anothersite.com/.htaccess

RewriteEngine On
RewriteBase /anothersite.com/

RewriteRule ^track/(.*)$ order_track.php [NC,L]

答案 1 :(得分:0)

RewriteCond %{HTTP_HOST} ^(?:www\.)?(somesite\.com|anothersite\.com)$
RewriteRule ^track/ /%1/order_track.php [NC,L]

如果不需要,你不需要(。*)来抓住这个。

相关问题