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

如何通过mod_rewrite重命名HTTP GET参数以兼容旧链接?

解决NextCloud旧链接兼容的mod_rewrite二次转义问题

核心解决方案:添加NE(NoEscape)标志

修改原规则,加入NE标志即可阻止已转义字符被二次转义:

RewriteCond %{QUERY_STRING} (^|&)path=([^&]+)(&|$)
RewriteRule ^/index\.php/s/public$ /index.php/s/public?dir=%2 [L,R=301,NE]

为什么这个方案有效?

Apache mod_rewrite默认会对重写目标中的特殊字符(比如%)自动转义,导致原链接里的%2F被再次转义为%252F。NE(NoEscape)标志的作用就是禁用这种自动转义,让原始的URL编码字符保持原样。

进阶:保留其他查询参数

如果旧链接可能包含path以外的其他查询参数(比如?path=/Path/To/Folder&foo=bar),可以使用更通用的规则,替换path为dir的同时保留其他参数:

RewriteCond %{QUERY_STRING} ^(.*&)?path=([^&]+)(&.*)?$
RewriteRule ^/index\.php/s/public$ /index.php/s/public?%1dir=%2%3 [L,R=301,NE]

这个规则会匹配path参数在任意位置的情况,替换后保留所有其他参数,同时避免二次转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:27:23