AWS CloudFront自定义行为下WordPress单篇文章301重定向问题求助
解决CloudFront+WordPress跨域名301重定向问题
1. 检查CloudFront自定义行为的路径转发配置
- 你的CloudFront
/blogs/*行为必须正确转发路径到blog.example.com的index.php,不能直接传递/blogs/blog-post-slug。进入CloudFront控制台找到该行为:- 将「源路径」设置为
/index.php - 开启「转发所有查询字符串」,WordPress需要依赖查询参数定位文章
- 路径模式保持
/blogs/*不变
- 将「源路径」设置为
2. 修改WordPress的wp-config.php强制使用站点地址生成链接
- 登录blog.example.com的WordPress后台,或直接修改服务器上的
wp-config.php文件,添加以下代码:
define('WP_HOME', 'https://example.com/blogs/'); define('WP_SITEURL', 'https://blog.example.com'); // 禁用WordPress规范重定向,防止跳转到blog.example.com remove_filter('template_redirect', 'redirect_canonical'); add_filter('redirect_canonical', function($redirect_url, $request_url) { if (strpos($request_url, 'https://example.com/blogs/') === 0) { return false; } return $redirect_url; }, 10, 2);
- 这段代码会让WordPress所有输出的链接都以
example.com/blogs/开头,同时阻止它自动将请求重定向到blog.example.com。
3. 修正blog.example.com的.htaccess规则
- 如果你的WordPress使用Apache服务器,将根目录的
.htaccess替换为以下规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 处理来自CloudFront的/blogs/路径请求 RewriteCond %{HTTP_HOST} ^blog\.example\.com$ RewriteCond %{REQUEST_URI} ^/blogs/(.*)$ RewriteRule ^blogs/(.*)$ /index.php/$1 [L,QSA] # 处理直接访问blog.example.com的请求(保留原有功能) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L,QSA] </IfModule>
- 该规则会将
blog.example.com/blogs/blog-post-slug转换为/index.php/blog-post-slug,让WordPress正确识别文章slug,避免触发重定向。
4. 用CloudFront函数调整请求头和路径(兜底方案)
- 如果以上步骤未解决问题,编写一个CloudFront函数修改请求:
function handler(event) { var request = event.request; var uri = request.uri; // 移除路径中的/blogs/前缀,传递给blog.example.com if (uri.startsWith('/blogs/')) { request.uri = uri.replace('/blogs/', '/'); } // 强制设置Host头为blog.example.com,确保WordPress识别正确站点 request.headers['host'] = { value: 'blog.example.com' }; return request; }
- 将这个函数关联到CloudFront
/blogs/*行为的「查看请求」阶段,CloudFront会将请求转换为blog.example.com/blog-post-slug的格式,让WordPress直接处理,不会跳转。
内容的提问来源于stack exchange,提问作者roun512
相关产品推荐
相关产品推荐

