它应该是RewriteRule不起作用,为什么?

时间:2012-03-19 07:56:31

标签: apache mod-rewrite url-rewriting

我想要干净的网址,我的RewriteRule看起来像这样:

RewriteRule ^articles/([A-Z0-9-]+) /articles/index.php?slug=$1&%{QUERY_STRING} [PT,L]

工作正常,但我也想要处理小写字母,这就是混淆它的部分并给我一个内部服务器问题。如果我将上面的代码更改为此...

RewriteRule ^articles/([A-Za-z0-9-]+) /articles/index.php?slug=$1&%{QUERY_STRING} [PT,L]

...然后我遇到内部服务器问题。 apache错误日志说:

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

当我唯一能做的就是添加小写字母的处理时,任何人都知道为什么我会收到此错误?

2 个答案:

答案 0 :(得分:2)

问题在于你的模式:它没有结束符号($)。

所以当你调用/articles/index.php时,由于/ articles / index,它匹配。因此重定向循环。

如果你改变你的模式:

RewriteRule ^articles/([A-Za-z0-9-]+)$ ...

它会起作用,因为点字符(。)将不匹配。

答案 1 :(得分:0)

另外

您正在使用...&%{QUERY_STRING}。如果没有查询字符串,您最终会得到...&,这对于处理URL的任何内容来说都是一个空的多余参数。

mod_rewrite对查询字符串进行了特殊处理,因此您不需要这样做。如果添加标记[QSA],则表示您在重写中添加的任何查询字符串材料(由?表示)将被识别并与现有查询字符串组合。