http://www.sub1.domain.co.uk到https://sub1.domain.co.uk

时间:2017-05-30 21:01:45

标签: .htaccess

我有以下内容将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.ukhttps://www.sub1.domain.co.uk,并且重定向到https://sub1.domain.co.uk,我需要添加什么才能做到这一点?

1 个答案:

答案 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重定向上的QSANC标记是多余的。

您只需要包含RewriteEngine指令一次,最好包含在文件的顶部。