我有一个留言板,偶尔会出现带有编码字符的请求,如果未设置重定向,访问者会收到 404 响应。
例如,主题 #309 的请求以 viewtopic.php%3Ft%3D309 的形式出现,而不是 viewtopic.php?t=309
所以我有一个重定向设置如下:
# Redirect from calls to incorrect topic constructs to the actual topic link
RewriteCond %{THE_REQUEST} viewtopic\.php%3Ft%3D([0-9]+)
RewriteRule .* http://www.example.com/viewtopic.php?t=%1 [R=301,L]
我查看 %{THE_REQUEST} 因为它是查看带有编码的请求的唯一方法。然后我选择 %3D (= 符号)之后的一位或多位数字作为替换。
发生的事情是,根据我的日志,重写条件正在匹配,并且重写器被触发,但它重定向到
http://www.example.com/viewtopic.php?t=
即替换不填写主题号。
在这个问题之前,我之前没有遇到过用 rewritecond 替换(通过 %1、%2 等)的问题。替换 %{THE_REQUEST} 有什么特别之处还是我错过了什么?
在 Linux 上运行 Apache 2.2.22。