设置重定向规则的 HTTP 条件

设置重定向规则的 HTTP 条件

我的.htaccess转发代理来自A.html网页模板使用以下模式:

Redirect 301 /A.html http://mysite.com/B.html

由于Redirect指令需要设置目标主机,是否可以让此规则仅在特定主机上生效?我有一个测试域和一个部署域,并且只希望它在部署域上生效。我可以为Rewrite规则设置 HTTP 条件,但是如何为 HTTP Redirects 设置条件?

答案1

我得出的结论是,仅使用指令无法实现这一点Redirect。如果需要在某些 HTTP 条件下重定向访问者,则必须使用Rewrite规则。

答案2

您实际上可以这样做,但您会丢失 301 重定向代码。

SetEnvIfNoCase Host "myotherdomain.com" redirectthisdomain

<Files "A.html">
   Order Deny,Allow
   Deny from env=redirectthisdomain

   ErrorDocument 403 http://mysite.com/B.html
</Files>

答案3

只需将重定向规则放入部署域的 vhost 配置中。这样它就只对此主机有效。

答案4

举个简单的例子,如果访问者访问 dev.example.com/A.html,那么他们会被重定向到 B.html。如果他们访问 www.example.com/A.html,那么他们会被重定向到 C.html;两者都是 301 重定向。

RewriteEngine on
RewriteCond %(HTTP_HOST) ^dev.example.com$ [NC]
RewriteCond %(REQUEST_URI) ^/A.html
RewriteRule ^(.*)$ http://dev.exmaple.com/B.html [R=301]

RewriteCond %(HTTP_HOST) !^dev.example.com$ [NC]
RewriteCond %(REQUEST_URI) ^/A.html
RewriteRule ^(.*)$ http://dev.exmaple.com/C.html [R=301]

您可以阅读更多关于Apache 的 Mod_Rewrite网站。

相关内容