基本上,我想拥有这些
我目前的htaccess就是这个。
Options -Indexes
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?url=$1 [QSA,NC,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1
这样工作正常,但是当您手动转到http://domain.com
并将其更改为https://domain.com
时,它会添加两组index.php。
有什么想法吗?
答案 0 :(得分:0)
我认为您的代码存在的问题是您在$1
和WWW
重定向上有HTTPS
,这会在末尾添加请求URI路径两次,因为你已经有%{REQUEST_URI}
:
Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}:443%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?url=$1 [QSA,NC,L]
如果您首先将HTTP
重定向到HTTPS
(如果需要),然后检查WWWW
是否缺少重定向(如果需要,再次),那么会更容易。< / p>
可能会将HTTPS
规则保留为[R=301,L]
,但如果网址已经正确,我们希望避免处理更多规则。
请注意,规则的顺序非常重要。