Php .htaccess重写不同目录之间的规则冲突

Php .htaccess重写不同目录之间的规则冲突,php,apache,.htaccess,mod-rewrite,lamp,Php,Apache,.htaccess,Mod Rewrite,Lamp,在我的Ubuntu开发机器上,我运行一个LAMP堆栈。对于我处理的每个网站,我都会在根目录下创建一个新目录: /var/www/somesite.com /var/www/anothersite.com 我的问题是apache不允许在这些文件夹中重复重写规则。例如,如果我设置了此选项: 重写规则^track/*$/somesite.com/order\u track.php[nc,L] http://localhost/somesite.com/track/abc123 -如意算盘 同样的声明在

在我的Ubuntu开发机器上,我运行一个LAMP堆栈。对于我处理的每个网站,我都会在根目录下创建一个新目录:

/var/www/somesite.com

/var/www/anothersite.com

我的问题是apache不允许在这些文件夹中重复重写规则。例如,如果我设置了此选项:

重写规则^track/*$/somesite.com/order\u track.php[nc,L]

http://localhost/somesite.com/track/abc123 -如意算盘

同样的声明在另一个网站上不起作用

重写规则^track/*$/anothersite.com/order_track.php[nc,L]

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

清除浏览器缓存和重新启动Apache无效。Apache似乎还记得使用的第一条规则。这发生在我所有的电脑上我,工作,笔记本电脑

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

您可以在/somesite.com/.htaccess中找到这个:

然后在/anothersite.com/.htaccess中执行以下操作:


您不需要。*如果不需要,您就可以抓住这个机会。

虽然它确实有效,但这感觉就像是一种变通方法。我想知道为什么Apache会这样。谢谢你的意见!我说这是一种变通方法,因为从我所读到的内容来看,Apache不应该以这种方式运行。子文件夹中的每个htaccess文件应独立运行。我没有找到其他方法来纠正这个问题,因此我使用您提供的解决方案。在很多情况下,子文件夹的htaccess继承了父htaccess。这里是标准的htaccess重写行为。父文件夹中没有htaccess。这是两个彼此独立的htaccess文件。在根目录之外的单独目录中,上面没有htaccess文件。应该没有冲突,但也有冲突。
RewriteEngine On
RewriteBase /somesite.com/

RewriteRule ^track/(.*)$ order_track.php [NC,L]
RewriteEngine On
RewriteBase /anothersite.com/

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