.htaccess中RewriteEngine重复声明及重定向规则放置位置咨询
.htaccess重定向规则配置问题解答
你当前已有的强制HTTPS规则代码如下:
#Forcing HTTPS RewriteEngine On RewriteCond %{HTTP_HOST} example\.com [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L] #End Forcing HTTPS
针对你提出的两个问题,解答如下:
问题1:新增其他重定向规则时,是否需要再次编写RewriteEngine On声明?
不需要。
单个.htaccess文件内只需要在所有重写规则最开头声明一次RewriteEngine On即可,重复编写属于冗余代码,不会带来额外效果,虽然不会直接触发运行错误,但完全没必要重复添加。
问题2:能否将新增的重定向规则直接声明在上述强制HTTPS的代码块中?
不建议直接放在现有HTTPS强制规则的注释块区间内,核心原因如下:
- 现有HTTPS跳转规则末尾携带了
[L]标记,该标记的作用是匹配到当前规则后立即终止后续所有重写规则的匹配流程。如果把其他重定向规则放在这条HTTPS规则之后、夹在#Forcing HTTPS和#End Forcing HTTPS注释区间内,当用户通过HTTP协议访问站点时,匹配到HTTPS跳转规则后就会直接终止执行,后面的新增规则根本不会被触发。 - 从规则维护角度,不同功能的重写规则应该分区放置:强制HTTPS跳转属于最高优先级的基础规则,必须放在所有重写规则的最前面;其他页面跳转、伪静态类规则应该放在HTTPS规则块的闭合注释之后,单独分区编写,既能避免规则优先级冲突、减少多次重定向问题,也方便后续排查调整规则。
正确写法参考
#Forcing HTTPS RewriteEngine On RewriteCond %{HTTP_HOST} example\.com [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] #End Forcing HTTPS # 新增自定义重定向规则(示例:旧页面301跳转) RewriteRule ^old-about.html$ /about-us [R=301,L] # 后续其他重写、伪静态规则按优先级依次往后追加即可
补充提示:HTTPS跳转建议使用
R=301(永久重定向)替代默认的R=302(临时重定向),更利于搜索引擎权重传递。
内容的提问来源于stack exchange,提问作者Carabao Coder
相关产品推荐
相关产品推荐

