Apache2 Rewrite规则问题:跨HOST的URI重定向失效排查
解决域名路径跨站重定向问题
需求背景
已完成CNAME配置且功能正常,需实现两类永久重定向(适配谷歌学术索引更新):
- 将
todigra.org/index.php/dl及后续路径重定向至dl.digra.org/index.php/dl - 将
dl.digra.org/index.php/todigra及后续路径重定向至todigra.org/index.php/todigra
正确Rewrite规则配置
将以下规则添加到站点根目录的 .htaccess 文件(或对应VirtualHost配置块)中:
# 开启重写引擎 RewriteEngine On # 规则1:todigra.org下的dl路径跳转至dl.digra.org RewriteCond %{HTTP_HOST} ^todigra\.org$ [NC] RewriteRule ^index\.php/dl(.*)$ https://dl.digra.org/index.php/dl$1 [R=301,L] # 规则2:dl.digra.org下的todigra路径跳转至todigra.org RewriteCond %{HTTP_HOST} ^dl\.digra\.org$ [NC] RewriteRule ^index\.php/todigra(.*)$ https://todigra.org/index.php/todigra$1 [R=301,L]
规则细节说明
RewriteCond %{HTTP_HOST} ^todigra\.org$ [NC]:精准匹配请求主机头为todigra.org,[NC]表示忽略大小写^index\.php/dl(.*)$:捕获以index.php/dl开头的完整路径,(.*)保留后续所有路径内容[R=301,L]:R=301标记永久重定向(引导搜索引擎更新索引记录),L表示匹配后停止执行后续规则
旧规则失效常见原因
若之前的后两条规则无作用,大概率是以下问题导致:
- 规则顺序错误:这两条定向规则需放在其他通用Rewrite规则之前,避免被提前匹配拦截
- 正则语法错误:未转义路径中的
.(正则中.代表任意字符),或未用(.*)捕获后续路径 - 未启用重写引擎:缺少
RewriteEngine On语句,导致所有规则不生效 - 主机头匹配不精准:未加
^和$导致匹配到无关子域名,或未加[NC]导致大小写不兼容
内容的提问来源于stack exchange,提问作者Petri Lankoski
相关产品推荐
相关产品推荐

