如何通过htaccess将带format=pdf参数的URL重写为.pdf后缀格式
问题排查与解决方法
原有规则失效原因
- 所有规则前都加了
#注释符,本身不会被服务器执行 - 匹配逻辑完全不符合需求,没有针对
.pdf后缀做匹配,也没有正确传递路径参数 - 规则顺序错误的话会被WordPress默认的重写规则覆盖,无法生效
正确实现规则
你需要将以下规则放在.htaccess文件中,且必须放在WordPress默认的# BEGIN WordPress代码块之前,否则会被WP默认规则拦截:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 内部重写:用户访问.pdf后缀地址时,静默映射到带format=pdf参数的原动态地址 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)\.pdf$ /$1/?format=pdf [L,QSA] # 可选:旧动态地址301重定向到.pdf后缀,统一URL格式利于SEO RewriteCond %{QUERY_STRING} format=pdf RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1.pdf? [R=301,L] </IfModule>
规则说明与注意事项
[L]参数表示匹配到当前规则后不再向下匹配其他规则[QSA]参数会保留原URL中除了format=pdf之外的其他查询参数,如有额外参数需求不会失效- 301重定向规则末尾的
?作用是清除原URL的查询参数,避免重定向后地址出现?format=pdf后缀 - 修改规则后需要清空浏览器缓存和WordPress站点缓存,301重定向为强缓存,不清空会看到旧的跳转结果
- 确保Apache环境已开启
mod_rewrite模块,绝大多数WordPress运行环境默认已开启
内容的提问来源于stack exchange,提问作者Uklove
相关产品推荐
相关产品推荐

