You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:24:56