如何通过htaccess实现多查询参数的URL Rewrite路径重写
Apache mod_rewrite 双参数路径重写调整方案
你只要在原有规则基础上,新增双参数对应的优先级更高的重定向和内部重写规则即可,完整的.htaccess配置如下:
RewriteEngine On # 双参数旧路径外部重定向到新路径格式 RewriteCond %{THE_REQUEST} /site/(?:index\.php)?\?page=([^&]+)&\1=([^&\s]+)\sHTTP [NC] RewriteRule ^ /site/%1/%2? [L,R=301] # 原单参数旧路径外部重定向到新路径格式(保留原有逻辑) RewriteCond %{THE_REQUEST} /site/(?:index\.php)?\?page=(.+)\sHTTP [NC] RewriteRule ^ /site/%1? [L,R=301] # 双参数新路径内部重写为原始查询参数格式 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(?:site/)?([^/]+)/([^/]+)/?$ /site/?page=$1&$1=$2 [L,QSA] # 原单参数新路径内部重写(保留原有逻辑) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(?:site/)?(.+)/?$ /site/?page=$1 [L,QSA]
规则说明
- 双参数重定向规则通过反向匹配
\1对齐参数名,刚好适配你page=xxx&xxx=yyy的参数结构,不会误匹配其他格式的参数,末尾的?用于清除原始URL的查询参数,避免跳转后参数残留。 - 双参数内部重写规则优先匹配两级路径的请求,比如
/site/location/city会被内部转为/site/?page=location&location=city,和你的需求完全对应。 - 原有单参数的所有逻辑完全保留,
/site/about、/site/contact这类单路径的访问不受任何影响。
注意事项
测试前先清空浏览器缓存,避免之前的301永久重定向缓存干扰测试效果;调试阶段可以把R=301临时改为R=302,确认规则生效无误后再改回301。
内容的提问来源于stack exchange,提问作者OneNation
相关产品推荐
相关产品推荐

