Apache服务器URL重写异常:#被转义为%23致应用不兼容
解决Apache RewriteRule中#被转义为%23的问题
问题根源
Apache的mod_rewrite模块默认会对重写目标中的特殊字符(包括#)进行URL编码,所以你的规则里的#被转成了%23,导致应用无法识别锚点部分。
解决方案
在RewriteRule的标志中添加NE(NoEscape)参数,禁止mod_rewrite对特殊字符进行编码,让#保留为URL的锚点片段:
RewriteRule ^/?$ "https://%{HTTP_HOST}/xx/xxx#/login" [R=301,L,NE]
关键说明
NE标志的作用是告诉mod_rewrite不要对输出URL中的特殊字符进行编码,确保#直接作为锚点传递给客户端浏览器,而不是被转义成%23。- 由于使用了
R=301永久重定向,测试前请清空浏览器缓存,避免旧的重定向规则干扰测试结果。 - 确保你的Apache服务器已经启用了
mod_rewrite模块,并且该规则配置在正确的作用域内(比如.htaccess文件或对应虚拟主机的配置块中)。
内容的提问来源于stack exchange,提问作者jonnee_l
相关产品推荐
相关产品推荐

