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.com
和example.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”