MENU

Apache 强制 HTTP 全部跳转到 HTTPS

August 13, 2020 • 已被 365 位童鞋围观过 • 代码分享

HTTP 80 强制转 HTTPS

全站采用https协议访问,所以需要http重定向到https,只需要在.htaccess加入下面规则

在相应的网站根目录新建 .htaccess

例如,在博客的网站根目录下,新建 .htaccess

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

或者

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]

规则说明:

RewriteCond 表示符合条件(Condition),RewriteRule 表示重写规则
1)RewriteCond %{SERVER_PORT} 80  表示符合条件 SERVER_PORT 请求端口号是 80,则重写
2)RewriteCond %{HTTPS} !=on 表示符合条件 HTTPS 请求协议不是 https(没有开启),则重写

强制301重定向 HTTPS

一般位于 .htaccess 文件内,例如:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^yooer.me$ [NC]
    RewriteRule ^(.*)$ https://yooer.me$1 [L,R=301]
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</IfModule>

高级用法 (可选)

RewriteEngine on
# 强制HTTPS
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} 80
# 某些页面强制
RewriteCond %{REQUEST_URI} ^something_secure [OR]
RewriteCond %{REQUEST_URI} ^something_else_secure
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# 强制HTTP
RewriteCond %{HTTPS} =on [OR]
RewriteCond %{SERVER_PORT} 443
# 某些页面强制
RewriteCond %{REQUEST_URI} ^something_public [OR]
RewriteCond %{REQUEST_URI} ^something_else_public
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Last Modified: September 28, 2023