Linux服务器.htaccess旧URL重定向至新HTML结构失败求助
旧PHP Wiki URL到新HTML站点的重定向解决方案
问题根源
你之前用的RedirectPermanent指令无法匹配URL中的查询参数(即?id=xxx部分),同时还存在语法错误(比如标签闭合格式不对、参数书写不符合规则),这才导致了404错误。要处理带查询参数的重定向,必须使用mod_rewrite规则。
正确的.htaccess配置示例
基础启用配置(必须先写)
先确保正确启用mod_rewrite模块,格式如下:
<IfModule mod_rewrite.c> RewriteEngine On # 后续重定向规则写在这里 </IfModule>
单个URL定向规则
针对你提到的doku.php?id=3dproject2,添加这条规则:
RewriteCond %{QUERY_STRING} ^id=3dproject2$ RewriteRule ^doku\.php$ /3dproject2.html? [R=301,L]
RewriteCond用于精准匹配查询字符串必须是id=3dproject2RewriteRule匹配根目录下的doku.php文件- 末尾的
?是为了清除原URL的查询参数,避免新URL附带多余的?id=3dproject2 R=301表示永久重定向,L表示匹配这条规则后停止处理后续规则
多个URL批量处理
如果旧Wiki的id参数值和新HTML文件名一一对应(比如id=abc对应abc.html),可以用通用规则一次性处理所有这类URL:
RewriteCond %{QUERY_STRING} ^id=([a-zA-Z0-9_-]+)$ RewriteRule ^doku\.php$ /%1.html? [R=301,L]
([a-zA-Z0-9_-]+)会匹配id的取值(支持字母、数字、下划线、短横线),并将其捕获为%1- 自动映射到对应的
%1.html文件
如果是无规律的对应关系(比如id=old-project对应new-3d-project.html),就逐个添加规则:
# 第一条规则 RewriteCond %{QUERY_STRING} ^id=old-project$ RewriteRule ^doku\.php$ /new-3d-project.html? [R=301,L] # 第二条规则 RewriteCond %{QUERY_STRING} ^id=wiki-guide$ RewriteRule ^doku\.php$ /3d-print-guide.html? [R=301,L] # 更多规则依此类推
注意事项
- 确保服务器已启用
mod_rewrite模块(多数主机默认开启) .htaccess文件必须放在网站根目录,注意文件名前的点不能省略(属于隐藏文件)- 测试前建议清除浏览器缓存,因为301重定向会被浏览器缓存
- 若还有其他旧URL格式,可补充对应的Rewrite规则
内容的提问来源于stack exchange,提问作者Einar Petersen
相关产品推荐
相关产品推荐

