Prestashop二店带www访问跳主站 配置htaccess报重定向过多错误
故障根因
重定向次数过多报错是手动添加的htaccess规则和Prestashop多店原生路由逻辑、HTTPS跳转逻辑双向冲突导致的:
- 你写的全局规则会把所有不带www前缀的域名全部强制跳转到带www的版本,但多店架构下本身就有一个门店绑定的是
domain.nl裸域,Prestashop检测到www.domain.nl不属于该裸域门店的绑定范围,会自动把请求跳回domain.nl,两边来回触发跳转就形成了死循环。 - 原有规则写死了跳转到HTTP协议,如果站点开启了强制HTTPS功能,Prestashop会把所有HTTP请求再跳回HTTPS,两层规则互跳也会触发循环。
- 如果前端套了CDN、反向代理但没有正确传递HOST头,规则判断逻辑会持续不满足,反复触发跳转。
分步解决方法
1. 先恢复站点可访问状态
登录服务器找到网站根目录的.htaccess文件,删除你之前手动添加的两行重写规则:
RewriteCond %{HTTP_HOST} !^www. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
注意:不要删除Prestashop自动生成的其他默认重写规则,只删你手动加的这两行即可
2. 在后台完成多店域名原生配置
不要靠htaccess规则做多店域名分配,Prestashop原生已经支持多店域名绑定,按以下步骤配置:
- 进入后台
Advanced Parameters > Multistore页面,依次打开每个门店的配置页 - 给每个门店配置专属的主URL:
- 对应www.domain.nl的门店,主URL填
https://www.domain.nl,不要开启跳转到裸域的选项 - 对应domain.nl的独立门店,主URL填
https://domain.nl,不要开启跳转到www域名的选项 - 第三个门店同理填写对应专属域名的完整URL(带HTTPS)
- 对应www.domain.nl的门店,主URL填
- 每个门店配置时,确认勾选「Is this the main URL for this shop?」选项,不要把不属于当前门店的域名设为主URL
- 进入
Preferences > SEO & URLs页面,确认每个门店对应的「Shop domain」「SSL domain」字段和刚才配置的主URL完全匹配,不要留通用的空配置或错配域名。
3. 添加无冲突的域名规范化规则(可选)
如果确实需要做主站的域名统一跳转,不要写全局匹配的规则,单独针对主站域名写判断,避免影响其他门店,参考规则如下(加在.htaccess的RewriteEngine on之后,Prestashop原生规则之前):
# 仅针对主站做domain.nl跳www.domain.nl的规则,不影响其他门店 RewriteCond %{HTTP_HOST} ^domain\.nl$ [NC] RewriteRule ^(.*)$ https://www.domain.nl/$1 [R=301,L]
注意:其他两个绑定独立域名的门店不要加类似的www跳转规则,保持原生访问即可
4. 清缓存验证
- 删除Prestashop安装目录下
var/cache文件夹内的所有缓存文件 - 清空浏览器缓存、CDN/反向代理缓存(如果有配置)
- 分别访问三个门店的对应域名,确认不会跳错站、不会触发重定向报错。
避坑提示
- 多店架构下禁止使用全局匹配
!^www.强制加www的规则,必然会影响绑定裸域的门店 - 所有跳转规则必须统一使用HTTPS协议,避免和Prestashop强制SSL功能形成跳转冲突
- 不要在CDN、Nginx反向代理层重复写和Prestashop后台配置冲突的跳转规则,多层规则叠加是重定向循环的高发原因
内容的提问来源于stack exchange,提问作者Tim Bronsgeest
相关产品推荐
相关产品推荐

