3

我在 wordpress 重定向中的重定向遇到了一些问题,导致域发生变化。

示例:站点 - noncdn.somedomain.com CDN URL - www.domain.com

当我打开带有 oa 斜杠的链接时,会出现 301 重定向:转到此处:www.domain.com/page 将您带到此处:noncdn.somedomain.com/page/

由于 Cloudfront 使用 Origin Domain 访问服务器,因此服务器甚至不知道请求来自不同的域。

如何强制此 301 使用带有正确 CDN 域的 FQDN 而不是进行相对重定向?

我已经添加了这个,以便站点上的链接和图像都从 Cloudfront 域加载,但它似乎对重定向行为没有影响:

    add_filter('home_url','home_url_cdn',10,2);

function home_url_cdn( $path = '', $scheme = null ) {
    return get_home_url_cdn( null, $path, $scheme );
}

function get_home_url_cdn( $blog_id = null, $path = '', $scheme = null ) {  
    $cdn_url = get_option('home');
    if(get_option('bapi_site_cdn_domain')){
        $cdn_url = get_option('bapi_site_cdn_domain');
    }
    $home_url = str_replace(get_option('home'),$cdn_url,$path);
    //echo $home_url; 

    return $home_url;
}

任何帮助深表感谢!

谢谢!

4

2 回答 2

1

在 Nginx 上运行的标准静态网站的 Cloudfront 分发版中,我一直在追踪一个非常相似的问题。症状是相同的,带有尾部斜杠的链接(例如 www.acme.com/products/)正常工作,但省略尾部斜杠会导致用户被重定向到源。

问题是网络服务器软件本身没有正确地尝试解析 URI,而是通过重定向到它可以服务的 URL 来响应。您可以使用 curl 对您的网站进行测试:

$ curl http://myhost.com/noslashurl
HTTP/1.1 301 Moved Permanently [...]

CloudFront 将准确返回您的服务器返回的内容,在本例中为 301 重定向到您的原始 URL。CloudFront 不遵循重定向并缓存它,而是缓存重定向本身。纠正此问题的唯一方法是确保您的源正确处理请求并且不响应 301。

在我的特殊情况下,这意味着在 nginx 配置中更新我所在位置的try_files 指令。正如我提到的,这是一个静态站点,所以我的 try_files 变成了:

location / {
    [...]
    try_files    $uri $uri/index.shtml /index.shtml =404;
}

您要确保 try_files 有一个残局,以避免重定向循环,这将导致您的服务器在请求不存在的 URL 时返回 500 服务器错误。在这种情况下,/index.shtml 是最后一次尝试,如果失败,它将返回 404。

我知道这并不能准确回答您的问题,但您的问题是我在搜索“没有尾随斜杠重定向到原点的云端”时发现的少数几个问题之一,而您已经一年没有答案了,所以我想通了值得发送回复。

于 2015-03-10T17:34:59.917 回答
0

我有同样的问题。

我修复了更改一些 wordpress 参数的问题。

在 elasticbeanstalk 中,我CUSTOM_URL为我的自定义域设置了参数,在文件中,/var/www/html/wp-includes/load.php 我将参数HTTP_HOST和设置SERVER_NAME为相同的值CUSTOM_URL,它解析了重定向到 elasticbeanstalk url。

$_SERVER['HTTP_HOST'] = $_SERVER['CUSTOM_URL'];
$_SERVER['SERVER_NAME'] = $_SERVER['CUSTOM_URL'];
于 2016-06-09T19:05:52.290 回答