代码之家  ›  专栏  ›  技术社区  ›  cronoklee

.htaccess在rewriterule中抛出带有字母p的404

  •  1
  • cronoklee  · 技术社区  · 6 年前

    这条规则非常有效:

    RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
    RewriteRule ^t/(.*)$ /p.php?p=$1 [L]
    

    这个几乎相同的规则抛出了一个404:

    RewriteCond %{HTTP_HOST} ^(.*)\.[a-z0-9\-]{3,}\..*
    RewriteRule ^p/(.*)$ /p.php?p=$1 [L]
    

    是否有一些Apache或DNS规则破坏了这一点?我在旧服务器上有相同的.htaccess文件,它工作正常。新服务器是Centros7和PHP7。

    1 回复  |  直到 6 年前
        1
  •  0
  •   anubhava    6 年前

    从我的评论中可以明显看出 MultiViews 默认情况下打开选项。

    您可以通过将此行置于.htaccess的顶部来关闭它:

    Options -MultiViews
    

    期权 多视图 (见 http://httpd.apache.org/docs/2.4/content-negotiation.html )用于 Apache's content negotiation module 运行 之前 mod_rewrite 模块并使Apache服务器与文件扩展名匹配。使用时最好关闭它 MODY重写 避免此类意外行为的规则。

    例如 /file 是URI和文件名 file.php 存在于您的文档根目录中,那么Apache可能会找到匹配的文件并为其提供服务,而不是匹配您的规则。