如何通过.htaccess实现除/backend外所有URL重定向到新域名?
解决.htaccess排除虚拟路径/backend重定向失效的问题
你的问题出在两个关键点:一是原规则仅精确匹配/backend/(带结尾斜杠),无法覆盖/backend或/backend/xxx这类路径;二是虚拟地址的/backend可能已经被其他重写规则修改了REQUEST_URI变量,导致排除条件失效。以下是两种可行的解决方案:
方案一:基于原始请求行匹配(最可靠,适配虚拟路径)
利用%{THE_REQUEST}变量,它记录的是客户端发送的原始请求行,不会被后续重写规则修改,能准确识别原始请求的路径:
# 匹配example.de或www.example.de的请求 RewriteCond %{HTTP_HOST} ^(www\.)?example\.de$ # 排除所有以/backend开头的原始请求(包括/backend、/backend/、/backend/xxx) RewriteCond %{THE_REQUEST} !\s/backend(/|\s) # 重定向到新域名 RewriteRule ^ https://www.bing.de/ [R=302,L]
方案二:调整REQUEST_URI的匹配范围
如果不需要考虑原始请求的修改问题,也可以扩大REQUEST_URI的排除范围,覆盖所有/backend开头的路径:
RewriteCond %{HTTP_HOST} ^(www\.)?example\.de$ # 排除/backend、/backend/以及所有子路径 RewriteCond %{REQUEST_URI} !^/backend(/.*)?$ RewriteRule ^ https://www.bing.de/ [R=302,L]
额外注意事项
如果/backend是由其他.htaccess规则处理的虚拟路径,请确保上述重定向规则放在所有处理/backend的规则之前,否则L标志会终止后续规则,导致/backend的虚拟路径无法被正确解析。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

