Apache .htaccess无301重定向实现HTTPS、WWW及URL后缀改写
Apache .htaccess 无301重定向的URL内部改写方案
以下是满足需求的.htaccess代码,无需指定具体域名,可直接在不同Apache服务器上复用:
# 开启RewriteEngine RewriteEngine On # 规则1:HTTP转HTTPS + 非www域名转www(内部改写,无301跳转) RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,NS] # 规则2:无后缀路径追加.htm(排除真实文件/目录、已有后缀的请求) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !\.[a-zA-Z0-9]{2,4}$ RewriteRule ^(.*)$ $1.htm [L]
规则说明:
- 规则1:
- 匹配非www开头的域名(
NC忽略大小写),同时判断当前协议为HTTP(兼容反向代理场景的X-Forwarded-Proto头) - 将请求内部改写为
https://www.原域名/请求路径,L终止后续规则,NS避免对服务器内部子请求生效
- 匹配非www开头的域名(
- 规则2:
- 先排除真实存在的文件、目录,以及已有后缀的请求(比如
myfile.html、image.png) - 对无后缀的请求路径追加
.htm后缀,完成内部改写
- 先排除真实存在的文件、目录,以及已有后缀的请求(比如
匹配示例:
http://example.com→ 内部改写为https://www.example.comhttps://example.com→ 内部改写为https://www.example.comhttps://www.example.com/myfile→ 内部改写为https://www.example.com/myfile.htm
内容的提问来源于stack exchange,提问作者Cecil Ward
相关产品推荐
相关产品推荐

