我们刚刚完成了一个重大的网站重构,我正在尝试编写一组具有不同特异性的重定向规则。重定向是一半工作:
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
换句话说,域之后和条件字符串之前的任何文本似乎都被允许/忽略。任何关于如何限制条件或重写规则以防止这种情况的建议都将非常感激!
谢谢,玛格丽塔
答案 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/
的请求。