Apache重写规则问题

几个问题:

  1. 我有几个域托pipe在同一台服务器上,我创build了一些ReWrite规则,针对特定的{REQUEST_URI}被redirect到其他地方。 我将这些规则复制到每个虚拟主机。 我可以将这些规则放在一个文件中,并执行如下操作:

    <VirtualHost>

     ServerAdmin [email protected] DocumentRoot /var/www/html/<directory> ServerName <domain> ServerAlias www.<domain> ErrorLog logs/www_<domain>-error_log CustomLog logs/www_<domain>-access_log common RewriteEngine on Include rewrite_rules.conf 
  2. 如何创build一个规则,说如果请求进入特定的域名重新指向一个通用的“待售”页面。 例如,他们在www.Allertia.com上input的内容相同,我希望他们被引导至“待售”页面。

  1. 是的,你可以这么做。 Include指令的行为就好像命名文件的内容被包含在内。

  2. 假设你想要相同的“出售”页面显示所有的域名:

     <VirtualHost *:80> ServerName forsale1.com ServerAlias www.forsale1.com ServerAlias forsale2.com ServerAlias www.forsale2.com ... RewriteEngine on RewriteRule .* /var/www/html/path/to/forsale.html </VirtualHost> 

    这不会更改浏览器中显示的url。 如果要执行HTTPredirect,以便浏览器的URL发生更改,可以在重写规则之后添加[R] 。 (或者你可以使用Redirect或者RedirectMatch ,如果你的服务器处于高负载状态,可能会更快一些)

你想要的东西匹配传入的HTTP主机:头,所以这样的规则将工作:

 RewriteCond %{http_host} !^www.allertia.com RewriteRule / http://example.com/for-sale.html [R,L] 

你会发现的问题是,如果你说“重写所有的请求http://www.alertia.com到http://alertia.com/for-sale.html ”你会得到一个redirect循环。 因此redirect到一个不相关的域是最简单的。

然而,如果你希望你可以创build一个规则,说:“所有请求不等于/for-sale.html,重写”:

 RewriteCond %{http_host} www.allertia.com RewriteRule !/for-sale.html$ http://www.allertia.com/for-sale.html [R,L] 

显然你需要更新“待售”页面的path。 您可能还需要两次包含这些规则: