【问题标题】:mod-rewrite for URLs with extra characters after second slash第二个斜杠后带有额外字符的 URL 的 mod-rewrite
【发布时间】:2016-07-22 14:53:09
【问题描述】:

如何通过 htaccess 在第二个 / 之后为所有带有额外字符的 URL 返回 404 error

例如:

http://www.example.com/blah-blah/ 不重定向(第二个/ 之后没有多余的字符)

例如:

http://www.example.com/blah-blah/blah-blah重定向到404

例如:

http://www.example.com/blah-blah/blah-blah/重定向到404

例如:

http://www.example.com/blah-blah/blah-blah/blah-blah重定向到404

例如:

http://www.example.com/blah-blah/blah-blah/blah-blah/重定向到404

我试过了,但不适用于 e.g3 和 e.g5(以斜杠结尾的 URL):

ErrorDocument 404 /404
RewriteBase /
RewriteRule ^[^/]+/.+ - [R=404,L]

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    为了仅在第二个斜线后有一些字符时重定向请求,您需要此重写规则

    ErrorDocument 404 /404
    RewriteBase /
    RewriteRule .*/.+ - [R=404,L]
    

    PS:当您在正则表达式后使用破折号时,它表示将匹配项传递给文件系统。

    EDIT : 这个模式 /.*/.+ 与下一个例子匹配,但我忘记了 RewriteBase 指令,所以你需要删除模式中的第一个斜杠(我之前编辑过 RewriteRule)

    • /blah-blah/ => 不匹配
    • /blah-blah/blah-blah => 匹配
    • /blah-blah/blah-blah/ => 匹配
    • /blah-blah/blah-blah/blah-blah/ => 匹配

    PS : 你可以使用这个工具来检查你的 Rewrite 是否有效rewrite-rule-tester

    【讨论】:

    • 我修复了模式,现在应该可以工作了,就像我在编辑中所说的那样,我在测试中忘记了 RewriteBase 指令。
    • 很奇怪,你有重写规则测试器的测试吗?你有另一个 RewriteRule 来捕捉 /blah-blah/ 吗?
    • 好的,你能发布你的整个 apache conf 吗?
    • 对不起,我根据我的规则替换了您的代码,现在可以使用了
    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2014-08-19
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多