.htaccess Rewrite规则不符合预期,请求修正方案
问题解决:修正Rewrite规则以完整捕获URL路径
问题原因
原规则RewriteRule ^feed/(.+)$ rss/$1 [L]在处理包含https:/(单斜杠)的URL时,无法完整保留feed/之后的内容,导致重定向结果被截断。这是因为Apache mod_rewrite默认会对路径中的特殊字符(如冒号、斜杠)进行解析或转义,干扰了正则捕获的完整性。
解决方案
可以通过两种方式修正规则:
方案1:利用REQUEST_URI变量捕获完整路径
直接基于请求的完整URI进行匹配,避免正则解析的干扰:
RewriteCond %{REQUEST_URI} ^/feed/(.*)$ RewriteRule ^ /rss/%1 [L,NE]
%{REQUEST_URI}包含了从根目录开始的完整请求路径,确保能捕获feed/之后的所有内容NE(NoEscape)标志确保特殊字符不被额外转义,保留原始URL结构
方案2:添加NE标志并调整正则
修改原规则,添加NE标志即可解决转义问题:
RewriteRule ^feed/(.*)$ rss/$1 [L,NE]
- 将
.+替换为.*(两者在该场景下功能相近,但.*更明确表示匹配任意字符) NE标志是核心,防止Apache对捕获的内容进行转义,保证完整保留feed/之后的URL部分
验证结果
使用上述任一规则后,对于URL https://example.com/feed/https:/feeds.buzzsprout.com/1560791.rss,会正确重定向到:
https://example.com/rss/https:/feeds.buzzsprout.com/1560791.rss
内容的提问来源于stack exchange,提问作者user1026605
相关产品推荐
相关产品推荐

