我刚刚为我的网站购买了SSL证书,我正试图强制使用HTTPS。它有点工作但不是真的。我在Apache上使用PHP Slim框架进行自定义路由。
我的文件夹结构
root/
.htaccess (A)
php/
public_html/
.htaccess (B)
.htaccess(A)
我的主要htaccess文件有这些规则
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
当我转到example.com
时,它会进入安全页面。太好了!
.htaccess(B)
我的public_html文件有这些规则
<IfModule mod_rewrite.c>
RewriteEngine on
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [QSA,L]
</IfModule>
# Always use https for secure connections
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
问题:
如果我转到http://www.example.com/login,
而不是重定向到https://www.example.com/login,
答案 0 :(得分:2)
htaccess-files中的规则从上到下进行验证。在您的htaccess中,它首先检查服务器上是否存在所请求的资源(/ login)。如果没有,则将请求重定向到index.php。
如果您只是在其他规则之前移动了https-check / redirect ,它应该可以正常工作。
<IfModule mod_rewrite.c>
RewriteEngine on
#RewriteBase /
# Always use https for secure connections
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# Redirect requests to non existing resources to index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [QSA,L]
</IfModule>
我还删除了第二个RewriteEngine On
。拥有它就足够了。