我想要干净的网址,我的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.
当我唯一能做的就是添加小写字母的处理时,任何人都知道为什么我会收到此错误?
答案 0 :(得分:2)
问题在于你的模式:它没有结束符号($)。
所以当你调用/articles/index.php时,由于/ articles / index,它匹配。因此重定向循环。
如果你改变你的模式:
RewriteRule ^articles/([A-Za-z0-9-]+)$ ...
它会起作用,因为点字符(。)将不匹配。
答案 1 :(得分:0)
您正在使用...&%{QUERY_STRING}
。如果没有查询字符串,您最终会得到...&
,这对于处理URL的任何内容来说都是一个空的多余参数。
mod_rewrite
对查询字符串进行了特殊处理,因此您不需要这样做。如果添加标记[QSA]
,则表示您在重写中添加的任何查询字符串材料(由?
表示)将被识别并与现有查询字符串组合。