为何我的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
相关产品推荐
相关产品推荐

