.htaccess规则对PDF文件重定向失效的问题排查求助
问题分析
你的规则逻辑存在匹配优先级问题,同时WordPress默认规则会干扰不存在的PDF请求处理:
- 原规则的
OR条件虽逻辑上应匹配/wp下的PDF,但实际因Apache规则执行顺序或缓存问题未生效; - 对于不存在的PDF请求,WordPress规则会优先将其转发到
index.php返回404,重定向规则未提前拦截。
解决方案
修改.htaccess规则,调整逻辑顺序,确保重定向规则优先于WordPress规则执行:
- 替换原重定向规则,先排除不需要重定向的请求(/wp开头且非PDF),再统一重定向其他请求;
- 临时用302重定向测试,避免浏览器301缓存干扰,确认生效后再改回301。
修改后的完整.htaccess如下:
<IfModule mod_rewrite.c> RewriteEngine on # 排除/wp开头且非PDF的请求,不执行重定向 RewriteCond %{REQUEST_URI} ^/wp.*$ RewriteCond %{REQUEST_URI} !\.pdf$ [NC] RewriteRule ^ - [L] # 重定向所有其他请求到新站点 RewriteRule ^(.*)$ https://www.example.com/products?utm_medium=$1 [L,R=302] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress # 保留原特定页面重定向(建议后续改用mod_rewrite规则避免冲突) Redirect 301 /wp/example-product-1/ https://www.example.com/products/example-product-1/ Redirect 301 /wp/example-product-2/ https://www.example.com/products/example-product-2/ Redirect 301 /wp/example-product-3/ https://www.example.com/products/example-product-3/ # php -- BEGIN cPanel-generated handler, do not edit # Set the “ea-php70” package as the default “PHP” programming language. <IfModule mime_module> AddHandler application/x-httpd-ea-php70 .php .php7 .phtml </IfModule> # php -- END cPanel-generated handler, do not edit
额外注意事项
- 清除浏览器缓存:因之前使用301永久重定向,浏览器可能缓存旧响应,建议用无痕模式测试新规则;
- 统一规则类型:后续建议将所有重定向规则改用mod_rewrite实现,避免mod_alias的
Redirect与mod_rewrite规则冲突; - 测试不存在的PDF:修改规则后,访问不存在的/wp下PDF路径,应直接重定向到新站点,而非旧站404页面。
内容的提问来源于stack exchange,提问作者Scerno
相关产品推荐
相关产品推荐

