我发现有些人的语法链接错误。
例如,我们有一篇带有网址
的文章http://www.oursite.com/demo/article-179.html
问题是很多人已经将这篇文章链接回来了,语法很糟糕,例如
http://www.oursite.com/demo/article-179.html%5Cohttp:/www.oursite.com/demo/glossary.php
现在,我在.htaccess文件中添加了以下重写规则来处理此类链接。
RewriteRule article-179\.html(.*)$ "http\:\/\/www\.oursite\.com\/demo\/article-179\.html [301,L]
但这导致了重定向循环消息。我们如何通过htaccess重写规则解决这个问题。基本上,我们需要在重写规则中使用某些内容,只有在 .html 之后有一个或多个字符时才有效。如果没有,则不应重定向。
任何帮助都将受到高度赞赏!
最诚挚的问候!
答案 0 :(得分:0)
使用+
代替*
。 *
匹配零或更多,这会导致模式与重定向路径匹配,而+
则匹配一个或多个。
此外,您应该使模式尽可能精确,即不要只检查它是否以article-179.html
结束,更好地检查完整路径。如果这一切都发生在同一个域上,那么就不需要使用绝对URL进行重定向。
也没有必要像你那样转义替换参数,它被视为一个简单的字符串,除了:
- 反向引用($ N)到RewriteRule模式
- 反向引用(%N)到最后匹配的RewriteCond模式
- 服务器变量,如规则条件测试字符串(%{VARNAME})
- 映射函数调用($ {mapname:key | default})
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule
长话短说,理论上应该这样做:
RewriteRule ^demo/article-179\.html(.+)$ /demo/article-179.html [R=301,L]
或者如果您确实需要绝对URL:
RewriteRule ^demo/article-179\.html(.+)$ http://www.oursite.com/demo/article-179.html [R=301,L]