【问题标题】:Get .htaccess from root directory to apply on all directories?从根目录获取 .htaccess 以应用于所有目录?
【发布时间】:2011-09-16 11:18:32
【问题描述】:

我的根目录 (public_html/) 中有一个 .htaccess 文件,如下所示:(XXX.XX.XX.XX 代表 IP)

RewriteCond %{HTTP_HOST} ^XXX.XX.XX.XX$ [NC]
RewriteRule ^(.*)$ http://www.justadomain.tld [R=301,L]

子文件夹和子文件夹的文件夹中也有 .htaccess 文件,但我希望此重写规则适用于帐户中的所有目录,无论是否存在 .htaccess,而不需要在每个文件中复制此规则。现有 .htaccess 文件中的规则应继续有效。

提前感谢您的回答!

【问题讨论】:

  • 恭喜,你已经完成了!这是 .htaccess 文件默认的工作方式。 :) 它没有正常工作吗?
  • 但是如果子文件夹中存在 .htaccess 文件,则此规则不起作用,只有文件夹的 .htaccess 文件中的规则有效。
  • 这很奇怪,不应该这样。 sub-htaccess 中的规则是否与您显示的规则有任何冲突?
  • 不,它们没有任何矛盾。看来,如果文件夹中存在 .htaccess 文件,则使用该文件并忽略下面的 .htaccess 文件。
  • 有什么建议可以尝试吗?几天来我一直在寻找解决方案...

标签: apache .htaccess


【解决方案1】:

如果您还想执行来自父 .htaccess 的重写规则,则需要将以下行添加到子文件夹中的每个 .htaccess 中:

RewriteOptions inherit

这会强制当前配置继承 父母。在每个虚拟服务器上下文中,这意味着映射, 继承主服务器的条件和规则。在 每个目录上下文这意味着条件和规则 父目录的 .htaccess 配置被继承。

从父范围继承的规则在规则之后应用 在子范围内指定。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions


或者——将你的“全局”规则从 .htaccess 移动到 VirtualHost 上下文(当然,这只是在你可以编辑服务器配置文件的情况下)。

【讨论】:

  • 谢谢你。但这意味着所有父规则都被采用,我必须编辑每个文件?另外:“从父范围继承的规则在子范围中指定的规则之后应用。”。这意味着如果发生冲突,父规则将起作用,对吗?
  • 1) 是的,它将应用来自一个父文件夹的所有规则。要让它应用所有父文件夹中的规则,您必须编辑所有 .htaccess 文件(您在这个文件上是正确的)。 2)不一定——这完全取决于规则/冲突和整个重写逻辑,真的。但是,如果 URL(或其他“主题”)保持不变,那么父规则很可能会接管。 只有 1 种正确的方法可以了解它在您的设置上的工作方式 -- 使用真实示例在真实系统上对其进行测试。
  • 感谢您的详细解答! (因为我自己的代表,不能给你 +1 代表..)
  • @Fabian 但是您可以将此答案标记为已接受:)(当然,如果您认为它有用)
  • 有趣,但我从文档中了解到的是“在每个目录的上下文中,这意味着父目录的 .htaccess 配置的条件和规则是继承的。” directory 他们的意思是 <directory> 指令。您不会在同一个虚拟主机中有不同的目录。不要混淆目录和文件夹。在“文件夹”上下文中,您不需要该指令。你的服务器配置有问题。
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 2010-12-09
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多