如何通过.htaccess根据请求路径重写为不同URL?
解决.htaccess URL重写失效问题
你的重写规则失效核心是匹配模式开头的斜杠错误,加上多余的条件判断拖了后腿,下面是修正后的规则和关键说明:
修正后的规则
# 匹配 /rh/xxxxx/yyyyy/ 格式的请求,转发到 record.php RewriteRule ^rh/([^/]+)/([^/]+)/?$ record.php?a=$1&b=$2 [L,NC] # 匹配 /rh/xxxxx/ 格式的请求,转发到 user.php RewriteRule ^rh/([^/]+)/?$ user.php?a=$1 [L,NC]
关键修正点
- 去掉了开头的斜杠
/:.htaccess里的RewriteRule是基于当前目录的相对路径匹配,请求URI的开头斜杠会被自动忽略,原规则里的^/rh/根本匹配不到任何请求。 - 删除多余的RewriteCond:RewriteRule自身的匹配模式已经能精准对应URL结构,不需要额外的条件判断,简化逻辑。
- 替换
[^/]*为[^/]+:确保匹配至少一个有效字符,避免匹配/rh//这类无效路径。 - 保留
[L,NC]标记:L表示匹配后终止后续规则执行,NC表示不区分URL大小写,符合你的需求。
额外注意事项
- 确认服务器已开启
mod_rewrite模块。 - .htaccess文件要放在网站根目录(对应example.com的目录)。
- 服务器配置中
AllowOverride需设置为All或FileInfo,确保.htaccess规则生效。
内容的提问来源于stack exchange,提问作者musicarr
相关产品推荐
相关产品推荐

