如果只有在.html之后有什么东西时重定向?

时间:2013-08-14 10:56:06

标签: .htaccess redirect rewrite

我发现有些人的语法链接错误。

例如,我们有一篇带有网址

的文章

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 之后有一个或多个字符时才有效。如果没有,则不应重定向。

任何帮助都将受到高度赞赏!

最诚挚的问候!

1 个答案:

答案 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]