.htaccess rewriterule - 从rewritecond the_request替换

时间:2012-11-19 15:03:00

标签: .htaccess mod-rewrite request substitution

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

1 个答案:

答案 0 :(得分:0)

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

顺便说一句,你真的想要一个重定向,因为这会回到设备,它可能会在重定向之前再次逃脱它。你可能想要做一个直通[PT]或其他东西。