我有以下.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 tester上运行测试时它成功运行。但是,当我在自己的服务器上运行时,它仍允许我访问domain.com/pages/page/a.php
。
我怎样才能找出原因,或者我做错了什么?
答案 0 :(得分:0)
尝试下面的php部分,
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^ /index.php [NC,L,QSA]
答案 1 :(得分:0)
您可以将第二条和第三条规则合并为一条规则:
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
已涵盖此案例。