如何用.htaccess仅重定向/web/路径至子域名?现有规则全站重定向
问题分析与修正方案
原规则的核心错误在于把路径匹配写到了HTTP_HOST的条件里——HTTP_HOST仅包含请求的域名(比如domain.es),不包含路径部分(比如/web/something),所以原规则中的Host条件永远无法匹配正常请求,导致规则逻辑失效。加上RewriteRule匹配了所有路径^(.*)$,最终造成全站被错误重定向。
修正后的.htaccess规则
Options +FollowSymlinks -MultiViews RewriteEngine on # HTTP 请求:仅重定向 /web/ 开头的路径到 sub.domain.es RewriteCond %{HTTP_HOST} ^(www\.)?domain\.es$ [NC] RewriteCond %{SERVER_PORT} =80 RewriteRule ^web/(.*)$ http://sub.domain.es/web/$1 [R=302,L] # HTTPS 请求:仅重定向 /web/ 开头的路径到 sub.domain.es RewriteCond %{HTTP_HOST} ^(www\.)?domain\.es$ [NC] RewriteCond %{SERVER_PORT} =443 RewriteRule ^web/(.*)$ https://sub.domain.es/web/$1 [R=302,L]
关键说明
- 精准路径匹配:RewriteRule中的
^web/(.*)$专门匹配以/web/开头的路径,仅对这类路径执行重定向,其他路径不受影响。 - 临时重定向测试:先用302临时重定向验证规则是否生效,确认无误后再改为301永久重定向,避免浏览器缓存错误规则。
- 清除缓存:如果之前有301缓存记录,测试前需清除浏览器缓存或使用无痕模式访问。
内容的提问来源于stack exchange,提问作者Jota Javier Gonzalez Garcia
相关产品推荐
相关产品推荐

