我有以下内容将http重定向到https,将www重定向到非www。
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
#http to https
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# force non-www domain
RewriteCond %{HTTPS_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]
但它没有抓住http://www.sub1.domain.co.uk或https://www.sub1.domain.co.uk,并且重定向到https://sub1.domain.co.uk,我需要添加什么才能做到这一点?
答案 0 :(得分:0)
我已经更新了htaccess以显示完整的文件
您的规范重定向应该在前控制器之前(内部重写)。作为一般规则,重定向应始终在.htaccess
重写之前进行。
通过在前控制器之后放置这些重定向,它们永远不会执行,因为前面的重写会处理所有请求。
您的重定向也可以进行优化:
RewriteEngine On
# force non-www domain
RewriteCond %{HTTPS_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# http to https
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
通过首先进行规范的www重定向,您可以在访问www
子域时避免使用辅助重定向。如果未使用,则无需在RewriteRule
模式中捕获组。您错过了HTTPS重定向的301
状态。 www重定向上的QSA
和NC
标记是多余的。
您只需要包含RewriteEngine
指令一次,最好包含在文件的顶部。