在服务多个域名(example.com、example.org 等)的网站上,我们希望根据域名重定向页面:
https://www.example.com/page1 => https://www.example.com/page2
https://www.example.org/page1 => https://www.example.org/page3
使用.htaccess,但以下内容:
Redirect "/page1" "https://www.example.com/page2"
将应用于两个领域。如何实现这一点?
答案1
这推荐来自 Apache 项目的是:
一般而言,仅
.htaccess
当您无权访问主服务器配置文件时才应使用文件。[换句话说:您的站点位于共享主机上,并且您没有管理员级别的权限访问主 apache httpd 配置]...一个常见的误解用户身份验证和 mod_rewrite 指令必须放在.htaccess
文件中。
因为使用.htaccess机制会损害性能。
因此,最好只是调整您的 httpd.conf(或用于设置您的站点的包含内容),为每个域设置单独的节,并在那里进行必要的重定向:
<VirtualHost *:443>
DocumentRoot "/www/example"
ServerName www.example.com
# Other directives here
Redirect "/page1" "https://www.example.com/page2"
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/www/example"
ServerName www.example.org
# Other directives here
Redirect "/page1" "https://www.example.org/page3"
</VirtualHost>
当您在共享主机上并且绝对必须使用文件时.htaccess
;您的问题实际上与 ServerFault 无关,但方法是根据客户端使用的 HTTP Host: 标头进行不同的条件重定向。
您也可以使用<If>
指示:
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect "/page1" "https://www.example.com/page2"
</If>
<If "%{HTTP_HOST} == 'www.example.org'">
Redirect "/page1" "https://www.example.org/page3"
</If>
或者使用 mod_rewrite 规则:
RewriteCond "%{HTTP_HOST}" "^www\.example\.com" [NC]
RewriteRule "^/page1" "https://www.example.com/page2" [R]
RewriteCond "%{HTTP_HOST}" "^www\.example\.org" [NC]
RewriteRule "^/page1" "https://www.example.org/page3" [R]