完成HTTPS/URL优化后,www页面重定向丢失路径问题求助
问题排查与修复
问题根源
你的public/.htaccess文件中重定向规则顺序错误,导致/api这类虚拟路径在触发域名/协议重定向前,就已经被内部转发到index.php,最终重定向时丢失了原请求路径。
具体逻辑:原配置里,前端控制器规则(将非文件/目录请求转发到index.php)放在了HTTP转HTTPS、www转非www规则的前面。当访问https://www.disposable.network/api时,请求先被内部转为index.php,后续的www重定向规则捕获的路径是index.php而非/api,最终就出现了路径丢失的错误跳转。
修复方案
调整/public_html/disposable.network/public/.htaccess中的规则顺序,将协议/域名重定向规则放在最前面,确保在处理内部转发前完成外部重定向。修改后的完整配置如下:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 1. HTTP协议重定向至HTTPS RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA] # 2. www子域名重定向至非www域名 RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule (.*) https://disposable.network/$1 [R=301,L,QSA] # 处理Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除结尾斜杠(非目录请求) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 3. 移除URL中的index.php RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] # 前端控制器:将非文件/目录请求转发到index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
关键调整说明
- 规则优先级:外部重定向(协议/域名转换)必须先于内部转发(前端控制器)执行,确保重定向时能捕获原始请求路径
- 简化www转非www规则,去掉多余的匹配条件,直接通过
$1捕获完整原始路径 - 移除
index.php的规则放在前端控制器之前,避免请求已转发到index.php后再触发重定向
验证场景
修改配置后,需验证以下场景是否正常:
- 访问
https://www.disposable.network/api,正确跳转至https://disposable.network/api - 访问
http://disposable.network/api,自动转HTTPS并保留路径 - 访问
https://www.disposable.network/index.php/api,自动移除index.php并跳转至https://disposable.network/api - 静态资源(如
/css/style.css)可正常访问
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

