如何编写.htaccess规则将year查询参数前置到URL路径开头
.htaccess 重写规则实现year参数前置方案
需求匹配
- 原始URL:
webku.com/index.php?src=admin&mod=login&year=2022 - 目标URL:
webku.com/2022/index.php?src=admin&mod=login - 实现逻辑:提取查询参数中
year的值,放到访问路径最前端,同时从查询串中移除year参数
配置代码
把下面的代码放到站点根目录的.htaccess文件中即可,使用前确认服务器已开启mod_rewrite模块(绝大多数商用虚拟主机默认开启):
RewriteEngine On RewriteCond %{QUERY_STRING} ^(.*)&year=(\d{4})$ [NC] RewriteRule ^index\.php$ /%2/index.php?%1 [R=301,L,NE]
规则解释
RewriteEngine On:开启Apache重写功能RewriteCond行做查询串匹配:- 捕获
year参数值(默认匹配4位数字年份,可根据实际需求修改\d{4}为[^&]+支持任意格式的year值) - 捕获
year之前的所有其他查询参数 [NC]标记表示参数名不区分大小写,YEAR/Year写法都能识别
- 捕获
RewriteRule行执行重定向:- 仅匹配根目录下直接访问
index.php的请求 - 把捕获到的年份值放到路径前缀位置,拼接剩余查询参数
[R=301]为301永久重定向,适合做搜索引擎地址适配;如果只需要服务器内部转发、不改变浏览器地址栏显示,删掉R=301,标记即可[L]标记表示匹配到当前规则后停止执行后续重写规则,避免规则冲突[NE]标记禁止特殊字符转义,避免参数内容出现编码异常
- 仅匹配根目录下直接访问
扩展说明:如果你的
year参数可能出现在查询串的任意位置(开头、中间、末尾),可以把RewriteCond的正则替换为^(.*?)&?year=([^&]+)&?(.*)$,同时把重写目标改为/%2/index.php?%1%3,即可全场景兼容。
内容的提问来源于stack exchange,提问作者Nuzul Ramadhan
相关产品推荐
相关产品推荐

