RewriteCond %{QUERY_STRING} ^?afe([^&]*)
RewriteCond %{QUERY_STRING} !=""
RewriteRule (.*) /$1%3F%{QUERY_STRING}? [L]
这个
QUERY_STRING
服务器变量不包含
?
本身(查询字符串
分隔符
). 但是,正则表达式
^?afe([^&]*)
完全无效(
?
是正则表达式量词,并且
^
不可量化),因此这将/应该导致500内部服务器错误,因为regex不能
编译的
。(虽然你说你得到了404分,但这条规则是否正在处理中?!)
无需检查查询字符串是否为空(秒
条件
)当您已经确定存在与模式匹配的查询字符串时(在第一个
条件
).
请尝试以下操作:
RewriteCond %{QUERY_STRING} ^afe/[^&]+\.doc$
RewriteRule ^(uploads/.+) $1\%3F%{QUERY_STRING} [NE,QSD,L]
请注意
%
之前
3
必须是反斜杠转义,以避免将其视为数字后引用(否则将为空)。
我删除了上的斜杠前缀
替代
字符串,因此它将被视为相对文件路径,而不是URL路径(除非您有
RewriteBase
指令集)。
这个
QSD
(查询字符串丢弃)标志是首选的方式
丢弃
Apache 2.4上请求的原始查询字符串,而不是附加一个空的查询字符串(尾随
?
)这在早期版本的Apache上是必需的。