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

使用.htaccess将www重定向至非www域名失败问题求助

问题分析与修复方案

你的问题核心是www重定向规则完全无效,同时规则顺序错误,导致www域名的请求没被转去非www,而CSP里的'self'只匹配example.com,所以静态文件加载触发CSP报错。

原代码的两个致命问题

  • www重定向规则写错了:RewriteRule里用%{HTTP_HOST}还是带www的域名,等于重定向到自己,根本没切换到非www
  • 规则顺序颠倒:先做了public目录的内部重写,再做外部重定向,会导致重定向的目标路径出错

修正后的.htaccess代码

<IfModule mod_rewrite.c>
    RewriteEngine On

    # 1. 优先处理www域名重定向到非www的HTTPS地址
    RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [L,R=301]

    # 2. 处理非www的HTTP请求重定向到HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

    # 3. 最后处理public目录的内部重写
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [L]
</IfModule>

<IfModule mod_headers.c>
    Header set Content-Security-Policy "default-src 'self'; font-src https://fonts.gstatic.com; style-src 'self' https://fonts.googleapis.com; img-src 'self'; child-src 'none';"
    # 其他Header规则...
</IfModule>

关键修改说明

  • 把重定向规则放在内部重写前面:外部跳转(301)要先执行,确保用户最终访问的是统一的非www HTTPS地址,再做内部的目录转发
  • www重定向用%1替代%{HTTP_HOST}:%1对应RewriteCond里捕获的www\.后面的域名部分(也就是example.com),这样就能正确跳转到非www地址
  • 规范CSP规则写法:原代码里Content-Security-Policy:后面的冒号是多余的,去掉后更符合Apache配置规范

这样修改后,所有www的请求都会被301重定向到非www的HTTPS地址,CSP的'self'就能匹配正确的域名,静态文件加载就不会触发规则违反了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:05:11