外部来源访问站点如何重定向至新路径且允许站内跳转访问旧站
实现方案
你之前的规则失效核心原因是没有排除新站自身路径的请求,同时来源匹配范围错误,会把旧站内部跳转的请求也豁免,不符合需求。你可以在public_html根目录的.htaccess文件中添加以下规则:
RewriteEngine On # 排除新站目录本身的请求,避免重定向死循环 RewriteCond %{REQUEST_URI} !^/new(/.*)?$ # 仅豁免从新站点跳转过来的请求 RewriteCond %{HTTP_REFERER} !^https://example.com/new(/.*)?$ # 匹配所有未满足豁免条件的请求,临时重定向到新站 RewriteRule ^(.*)$ /new/$1 [L,R=302]
规则说明
- 第一条重写条件过滤掉所有访问新站本身的请求,避免出现重定向死循环
- 第二条重写条件仅放行从新站点页面跳转过来的访问请求,其他所有来源(直接输入地址、第三方站点跳转、搜索引擎蜘蛛等)的请求都会触发重定向
- 测试阶段使用
302临时重定向避免浏览器缓存规则,确认功能符合预期后可以把R=302换成R=301启用永久重定向
注意事项
- 部分浏览器会给用户提供禁用HTTP_REFERER发送的功能,这类用户无法被识别来源,默认会被一直重定向到新站,无法访问旧站,属于正常的兼容边界
- 新站页面引用旧站根目录的静态资源(图片、CSS、JS文件等)时,因为请求来源是新站地址,不会被重定向,可以正常加载
内容的提问来源于stack exchange,提问作者Adrian P.
相关产品推荐
相关产品推荐

