求助配置.htaccess RewriteRule实现特定路径跨域名重定向
.htaccess RewriteRule 重定向问题解决方法
问题需求
需要将形如 example.com/de/anypath 的URL永久重定向到 example.de/anypath,其中anypath可以是任意路径,例如:
example.com/de/articles/programming/hello-world→example.de/articles/programming/hello-worldexample.com/de/events/pic-nic→example.de/events/pic-nic
现有尝试及问题
当前编写的规则未生效:
RewriteRule "^/de/(.*)$" "http://example.de/$1" [R=301,NC,L]
搭配的RewriteCond也存在错误:
RewriteCond %{HTTP_HOST} http://example.com/de
已确认.htaccess文件有效(输入错误会触发报错),且测试如下全局重定向规则可正常生效:
RewriteRule "^(.*)$" "https://google.com" [R=301,NC,L]
解决方案
问题出在两个核心细节:
- .htaccess的路径匹配逻辑:在.htaccess文件中,RewriteRule的匹配模式不需要以
/开头——因为请求路径已经去除了网站根目录的前缀(比如/de/anypath在.htaccess上下文里实际匹配的是de/anypath)。 - HTTP_HOST的取值范围:
%{HTTP_HOST}仅存储请求的主机名(如example.com),不包含协议和路径,所以之前的RewriteCond写法完全不符合规则。
正确的配置规则如下:
# 仅对example.com的请求触发重定向 RewriteCond %{HTTP_HOST} ^example\.com$ [NC] # 匹配/de/开头的路径,捕获后续任意内容并重定向 RewriteRule ^de/(.*)$ http://example.de/$1 [R=301,NC,L]
规则说明
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]:限定仅当请求主机为example.com时执行后续规则,NC表示不区分大小写。RewriteRule ^de/(.*)$ http://example.de/$1 [R=301,NC,L]:^de/(.*)$:匹配以de/开头的路径,将de/之后的所有内容捕获到变量$1中。http://example.de/$1:把捕获的路径片段拼接到目标域名后完成重定向。R=301:标记为永久重定向,利于搜索引擎收录和浏览器缓存。L:执行完该规则后停止后续Rewrite规则的处理。
验证
将上述规则替换到.htaccess文件后,测试示例URL即可确认是否正常跳转到对应example.de路径。
内容的提问来源于stack exchange,提问作者duck
相关产品推荐
相关产品推荐

