如何用.htaccess的mod-rewrite将test.php?url=username重写为test/username/?
解决URL重写问题
首先纠正你现有代码中的几个错误,然后给出完整的实现方案:
错误分析
- 你的
RewriteCond匹配的是name=(.+),但实际参数是url=username,匹配规则不对应。 - 在
.htaccess文件中,RewriteRule的匹配模式不需要开头的/,因为是相对当前目录的路径。 - 缺少必要的规则标志,导致规则执行逻辑不符合预期。
完整的.htaccess代码
# 启用重写引擎 RewriteEngine On # 1. 将旧URL test.php?url=username 重定向到新URL test/username/(地址栏会显示新路径) RewriteCond %{QUERY_STRING} ^url=([^&]+)$ RewriteRule ^test\.php$ /test/%1/ [R=301,L] # 2. 将新URL test/username/ 内部映射到 test.php?url=username(服务器后台处理,地址栏不变) RewriteRule ^test/([^/]+)/$ test.php?url=$1 [L]
代码说明
RewriteEngine On:必须开启重写引擎,否则所有规则无效。- 第一条规则:匹配带
url=username查询参数的test.php请求,通过301永久重定向跳转到友好URL,L标志表示执行完这条规则后停止后续匹配。 - 第二条规则:匹配
test/username/格式的请求,后台将其映射到原脚本test.php?url=username,确保业务逻辑正常执行。
注意事项
- 确认服务器已启用
mod_rewrite模块。 - 如果
.htaccess放在子目录,需添加RewriteBase /子目录路径/指令调整基准路径。 - 测试阶段可将
R=301改为R=302临时重定向,确认无误后再换回永久重定向。
内容的提问来源于stack exchange,提问作者user21538804
相关产品推荐
相关产品推荐

