0

我有一个留言板,偶尔会出现带有编码字符的请求,如果未设置重定向,访问者会收到 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。

4

1 回答 1

0

匹配的表达式应该在括号中(.*),然后它应该显示在$1.

顺便说一句,您真的想要重定向吗,因为这会返回到可能在重定向之前再次转义的设备。您可能想要进行直通[PT]或其他操作。

于 2012-11-19T15:12:30.737 回答