You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非www前缀域名访问返回404的原因排查及rewrite规则调整咨询

问题原因

  • 核心原因是重写规则顺序错误:你把非www域名跳转的规则放在了前端控制器(index.php路由转发)规则的后面,而前端控制器规则带有[L](Last)标记,只要请求对应的不是真实存在的文件/目录,就会命中该规则直接终止后续规则执行,导致非www跳转逻辑永远不会被触发,请求直接交给index.php处理返回404。
  • 次要问题:
    1. 第一条domain.nl跳转规则跳转到了HTTP版本的www.domain.nl,后续还要再走一次HTTPS跳转,多余的二次跳转还可能引发缓存异常。
    2. 存在重复的非www跳转逻辑,前后两段规则功能重叠冲突。
    3. Safari能正常访问大概率是缓存了旧的正确301跳转记录,或者浏览器默认自动补全了www前缀,不代表规则本身正常。

修复方案

调整规则顺序,把所有域名、协议跳转逻辑放在最前面,再放前端控制器路由规则,合并重复的跳转逻辑,修改后的配置如下:

RewriteEngine On
RewriteBase /

# 统一处理:非www转www + HTTP转HTTPS,一次跳转完成
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,R=301]

# 前端控制器路由规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?_route_=$1 [L,QSA]

验证注意事项

修改后需要清空浏览器缓存(301是永久重定向,会被浏览器长期缓存),再测试非www域名的访问情况即可。

内容的提问来源于stack exchange,提问作者user7862339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:27:02