我有一个留言板,偶尔会有一个请求带有编码的字符,如果没有设置重定向,访问者会收到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=
也就是说,替换不会填写主题编号。
在此问题出现之前,我没有遇到过替换之前的改写(通过%1,%2等)。从%{THE_REQUEST}代替或者我错过了某些东西吗?
在Linux上运行Apache 2.2.22。
答案 0 :(得分:0)
匹配的表达式应位于括号(.*)
中,然后应显示在$1
中。
[PT]
或其他东西。