如何使用htaccess重写博客URL?将动态URL转为静态格式
如何用.htaccess将动态博客URL重写为静态URL
没问题,我来一步步教你搞定这个URL重写需求——把http://www.website.co.uk/blog.php?story=85&title=contract-furniture-buying-guide转换成http://www.website.co.uk/blog/contract-furniture-buying-guide,核心是用Apache的mod_rewrite模块,具体步骤如下:
1. 确认mod_rewrite已启用
首先得确保你的Apache服务器开启了mod_rewrite模块:
- 如果是自己管理服务器,检查
httpd.conf(或apache2.conf)里有没有LoadModule rewrite_module modules/mod_rewrite.so这行(没有的话去掉前面的注释符号#),同时把网站目录对应的AllowOverride设置为All(这样.htaccess文件的规则才能生效)。 - 如果是虚拟主机,大部分服务商默认会开启mod_rewrite,不确定的话可以联系主机客服确认。
2. 编写.htaccess规则
在网站根目录下创建(或编辑已有的).htaccess文件,添加以下规则:
# 开启mod_rewrite引擎 RewriteEngine On # 将静态URL重写为动态脚本 RewriteRule ^blog/([a-z0-9-]+)$ blog.php?title=$1 [L,QSA]
规则细节解释
RewriteEngine On:必须放在最前面,用来启用mod_rewrite功能,没有这行所有重写规则都不会生效。^blog/([a-z0-9-]+)$:这是匹配静态URL的模式:^表示URL路径的开头blog/是固定的前缀,对应你目标URL里的/blog/部分([a-z0-9-]+)是一个捕获组,用来匹配标题内容(允许小写字母、数字和连字符,完全符合你示例里的contract-furniture-buying-guide格式)$表示URL路径的结尾
blog.php?title=$1:把匹配到的请求转发到动态脚本,$1会替换成前面捕获组里的标题内容(比如contract-furniture-buying-guide)。[L,QSA]:这是规则的标志:L表示“Last”,匹配到这条规则后就停止处理后续规则,避免冲突QSA表示“Query String Append”,如果用户访问静态URL时带了额外参数(比如/blog/contract-furniture-buying-guide?utm_source=google),会自动把这些参数附加到动态脚本的查询串里,非常实用
3. 注意事项
- 如果你原本的
story=85参数是必须的(比如博客系统需要用它来识别文章),那当前的目标静态URL里没有包含这个参数,你需要调整静态URL结构(比如改成/blog/85/contract-furniture-buying-guide),对应的规则也要修改。但根据你的需求,目标URL里没有story参数,所以默认你的博客系统可以通过title参数唯一识别文章,上面的规则就足够了。 - 测试前记得清除浏览器缓存,避免旧的URL缓存影响测试结果。
- 确保
.htaccess文件的权限正确(一般设置为644),否则服务器可能无法读取它。
内容的提问来源于stack exchange,提问作者Sunny M
相关产品推荐
相关产品推荐

