0

我发现有些人的文章的语法链接不好。

例如,我们有一篇带有 URL 的文章

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之后有一个或多个字符时才有效的内容。如果不是,那么它不应该重定向。

任何帮助将不胜感激!

最诚挚的问候!

4

1 回答 1

0

使用+而不是*. *匹配零个或多个,这导致模式也匹配重定向路径,+而是匹配一个或多个。

此外,您应该使模式尽可能精确,即不要只检查它是否以 结尾article-179.html,最好检查完整路径。如果这一切都发生在同一个域上,那么就不需要使用绝对 URL 进行重定向。

也不需要像您那样转义替换参数,它被视为一个简单的字符串,除了:

  • 对 RewriteRule 模式的反向引用 ($N)
  • 对最后匹配的 RewriteCond 模式的反向引用 (%N)
  • 服务器变量,如规则条件测试字符串 (%{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]
于 2013-08-14T13:07:46.240 回答