如何用.htaccess重写URL?动态友好URL规则失效求助
.htaccess URL重写问题解决
问题说明
我开发了一个从数据库取数的网站,想用.htaccess生成用户友好URL:
- 当前URL:
https://example.com/lrc.php?ti=Down+Bad&ar=Taylor+Swift&no=151107
- 期望URL:
https://example.com/down-bad-lyrics-download-taylor-swift-151107
用了以下规则但没效果:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9-]+)-lyrics-download-([a-zA-Z0-9-]+)-([0-9]+)$ lrc.php?ti=$1&ar=$2&no=$3 [L]
失效原因及修正方案
1. 未开启重写引擎
规则缺少开启重写引擎的基础指令,必须添加:
RewriteEngine On
2. 参数格式不匹配
友好URL里的down-bad是原参数Down+Bad的小写连字符版本,但规则直接把down-bad传给ti参数,后端lrc.php需要的是空格分隔的格式,需在PHP里做参数转换:
// 在lrc.php开头添加参数处理代码 $ti = ucwords(str_replace('-', ' ', $_GET['ti'])); $ar = ucwords(str_replace('-', ' ', $_GET['ar'])); $no = $_GET['no']; // 后续用处理后的$ti、$ar查询数据库
3. 正则大小写匹配问题
友好URL为全小写,建议给规则添加NC(忽略大小写)标志,避免因大小写差异导致匹配失败:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-z0-9-]+)-lyrics-download-([a-z0-9-]+)-([0-9]+)$ lrc.php?ti=$1&ar=$2&no=$3 [NC,L]
4. 服务器配置限制
若以上调整后仍无效,检查服务器配置:
- 确认Apache已启用
mod_rewrite模块 - 确认网站根目录的
httpd.conf或虚拟主机配置中设置了AllowOverride All,允许.htaccess生效
可选:旧URL跳转优化(提升SEO)
为让旧的带参数URL自动跳转到友好URL,可在重写规则前添加以下跳转规则:
RewriteCond %{THE_REQUEST} ^GET\ /lrc\.php\?ti=([^&]+)&ar=([^&]+)&no=([0-9]+) RewriteRule ^ /%1-%2-%3-lyrics-download? [R=301,L]
注意:需确保网站内输出的链接均为友好URL格式,避免循环跳转。
内容的提问来源于stack exchange,提问作者iDibya.com
相关产品推荐
相关产品推荐

