繁体   English   中英

在测试中满足RewriteCond但在实践中未达到

[英]RewriteCond being met in testing but not in practice

我有以下.htaccess

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [C]

RewriteCond %{REQUEST_FILENAME} ^(.*).php$
RewriteRule ^(.*)$ /index.php [NC,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

我希望它首先将所有内容重新路由到HTTPS。

然后,我想检查用户是否正在访问PHP文件,例如domain.com/pages/page/a.php并将其路由到/index.php

最后,我希望所有不是文件或目录的内容都可以路由到index.php例如domain.com/my-fun-page

我认为第一个和最后一个块是正确的,但是由于某种原因,当我在htaccess测试仪上运行测试时,它可以成功运行。 但是,当我在自己的服务器上运行它时,仍然可以访问domain.com/pages/page/a.php

我如何找出原因,或者我做错了什么?

请尝试以下php部分,

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^ /index.php [NC,L,QSA]

您可以将第2条第3条规则合并为一个规则,如下所示:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,LE]

RewriteCond %{REQUEST_FILENAME}\.php -f [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

甚至RewriteCond %{REQUEST_FILENAME}\\.php -f [OR]也可能不是必需的,因为!-f!-d已经涵盖了这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM