使用.htaccess重写PDF旧链接:替换斜杠为下划线并跳转至统一目录
解决PDF路径重定向与斜杠替换的.htaccess方案
我明白你现在的需求:把分散在各级目录的PDF统一迁移到/pdf目录,同时把旧路径里的所有斜杠替换成下划线,还要保证旧链接不失效。你当前的规则只能完成目录跳转,但没处理斜杠替换,咱们来修改一下:
最终的.htaccess代码
RewriteEngine On RewriteBase / # 递归替换路径中的所有斜杠为下划线(仅针对非/pdf目录的PDF请求) RewriteCond %{REQUEST_URI} !^/pdf/ RewriteCond %{REQUEST_URI} \.pdf$ [NC] RewriteRule ^(.*)/(.*\.pdf)$ $1_$2 [N,DPI] # 将处理后的PDF请求重定向到/pdf目录 RewriteCond %{REQUEST_URI} !^/pdf/ RewriteCond %{REQUEST_URI} \.pdf$ [NC] RewriteRule ^(.*\.pdf)$ /pdf/$1 [R=301,L]
代码解释
第一组规则:
RewriteCond %{REQUEST_URI} !^/pdf/:排除已经在/pdf目录下的请求,避免循环重定向RewriteCond %{REQUEST_URI} \.pdf$ [NC]:只匹配PDF文件([NC]表示不区分大小写,兼容.PDF后缀的文件)RewriteRule ^(.*)/(.*\.pdf)$ $1_$2 [N,DPI]:把路径中最后一个斜杠替换成下划线,[N]标志会让Apache重新处理修改后的URL,直到路径里没有斜杠为止;[DPI]确保处理过程中不区分大小写
第二组规则:
- 当所有斜杠都被替换成下划线后,这条规则会把处理后的文件名重定向到
/pdf目录下 R=301表示永久重定向,对SEO友好;如果还在测试阶段,可以改成R=302临时重定向,确认没问题再换回301L标志表示这是最后一条规则,处理完就停止后续规则
- 当所有斜杠都被替换成下划线后,这条规则会把处理后的文件名重定向到
示例验证
- 旧链接:
http://www.example.org/agriculture/gaoag/092505.pdf
经过第一组规则递归替换后,路径变成agriculture_gaoag_092505.pdf,然后第二组规则重定向到http://www.example.org/pdf/agriculture_gaoag_092505.pdf - 旧链接:
http://www.example.org/BOR/2011/2011/OPS/PLAN/040611.pdf
最终会重定向到http://www.example.org/pdf/BOR_2011_2011_OPS_PLAN_040611.pdf,完全符合你的需求
注意事项
- 确保你的服务器已经启用了
mod_rewrite模块 - 把这段代码放在
.htaccess文件的最顶部,避免和其他规则冲突 - 测试时可以先使用
R=302临时重定向,确认所有旧链接都能正确跳转后,再改成R=301永久重定向
内容的提问来源于stack exchange,提问作者Brandan
相关产品推荐
相关产品推荐

