如何在Apache中实现应用于所有虚拟主机的全局RewriteCond/RewriteRule?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (124)

标题基本概括了所有内容。我有很多虚拟主机,并且我想在httpd.conf文件的顶部放置一个重写块,以重写URL,而不管请求可能指向哪个虚拟主机。我该怎么做?

我发现这一点,但我的问题是一样的:我怎么能做到这一点,而不诉诸.htaccess文件和每个虚拟主机执行一些其他行动?

提问于
用户回答回答于

RewriteOptions InheritDown在父范围中指定(例如httpd.conf),以便将子规则应用到子虚拟主机而不修改它们。

这只适用于RewriteEngine指令设置为的虚拟主机on

请注意,重写配置不会被虚拟主机继承。这意味着需要为每个您希望使用重写规则的虚拟主机启用RewriteEngine on指令。

来源

Apache自2.4.8开始支持这一点(在原始问题时不可用)。

来自以下文件RewriteOptions

InheritDown 如果启用此选项,则所有子配置都将继承当前配置的配置。这相当于在所有子配置中指定RewriteOptions Inherit。有关如何处理父子关系的更多详细信息,请参阅Inherit选项。在Apache HTTP Server 2.4.8和更高版本中可用。 InheritDownBefore 与上面的InheritDown类似,但来自当前作用域的规则应用于任何子作用域中指定的规则之前。在Apache HTTP Server 2.4.8和更高版本中可用。 IgnoreInherit 此选项强制当前配置和子配置忽略所有将从父级继承的规则,指定InheritDown或InheritDownBefore。在Apache HTTP Server 2.4.8和更高版本中可用。 (http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions)

用户回答回答于

默认情况下,主服务器上下文中的mod_rewrite配置设置不会被虚拟主机继承。要使主服务器设置适用于虚拟主机,必须在每个<VirtualHost>部分放置以下指令:

RewriteEngine On
RewriteOptions Inherit 

点击http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html以查找更多信息

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励