如何在.htaccess中实现未编码#与编码%20的URL重写
NLM分类系统.htaccess重定向规则修复方案
问题分析
你需要为NLM分类系统配置.htaccess重定向,将形如https://w3id.org/NLM/QV%20268.5的URL重定向到https://classification.nlm.nih.gov/schedules/QV#QV%20268.5,但原有规则存在两处核心问题:
- 正则未匹配路径中的
NLM/前缀,导致匹配逻辑失效 - 目标字符串中的
%20被Apache误解析为RewriteCond反向引用(%2),最终变成0,锚点部分错误显示为QV0268.5 - 无法同时实现
#不编码、空格转为%20的需求
可行配置方案
修正后的.htaccess规则如下:
RewriteEngine On RewriteBase / # 重定向NLM分类URL到官方系统 RewriteRule ^NLM/([A-Z]{1,2})\s+([\d\.A-Z]+)$ https://classification.nlm.nih.gov/schedules/$1#$1\%20$2 [R=301,NE,L]
关键调整说明
- 正则匹配修正:添加
NLM/前缀,确保匹配正确的路径结构;用\s+替代\,支持匹配一个或多个空格(兼容URL解码后的空格字符) - 转义特殊字符:将目标中的
%20改为\%20,避免Apache将%2识别为RewriteCond反向引用,保证最终锚点中的空格以%20形式呈现 - NE参数作用:
NE(NoEscape)参数确保#作为锚点分隔符不被编码,同时保留转义后的\%20为%20,完美满足需求
验证效果
配置后,访问https://w3id.org/NLM/QV%20268.5会正确重定向到:https://classification.nlm.nih.gov/schedules/QV#QV%20268.5
内容的提问来源于stack exchange,提问作者user3684314
相关产品推荐
相关产品推荐

