htaccess ReWriteCond ReWriteRule - 即使URL包含无意义字符,也会发生重定向

时间:2011-11-15 19:49:22

标签: .htaccess url mod-rewrite redirect

我们刚刚完成了一个重大的网站重构,我正在尝试编写一组具有不同特异性的重定向规则。重定向是一半工作:

  • 他们正确地重新路由旧网址
  • 他们错误允许并重新路由包含
  • 中指定的文字而非的网址

ReWriteCond语句(相反,我希望在浏览器中显示“Not Found”错误消息。)

.htaccess文件中的语句(位于网站的根目录中)包括:

RewriteBase /

RewriteCond %{REQUEST_URI} /company/company-history.html
RewriteRule (.*)$ http://www.technofrolics.com/about/index.html

RewriteCond %{REQUEST_URI} /press 
RewriteRule (.*)$ http://www.technofrolics.com/gallery/index.html

以上正确执行了所需的重定向 但在域名后输入以下内容时也可以使用:

/youcanenteranytext/hereatall/anditstillworks/press

换句话说,域之后和条件字符串之前的任何文本似乎都被允许/忽略。任何关于如何限制条件或重写规则以防止这种情况的建议都将非常感激!

谢谢,玛格丽塔

1 个答案:

答案 0 :(得分:0)

当您尝试与%{REQUEST_URI}匹配时,您需要在正则表达式中包含边界,^表示匹配的开始。

RewriteCond %{REQUEST_URI} ^/company/company-history\.html

会使/garbage/stuff/comapny/company-history.html的请求不匹配。同样地:

RewriteCond %{REQUEST_URI} ^/press

会使/youcanenteranytext/hereatall/anditstillworks/press的请求不匹配。您还可以在正则表达式中使用$来表示匹配结束,如下所示:

RewriteCond %{REQUEST_URI} ^/press$

匹配/press而非/something/press/press/somethingelse/press/的请求。