.htaccess 文件中的重写不起作用

.htaccess 文件中的重写不起作用

2018年6月26日更新:我理解这可能是在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切不过,我在原帖中确实提到过,我曾去过那篇帖子,并从那篇帖子中找到了测试站点。我确实读过那篇帖子,虽然我对重写规则还是个新手,但我不认为这是重复的;不过我可能是错的。

我正在尝试在我的文件中设置一个新的重写规则.htaccess(如下)

    SetEnv HTTPS on

<IfModule mod_rewrite.c>
    RewriteEngine On
Options -Indexes
    # Send would-be 404 requests to Craft
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
    RewriteRule (.+) index.php?p=$1 [QSA]
Options - Autodiscover
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} -s [OR]
   RewriteCond %{REQUEST_FILENAME} -l [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^.*$ - [NC,L]
   RewriteRule ^.*$ autodiscover.php [NC,L]
</IfModule>

我在这篇文章中找到了此在线测试器:在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切

测试器链接: .htaccess 测试器

当我运行我的配置时,我得到了以下输出 .htaccess 的调试信息

我的问题:

  1. 如何确保 index.php 没有根据 ' 的输出进行错误路由?.htaccess 的调试信息'?
    在“.htaccess 的调试信息”的输出中,index.php 被附加到 autodiscover.xml 中——这不是我想要发生的。
  2. 我的配置有什么问题,导致自动发现部分失败?'.htaccess 的调试信息' 指出仅因为我的配置中的“OR”,条件才得到满足。

感谢看到此帖并提供任何帮助或解释的人!!:-)

答案1

最后一条规则没有任何条件,因此总是使用它。

RewriteRule ^.*$ autodiscover.php [NC,L]

RewriteCond指令定义规则条件。指令RewriteCond前面可以有一个或多个RewriteRule。只有当 URI 的当前状态与其模式匹配并且满足这些条件时,才会使用以下规则。

因此,您的所有条件都与前一条规则相关,而是:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

还:

  • 您只需要RewriteEngine On一次。

  • Options- Autodiscover如果存在这样的服务器功能,就会出现语法错误。

相关内容