如何编写.htaccess规则实现带参数URL的伪静态路径化
解决.htaccess URL重写为路径形式的方案
要实现将cricf.com/cricket-article?cardid=3730转换为cricf.com/cricket-article/cardid/3730的URL格式,你需要在现有规则基础上添加旧URL重定向和新URL内部转发的规则,调整后的完整.htaccess代码如下:
RewriteEngine on # 1. 将旧的带参数URL重定向到新的路径形式(外部重定向,更新浏览器地址栏) RewriteCond %{THE_REQUEST} /cricket-article\?cardid=(\d+) [NC] RewriteRule ^ /cricket-article/cardid/%1? [L,R=301] # 2. 隐藏.php后缀的规则(保留你原有的功能) RewriteCond %{THE_REQUEST} cricket-article.php RewriteRule (.*).php$ /$1 [L,R=301] # 3. 将新的路径形式URL内部转发到PHP文件处理 RewriteRule ^cricket-article/cardid/(\d+)$ cricket-article.php?cardid=$1 [L] # 4. 处理无参数的cricket-article访问(保留原功能) RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^cricket-article$ cricket-article.php [L]
规则说明:
- 第1条规则:匹配包含
cardid参数的旧请求,提取cardid的数字值,重定向到新路径格式。R=301为永久重定向,利于搜索引擎更新收录;末尾的?用于清除原URL的查询字符串。 - 第2条规则:保留原有隐藏
.php后缀的功能,确保访问cricket-article.php时自动跳转到cricket-article。 - 第3条规则:匹配新的路径形式URL,将路径中的数字作为
cardid参数传递给cricket-article.php处理,属于内部转发,浏览器地址栏不会变化。 - 第4条规则:保留原有的无参数访问
cricket-article时转发到对应PHP文件的功能。
注意事项:
- 确保服务器已启用
mod_rewrite模块。 - 若
cardid值可能包含非数字字符,可将规则中的\d+替换为[^/]+(匹配除斜杠外的任意字符)。 - 测试前建议清除浏览器缓存,避免旧缓存干扰重定向效果。
内容的提问来源于stack exchange,提问作者Wasim Saiyed
相关产品推荐
相关产品推荐

