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 的调试信息
我的问题:
- 如何确保 index.php 没有根据 ' 的输出进行错误路由?.htaccess 的调试信息'?
在“.htaccess 的调试信息”的输出中,index.php 被附加到 autodiscover.xml 中——这不是我想要发生的。 - 我的配置有什么问题,导致自动发现部分失败?'.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
如果存在这样的服务器功能,就会出现语法错误。