.htaccess重定向问题:未知URL参数无法保留如何修复?
修复Apache重定向规则以保留URL参数
问题分析
你的现有规则存在两处核心问题,导致URL参数无法正常保留:
- 处理
www域名的重定向规则未添加QSA参数保留标志,且规则顺序错误; - 路径重写规则为内部重写(无
R标记),无法触发浏览器地址栏跳转,且未适配外部跳转场景的参数传递逻辑。
修改后的完整规则
RewriteEngine On # 1. 强制跳转至HTTPS并保留URL参数 RewriteCond %{HTTPS} !=on RewriteRule ^ https://domain.com.ar%{REQUEST_URI} [R=301,L,QSA] # 2. 移除www前缀并保留URL参数 RewriteCond %{HTTP_HOST} ^www\.domain\.com\.ar$ RewriteRule ^ https://domain.com.ar%{REQUEST_URI} [R=301,L,QSA] # 3. 路径跳转:将非/users/开头的路径重定向至/users/路径下并保留参数 RewriteCond %{REQUEST_URI} !^/users/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /users/$1/ [R=301,L,QSA]
关键修改说明
- 调整规则顺序:先处理HTTPS和www的全局重定向,再处理路径跳转,避免规则冲突导致参数丢失;
- 统一添加
QSA标志:所有重定向规则都加上QSA(Query String Append),确保原始URL的查询参数被自动附加到目标URL后; - 明确
R=301标记:将路径内部重写改为外部重定向,让浏览器地址栏更新为目标路径,完全匹配你给出的示例需求; - 修正
HTTP_HOST匹配规则:添加转义符\.,避免正则表达式中.匹配任意字符的语法问题。
按需调整说明
如果你的实际业务需要为目标路径添加.php后缀(如映射到users/username.php文件),只需将最后一条规则修改为:
RewriteRule ^(.*)$ /users/$1.php [R=301,L,QSA]
内容的提问来源于stack exchange,提问作者lbdv
相关产品推荐
相关产品推荐

