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

htaccess添加www重写失效及内部重写问题的修复方案咨询

问题修复方案

问题根源

你的.htaccess里,内部路由转发规则(article/info/admin/index的RewriteRule)放在了HTTPS和WWW重定向规则之前,而且这些路由规则都带了[L]标记(表示匹配后停止执行后续规则)。当访问带多级路径的URL时,请求先被匹配到路由转发规则,直接跳转到对应的PHP文件,后面的HTTPS/WWW重定向规则根本没机会触发。而首页请求没触发前面的路由规则,所以能正常走到后面的重定向逻辑。

修复后的完整.htaccess配置

RewriteEngine On

# 先执行HTTPS与WWW强制重定向(移至最前面)
# 强制跳转至HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 强制添加WWW前缀
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 内部路由转发规则(放在重定向之后)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^article/?(.*)$ article.php?$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^info/?(.*)$ info.php?$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^admin/?(.*)$ admin.php?$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

关键修改说明

  1. 调整规则顺序:把HTTPS和WWW的重定向规则移到所有内部路由规则前面,确保所有请求先完成域名和协议的标准化,再处理内部转发逻辑。
  2. 优化重定向写法:用%{REQUEST_URI}代替$1,避免正则匹配时的路径截断问题;HTTPS判断改用!=on,兼容更多服务器环境。
  3. 移除冗余条件:删除了原路由规则中多余的RewriteCond %{REQUEST_FILENAME} !^(article/?).*$类条件,因为RewriteRule已经匹配了对应路径,只要!-f(不是文件)和!-d(不是目录)的条件满足,就会执行转发,无需额外排除自身路径。

测试注意事项

修改完成后,务必清除浏览器缓存或使用隐私模式测试,避免旧的301重定向缓存干扰结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:45:25