You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:03:27