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

使用.htaccess重写URL并追加可选参数为查询字符串(转小写)

.htaccess URL重写解决方案:带可选参数的小写化URL转换

需求回顾

需要实现双向URL重写:

  • 旧URL转新URL(外部跳转):https://www.example.org/services/state.php?state=TX&city=Austin&{0-3个可选参数} → https://www.example.org/services/tx/austin/?{所有可选参数}
  • 新URL转旧脚本(内部重写):新格式URL无缝映射到原state.php脚本,保留所有参数
  • 强制要求:新URL全小写,城市名称末尾必须保留/?

完整.htaccess配置代码

# 开启URL重写引擎
RewriteEngine On

# 定义小写转换映射(绝大多数Apache服务器支持此内置映射)
RewriteMap lc int:tolower

# ---------------------------
# 外部跳转:旧URL → 标准化新URL(301永久跳转)
# ---------------------------
# 匹配包含state、city及可选参数的查询字符串
RewriteCond %{QUERY_STRING} ^state=([A-Za-z]{2})&city=([A-Za-z]+)(?:&(.*))?$
# 跳转至小写化的新URL,自动保留可选参数
RewriteRule ^services/state\.php$ /services/${lc:%1}/${lc:%2}/?%3 [R=301,QSD,L]

# ---------------------------
# 内部重写:新URL → 原脚本(无对外跳转)
# ---------------------------
# 排除真实存在的文件,避免误重写静态资源
RewriteCond %{REQUEST_FILENAME} !-f
# 匹配新URL格式,自动追加所有可选查询参数
RewriteRule ^services/([a-z]{2})/([a-z]+)/?$ /services/state.php?state=$1&city=$2 [QSA,L]

关键规则解释

  1. 小写转换映射:
    RewriteMap lc int:tolower 是Apache内置的字符串转小写工具,能快速将提取的state和city参数转为小写,保证URL标准化。

  2. 外部跳转规则:

    • RewriteCond 精准匹配查询字符串格式:捕获2位大小写的state、任意大小写的city,以及可选的后续参数(正则自动兼容0个参数的情况)。
    • RewriteRule 中将捕获的state和city通过${lc:%1}、${lc:%2}转小写,拼接成新URL路径,可选参数%3直接追加到查询字符串;QSD标志确保丢弃原查询字符串,避免重复参数;R=301是永久跳转,利于SEO。
  3. 内部重写规则:

    • RewriteCond %{REQUEST_FILENAME} !-f 确保只重写非真实文件的请求,防止样式、图片等静态资源被误处理。
    • RewriteRule 匹配新URL的两种合法格式(services/xx/yy/ 或 services/xx/yy/?xxx),提取小写的state和city传递给原脚本;QSA标志自动将URL中的可选查询参数追加到原脚本的查询字符串中,无需手动处理。

测试注意事项

  • 调试阶段建议将R=301改为R=302(临时跳转),避免浏览器缓存错误的跳转规则,确认功能正常后再改回301。
  • 确保你的Apache服务器已启用mod_rewrite模块。

内容的提问来源于stack exchange,提问作者Sarah B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:41