htaccess重写导致URL附加OrdID参数无法被PHP获取的问题
问题原因与解决方案
问题出在你的RewriteRule没有配置**查询字符串追加(QSA)**标志,默认情况下,重写规则会用新生成的查询参数完全替换原URL的参数,导致你附加的OrdID被丢弃。
解决步骤:
- 在你的RewriteRule末尾添加
[QSA]标志(与其他标志用逗号分隔),示例如下:# 原规则(丢失参数) RewriteRule ^test\.htm$ example.php?Vendor=$1&Maincategory=$2&Source=$3&Pos=$4&Search=$5 [L] # 修改后(保留原参数) RewriteRule ^test\.htm$ example.php?Vendor=$1&Maincategory=$2&Source=$3&Pos=$4&Search=$5 [L,QSA]
原理说明:
QSA(Query String Append)是Apache重写模块的核心标志之一,它会自动把原URL中的查询参数(比如OrdID=304819)追加到重写后的查询字符串末尾,不会覆盖规则里定义的参数。这样PHP的$_GET或$_REQUEST就能同时获取到重写生成的Vendor、Maincategory等参数,以及你附加的OrdID参数。
额外注意:
- 确保正则表达式能正确捕获
$1-$5对应的分组内容,避免因匹配错误导致其他参数异常; - 如果有多个RewriteRule,注意规则的执行顺序,
[L]标志会终止后续规则的执行,确保当前规则优先生效。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

