【问题标题】:.htaccess RewriteRule conflict across different directories.htaccess RewriteRule 跨不同目录冲突
【发布时间】:2014-07-08 00:53:55
【问题描述】:

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

/var/www/somesite.com

/var/www/anothersite.com

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

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

http://localhost/somesite.com/track/abc123 - 按预期工作

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

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

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

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

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

【问题讨论】:

    标签: php apache .htaccess mod-rewrite lamp


    【解决方案1】:

    你可以在/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]
    

    【讨论】:

    • 虽然它确实有效,但这感觉像是一种变通方法。我宁愿知道为什么 Apache 会这样。感谢您的意见!
    • 我说这是一种解决方法,因为根据我的阅读,Apache 不应该以这种方式运行。子文件夹中的每个 htaccess 文件都应独立运行。我没有找到解决问题的其他方法,因此我正在使用您提供的解决方案。
    • 子文件夹的htaccess继承父htaccess的情况很多。您在这里拥有的是标准的 htaccess 重写行为。
    • 父文件夹中没有 htaccess。这是两个相互独立的 htaccess 文件。在根目录下的单独目录中,上面没有 htaccess 文件。应该没有冲突,但还是有。
    【解决方案2】:
    RewriteCond %{HTTP_HOST} ^(?:www\.)?(somesite\.com|anothersite\.com)$
    RewriteRule ^track/ /%1/order_track.php [NC,L]
    

    如果不需要,则不需要 (.*)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2016-11-18
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多