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

如何用.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:13:56