[英]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.