首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Apache中实现适用于所有虚拟主机的全局RewriteCond / RewriteRule?

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

Stack Overflow用户
提问于 2008-12-05 17:23:26
回答 4查看 21.7K关注 0票数 21

标题几乎说明了一切。:-)我有很多虚拟主机,我想在httpd.conf文件的顶部放置一个重写块来重写URL,而不管请求可能被定向到哪个虚拟主机。我到底该怎么做呢?

我找到了this,但我的问题是一样的:如果不借助.htaccess文件并对每个虚拟主机执行其他操作,我如何才能做到这一点?

OMGTIA!

EN

回答 4

Stack Overflow用户

发布于 2011-12-12 12:46:51

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

代码语言:javascript
复制
RewriteEngine On
RewriteOptions Inherit 

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

票数 12
EN

Stack Overflow用户

发布于 2008-12-18 18:49:01

我从未测试过它,因此它可能无法工作,但我会尝试将所有虚拟主机块中的include指令添加到单个文件中。您必须更改每个虚拟主机配置块一次,但在此之后,您应该有一个中心位置来进行更改。YMMV.

票数 5
EN

Stack Overflow用户

发布于 2010-07-09 22:39:25

如果你只是想在域名部分重写一些东西,例如修复一个常见的拼写错误,你甚至不需要'inherit‘选项。我设置了一个无名称的虚拟主机来捕获所有无效的主机名,并在重定向它们之前正确地重新出售它们。

由于这使用了重定向,因此在应用重写之后将会找到适当的虚拟主机。

代码语言:javascript
复制
Options +Indexes +FollowSymLinks
RewriteEngine on
# If it begins with only domain.com, prepend www and send to www.domain.com
RewriteCond %{HTTP_HOST} ^domain [NC]
RewriteRule ^(.*) http://www.domain.com$1 [L,R=301]

# Correct misspelling in the domain name, applies to any VirtualHost in the domain
# Requires a subdomain, i.e. (serviceXXX.)domain.com, or the prepended www. from above
RewriteCond %{HTTP_HOST} ^([^.]+\.)dommmmmain\.com\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+\.)?domain.com(.*) http://$1domain.com$2 [L,R=301]

# No-name virtual host to catch all invalid hostnames and mod_rewrite and redirect them
<VirtualHost *>
    RewriteEngine on
    RewriteOptions inherit
</VirtualHost>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/344588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档