几个问题:
我在同一台服务器上托管了多个域名,并创建了一些 ReWrite 规则,这些规则针对特定的 {REQUEST_URI} 重定向到其他地方。我将这些规则复制到每个虚拟主机。我可以将这些规则放在一个文件中并执行以下操作吗:
<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
如何创建一条规则,规定如果请求来自特定域,则重定向到通用的“待售”页面。例如,他们输入 www.Allertia.com,我希望他们被定向到待售页面。
答案1
是的,你可以这么做。该
Include
指令的作用就像是将指定文件的内容直接包含在内一样。假设您希望所有域名都显示相同的“待售”页面:
<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。如果您想执行 HTTP 重定向,以便浏览器中的 URL做更改,您可以
[R]
在重写规则后添加。(或者,如果您的服务器负载很高,您可以使用Redirect
或,这可能会更快一些)RedirectMatch
答案2
您需要一些与传入的 HTTP Host: 标头匹配的内容,因此如下规则将起作用:
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“您将得到一个重定向循环。因此,重定向到不相关的域是最简单的。
但是如果您愿意,您可以创建一条规则,规定“对于所有不等于 /for-sale.html 的请求,进行重写”:
RewriteCond %{http_host} www.allertia.com
RewriteRule !/for-sale.html$ http://www.allertia.com/for-sale.html [R,L]
显然,您需要更新“待售”页面的路径。您可能还想包含两次规则: