强制非www和HTTPS不工作


Laravel 5.1 Force non-WWW and HTTPS Not Working

我试图在我的laravel网站上强制https和非www。这是我的。htaccess文件:

RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
#if the request is not secure
RewriteCond %{HTTPS} off
#redirect to the secure version
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
#Redirect to non-WWW
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*) https://example.com/$1  [QSA,L,R=301]

这里是当前重定向

重定向工作的

example.com                  => https://example.com           (GOOD)
www.example.com              => https://example.com           (GOOD)
https://www.example.com      => https://example.com           (GOOD)

直接到正确的URL就可以了

https://example.com          => https://example.com           (GOOD)
https://example.com/asdf     => https://example.com/asdf      (GOOD)

不工作重定向

example.com/asdf             => https://example.com/index.php (BAD)
www.example.com/asdf         => https://example.com/index.php (BAD)
https://www.example.com/asdf => https://example.com/index.php (BAD)

我不明白为什么它重定向到index.php文件,当我不在主页

我花了两个小时寻找解决办法,结果发现非常简单。

我所要做的就是把。htaccess文件的顺序改为
RewriteEngine On
#Redirect to non-WWW
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*) https://example.com/$1  [QSA,L,R=301]
#if the request is not secure
RewriteCond %{HTTPS} off
#redirect to the secure version
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]