Apache ReWrite 规则问题

Apache ReWrite 规则问题

几个问题:

  1. 我在同一台服务器上托管了多个域名,并创建了一些 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 
    

  2. 如何创建一条规则,规定如果请求来自特定域,则重定向到通用的“待售”页面。例如,他们输入 www.Allertia.com,我希望他们被定向到待售页面。

答案1

  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。如果您想执行 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.comhttp://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]

显然,您需要更新“待售”页面的路径。您可能还想包含两次规则:

相关内容