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

如何用.htaccess将posts.php带参URL转为SEO友好格式?

解决posts.php/xxx 替代 posts.php?name=xxx的URL重写问题

问题根源

你之前写的RewriteRule规则匹配和替换目标都不对,原规则针对的是postxxx这类路径,而你需要处理的是posts.php/xxx格式的URL,所以规则完全不匹配,自然不会生效。

正确配置步骤

  1. 确保Apache的mod_rewrite模块已启用

    • 打开Apache主配置文件(比如httpd.conf),确认LoadModule rewrite_module modules/mod_rewrite.so这一行没有被注释
    • 找到website目录对应的<Directory>配置块,将AllowOverride None改成AllowOverride All,否则.htaccess规则无法被Apache识别
  2. 替换为正确的.htaccess规则
    在website目录下的.htaccess文件中写入以下规则:

    RewriteEngine On
    # 匹配posts.php/xxx格式的URL,重写为带name参数的原地址
    RewriteRule ^posts\.php/([A-Za-z0-9-]+)/?$ posts.php?name=$1 [L,NC,QSA]
    

    规则说明:

    • ^posts\.php/:精准匹配以posts.php/开头的URL,注意.需要用\转义,否则会匹配任意字符
    • ([A-Za-z0-9-]+):捕获posts.php/后面的字符串(比如what-is-btc),允许字母、数字和连字符
    • /?$:允许URL末尾带或不带斜杠
    • [L,NC,QSA]:L表示这是最后一条匹配规则;NC表示不区分大小写;QSA表示如果URL里还有其他参数(比如posts.php/what-is-btc?foo=bar),会保留这些参数
  3. PHP代码无需修改
    重写后,PHP依然可以通过$_GET['name']获取参数,和你之前的逻辑完全一致:

    if (isset($_GET['name'])) {
        $postSlug = $_GET['name'];
        // 这里写根据$postSlug从数据库查询数据的代码
    }
    

排查小技巧

  • 确认.htaccess文件放在localhost/website/目录下(和posts.php同目录)
  • 修改配置后重启Apache服务
  • 清除浏览器缓存,避免旧URL缓存导致规则不生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:15:46