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

为何我的RewriteEngine规则不生效?.htaccess URL重写问题求助

搞定你的.htaccess URL重写问题

嘿,我懂你想把生硬的动态URL转成更友好的形式的需求,之前的尝试没成功大概率是规则细节没处理到位,我来给你调整出能用的方案:

首先把这份代码放到网站根目录的.htaccess文件里:

Options +FollowSymLinks -MultiViews
RewriteEngine On

# 将友好URL内部重写为真实PHP文件(用户看不到地址变化)
RewriteRule ^contenido/([0-9]+)/?$ contenido.php?id=$1 [L,QSA]

# 可选:把旧的动态URL永久重定向到新URL,对SEO更友好
RewriteCond %{THE_REQUEST} ^GET\ /contenido\.php\?id=([0-9]+)
RewriteRule ^contenido\.php$ /contenido/%1? [R=301,L]

给你拆解下关键部分的作用:

  • Options +FollowSymLinks -MultiViews:开启符号链接跟随,同时关闭MultiViews功能,避免Apache自动匹配文件干扰重写规则
  • RewriteEngine On:必须先开启重写引擎,所有规则才能生效
  • 第一条RewriteRule:
    • ^contenido/([0-9]+)/?$:匹配contenido/开头、后跟一串数字的地址,末尾的/?让带不带斜杠的地址都能被匹配到
    • contenido.php?id=$1:把匹配到的数字($1对应括号里捕获的内容)作为id参数传给真实的PHP文件
    • [L,QSA]:L表示匹配到这条规则就停止后续处理;QSA用来保留原URL的额外查询参数(比如contenido/19?foo=bar会被转成contenido.php?id=19&foo=bar)
  • 第二条规则是可选的,用来把旧的contenido.php?id=19永久重定向到新的友好URL,R=301告诉搜索引擎更新索引,末尾的?会去掉原URL的查询参数

另外要注意几个容易踩的坑:

  • 确认你的Apache服务器开启了mod_rewrite模块
  • 网站根目录的Apache配置里,AllowOverride要设为All,否则.htaccess的规则不会生效
  • 测试前记得清一下浏览器缓存,避免旧的重定向缓存影响结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:25:14