.htaccess重写URL时?被转为%3f的问题求助
解决.htaccess RewriteRule里问号被编码成%3F的问题
嘿,我懂你碰到的这个糟心事——RewriteRule把目标URL里的问号转成了%3F,导致原本的查询参数逻辑完全乱套了对吧?别慌,这个问题其实很好解决,给你的规则加个小标志就行。
你当前的规则里,mod_rewrite默认会对目标中的特殊字符做URL编码,问号刚好属于这类会被编码的字符,所以才出现了%3F的情况。咱们只需要加上NE(NoEscape)标志,明确告诉它不要对输出URL里的特殊字符进行编码。修改后的规则如下:
# Rewrite for instagram_gallery.php?DataSource=1 RewriteRule ^instagram-gallery/([_./:a-zA-Z0-9#%@\(\)\[\]\-\,\']+)/?$ instagram_gallery.php?DataSource=$1 [NC,L,NE]
为啥会出现这个问题?
当你在RewriteRule的目标里用?来区分脚本路径和查询参数时,mod_rewrite默认会把这个问号编码成%3F,结果服务器就把instagram_gallery.php%3FDataSource=parametervalue当成了一个完整的文件名,而不是正确的脚本路径加查询参数。加上NE标志后,问号会被原封不动保留,Apache就能正确识别这是查询参数的分隔符了。
另外也可以顺手确认下你的.htaccess开头有没有写RewriteEngine On——虽然你说测试时URL解析正常,但这是所有rewrite规则生效的前提,要是没加的话补上就好。
内容的提问来源于stack exchange,提问作者Craig Rushforth
相关产品推荐
相关产品推荐

