如何使用mod_rewrite配置实现博客友好URL改写
前置环境校验
- 确认Apache的mod_rewrite模块已启用:打开Apache主配置文件,找到
LoadModule rewrite_module modules/mod_rewrite.so配置行,确保行首没有#注释符,修改后重启Apache生效。 - 确认站点目录权限配置:找到博客根目录对应的
<Directory>配置段,将AllowOverride None修改为AllowOverride All,修改后重启Apache生效。
.htaccess配置
将以下内容写入/blog目录下的.htaccess文件中:
RewriteEngine On # 跳过真实存在的文件、目录,避免静态资源被重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 测试用规则:用文章ID作为路径,验证重写是否生效,测试通过可删除 RewriteRule ^([0-9]+)$ ?action=viewArticle&articleId=$1 [L] # 正式规则:匹配字母、数字、横杠、下划线组成的文章别名,传入参数到后端 RewriteRule ^([a-zA-Z0-9_-]+)$ ?action=viewArticle&articleSlug=$1 [L]
测试阶段可将规则末尾的
[L]改为[R=302,L],访问时浏览器地址栏会显示跳转后的完整参数地址,方便排查问题,确认规则生效后改回[L]即可。
后端程序适配
- 若仅测试功能,使用测试规则即可,访问
/blog/2可直接打开对应文章。 - 若要使用
/blog/name-of-article格式的别名URL,需要给文章表新增slug字段存储每个文章的唯一别名,修改viewArticle的查询逻辑:优先判断如果传入articleSlug参数,就通过别名查询对应文章内容。 - 旧链接兼容:在
viewArticle逻辑中新增判断,如果当前请求是旧格式的带参数URL,拿到对应文章的别名后返回301状态码跳转到新的友好URL,避免搜索引擎重复收录。
内容的提问来源于stack exchange,提问作者user2097644
相关产品推荐
相关产品推荐

