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

.htaccess中RewriteRule不生效,URL伪静态改写失败求助

.htaccess URL重写规则失效排查与修复

我的.htaccess文件完整代码如下:

# BEGIN 

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^/show_article/([0-9]+)\.php /show_article.php?article_id=$1


# END 

期望将链接 mysite.com/show_article?article_id=17 转换为 mysite.com/show_article/17 格式的URL,但当前RewriteRule规则不生效,URL仍保持原格式,请求排查问题。

问题排查与修复要点

  • 匹配路径格式错误
    在.htaccess中,RewriteRule的匹配路径不需要开头的/(因为.htaccess基于当前目录做相对路径匹配),且你目标是匹配/show_article/17而非带.php的路径,原规则的匹配模式不符合需求。

  • 缺少动态URL到友好URL的重定向逻辑
    原规则仅实现了友好URL反向映射到真实动态文件(让服务器识别/show_article/17对应show_article.php),但没有处理访问旧动态URL时自动跳转至友好URL的场景,所以原URL不会自动转换。

  • 冗余的RewriteCond规则
    RewriteCond %{QUERY_STRING} ^(.*)$ 匹配所有查询字符串,对当前需求无实际作用,可直接删除。

修正后的完整.htaccess代码

# BEGIN 
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

# 301重定向动态URL到友好URL
RewriteCond %{THE_REQUEST} ^GET\ /show_article\.php\?article_id=([0-9]+)\sHTTP/
RewriteRule ^show_article\.php$ /show_article/%1? [R=301,L]

# 将友好URL内部映射到真实动态文件
RewriteRule ^show_article/([0-9]+)$ /show_article.php?article_id=$1 [L]
# END 

规则说明

  • 第一部分规则:通过%{THE_REQUEST}捕获原始请求行,匹配访问show_article.php?article_id=xxx的请求,执行301永久重定向到/show_article/xxx,末尾的?用于清除原查询字符串。
  • 第二部分规则:匹配/show_article/数字格式的友好路径,内部映射到真实的show_article.php?article_id=数字,[L]标记表示执行完该规则后停止后续匹配。

内容的提问来源于stack exchange,提问作者EighTainment

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:42:22