htaccess 文件影响父目录

Posted

技术标签:

【中文标题】htaccess 文件影响父目录【英文标题】:htacces file affecting parent directory 【发布时间】:2013-09-26 23:01:40 【问题描述】:

我有一个这样设置的网站:

目录结构为:

/usr/local/sites/example.com/secure/admin

apache 中的主主机配置,例如 example.com:80 指向

/usr/local/sites/example.com

example.com:443 的 https 配置指向

/usr/local/sites/example.com/secure

我有另一个使用不同域的虚拟主机,我们称之为 example2.com:443 我严格用于指向的管理内容:

/usr/local/sites/example.com/secure/admin

我在example.comexample.com/secure 中都有.htaccess 文件 一些 mod_rewrite 规则。

/usr/local/sites/example.com/secure/admin中没有.htaccess文件

然而,当我访问 example2.com 来管理站点时,.htaccess 文件 从父目录影响管理页面的功能。

应该是这样吗? apache不应该应用 mod_rewrite 规则仅在虚拟主机的文档根目录中?

我尝试将 .htaccess 文件放入 /usr/local/sites/example.com/secure/admin 带有以下内容:

<IfModule mod_rewrite.c>
    RewriteEngine Off
</IfModule>

阿帕奇:

Apache/2.2.22 (Unix) DAV/2 php/5.3.15 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8r

这是在 Mac OS X 服务器上,如果重要的话(这就是为什么我一直无法 更新 apache 或 php)。我希望硬件到 linux 发行版 很快。

【问题讨论】:

【参考方案1】:

您实际上想要打开重写引擎。因为 htaccess 文件中的规则总是取代父目录中的任何规则(当不使用 Injerit 时),所以您要做的是打开重写引擎并在您的 htaccess 中 no rules文件。这会强制它优先于父目录中的规则。

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

而且因为它有优先权并且没有规则,所以不会应用重写的东西。

【讨论】:

没用。让重写引擎打开并且没有规则对问题没有影响。尽管如此,document_root 目录上方的目录中的 .htaccess 文件会影响站点,这还是很奇怪。从理论上讲,它不应该。 @JohnnyBravo 不,不应该评估文档根目录之外的 htaccess 文件。您确定是那些 htaccess 文件吗?比如,如果你删除它们,然后你访问example2.com:443,一切正常吗? 是的,就是父目录下的文件。我暂时禁用了它们,一切正常。它快把我逼疯了。我将服务器更新为 apache 2.2.4 和 php 5.3.26 并没有解决问题。 感谢您让我知道 RewriteOptions Inherit 指令以避免 RewriteRule 被子文件夹的 .htaccess 覆盖。

以上是关于htaccess 文件影响父目录的主要内容,如果未能解决你的问题,请参考以下文章

父目录中的 htaccess 导致“此处不允许 RewriteEngine”

父目录中的 htaccess 导致“此处不允许 RewriteEngine”

.htaccess 影响子域中的目录

子目录中的 CodeIgniter 站点,htaccess 文件可能会干扰主目录中的 htaccess 文件?

.htaccess 文件中的大量条目会减慢站点访问速度吗?

如何将用户重定向到另一个域 .htaccess