Htaccess重定向循环问题:子站域名别名跳转配置需求
解决子站重定向统一地址的方案
我来帮你搞定这个重定向的问题!根据你的场景——要把parent.org/child(含所有子路径)和child.org(含所有子路径)的请求都统一跳转到child.org/child开头的地址,我整理了几种主流服务器环境下的配置方案,还特意规避了循环重定向的坑:
Nginx 配置方案
如果你的服务器用的是Nginx,分两个server块配置即可:
1. 处理parent.org的重定向
在parent.org对应的server块里添加规则,把所有parent.org/child开头的请求跳转到child.org的对应路径:
server { listen 80; listen [::]:80; server_name parent.org; # 匹配parent.org/child开头的所有请求,永久重定向到child.org对应路径 location ~ ^/child(/.*)?$ { return 301 https://child.org$request_uri; } # 这里保留parent.org原有其他配置... }
2. 处理child.org的重定向
在child.org对应的server块里,只对非/child开头的请求做重定向,避免循环:
server { listen 80; listen [::]:80; server_name child.org; # 匹配根路径或非/child开头的路径,重定向到/child开头的地址 location ~ ^/(?!child)(.*)?$ { set $redirect_path $1; # 处理根路径的情况,避免出现双斜杠 if ($redirect_path = "") { set $redirect_path "/"; } return 301 https://child.org/child$redirect_path; } # 正常处理/child开头的请求,指向你的子站内容 location /child { root /path/to/your/child/site; # 替换成子站实际目录 # 如果是反向代理后端服务,就用proxy_pass http://localhost:xxxx; try_files $uri $uri/ =404; } }
Apache 配置方案
如果用Apache,可以通过.htaccess文件配置:
1. parent.org的重定向规则
在parent.org根目录的.htaccess里添加:
RewriteEngine On # 仅匹配parent.org域名下的/child开头请求 RewriteCond %{HTTP_HOST} ^parent\.org$ RewriteRule ^child(/.*)?$ https://child.org%{REQUEST_URI} [R=301,L]
2. child.org的重定向规则
在child.org对应根目录的.htaccess里添加:
RewriteEngine On # 先处理根路径,直接跳转到/child RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^$ https://child.org/child [R=301,L] # 处理非/child开头的其他路径,跳转到/child/对应子路径 RewriteCond %{REQUEST_URI} !^/child/ RewriteCond %{REQUEST_URI} !^/child$ RewriteRule ^(.*)$ https://child.org/child/$1 [R=301,L]
Cloudflare 页面规则方案(无需改服务器配置)
如果你的域名托管在Cloudflare,直接用页面规则就能搞定:
- 规则1:匹配URL
parent.org/child/*,选择「转发URL」→ 301永久重定向,目标URL填https://child.org/child/$1 - 规则2:匹配URL
child.org(根路径),选择「转发URL」→ 301永久重定向,目标URL填https://child.org/child - 规则3:匹配URL
child.org/*,添加例外条件「URL不匹配child.org/child/*」,选择「转发URL」→ 301永久重定向,目标URL填https://child.org/child/$1
关键注意事项
- HTTPS适配:如果你的站点用HTTPS,一定要把规则里的
http://改成https://,同时确保child.org有有效的SSL证书 - 避免循环:所有规则都要排除
child.org/child开头的请求,否则会出现无限循环重定向 - 测试验证:可以用
curl -I http://parent.org/child/test或者curl -I http://child.org/test命令,查看返回的Location头是否符合预期 - 缓存清理:如果之前有错误的重定向配置,测试时记得用浏览器隐私模式或者清除缓存,避免旧缓存影响结果
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

