标题基本概括了所有内容.:-)我有很多虚拟主机,我想在httpd.conf文件的顶部放一个重写块,无论请求可能指向哪个虚拟主机,它都会重写URL.我怎么做到这一点?
我找到了这个,但我的问题是一样的:如何在不使用.htaccess文件并为每个虚拟主机执行其他操作的情况下执行此操作?
OMGTIA!
默认情况下,虚拟主机不会继承主服务器上下文中的mod_rewrite配置设置.要使主服务器设置应用于虚拟主机,必须在每个
部分中放置以下指令:
RewriteEngine On RewriteOptions Inherit
单击http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html以查找更多信息
RewriteOptions InheritDown
在父作用域(例如httpd.conf)中指定以在子虚拟主机中应用规则而不对其进行修改.
这仅适用于RewriteEngine
指令设置为的虚拟主机on
:
请注意,虚拟主机不会继承重写配置.这意味着您需要为要在其中使用重写规则的每个虚拟主机指定RewriteEngine on指令.
(来源)
Apache自2.4.8起支持此功能(在原始问题时不可用).
从文档RewriteOptions
:
InheritDown
如果启用此选项,则所有子配置都将继承当前配置的配置.它等同于在所有子配置中指定RewriteOptions 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)
看起来最简单的解决方案是添加
RewriteOptions inherit
每个VirtualHost指令.这比使用.htaccess文件搞乱要简单得多.Apache非常清楚这一事实
默认情况下,不会继承重写配置.这意味着您需要为要使用它的每个虚拟主机指定RewriteEngine on指令.(http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html)
显然,更改默认值的方法是通过子级中的RewriteOptions(vhost或director),因此您必须在每个子级中执行某些操作.
我从来没有测试它,所以它可能不起作用,但我会尝试将include
所有虚拟主机块中的指令添加到单个文件中.您必须更改每个虚拟主机配置块一次,但在此之后,您应该有一个可以进行更改的中心位置.因人而异.