【问题标题】:htaccess ReWriteCond ReWriteRule - redirect occurs even when URL includes nonsense charactershtaccess ReWriteCond ReWriteRule - 即使 URL 包含无意义字符也会发生重定向
【发布时间】:2011-11-15 19:49:22
【问题描述】:

我们刚刚完成了对我们网站的重大重组,我正在尝试编写一组不同特异性的重定向规则。重定向成功了一半:

  • 他们正确地重新路由旧 URL
  • 他们错误地也允许并重新路由包含在
  • 中指定的文本未的 URL

ReWriteCond 语句(相反,我希望在浏览器中看到“未找到”错误消息。)

.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

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

谢谢,玛格丽塔

【问题讨论】:

    标签: .htaccess url mod-rewrite redirect


    【解决方案1】:

    当您尝试匹配 %{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/。

    【讨论】:

    • 感谢@Jon - 上面的语法目前不起作用,但我知道我并没有完全理解我们的文件夹结构。我们域的顶级内容实际上存储在域的根文件夹下的两个子文件夹中,并且更高目录中的父 .htaccess 文件正在重写“基础” - 所以当它到达我的 .htacess 文件时,我认为它类似于:technofrolics。 com/technofrolics/technofrolics-dot-com。不知道如何重写我的 RewriteBase / 规则来处理这个问题并让你的语法正常工作或以其他方式处理它。
    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 2012-07-21
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多