Wordpress MU Cloudfront。尾部斜杠重定向转到错误的域

时间:2013-04-23 14:30:05

标签: amazon-cloudfront wordpress

我在wordpress重定向中遇到重定向问题导致域名发生变化。

实施例: 网站 - noncdn.somedomain.com CDN网址 - www.domain.com

当我打开没有尾部斜杠的链接时,会有301重定向: 请访问:www.domain.com/page 带你到这里:noncdn.somedomain.com/page /

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

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

我已添加此内容,以便网站上的链接和图片都从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;
}

非常感谢任何帮助!

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

CloudFront正在返回服务器返回的内容,在这种情况下,301将重定向到您的原始网址。 CloudFront不是遵循重定向和缓存,而是缓存重定向本身。解决此问题的唯一方法是确保您的来源正确处理请求,并且不响应301.

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

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

您希望确保try_files具有结束游戏,以避免重定向循环,这将导致服务器在请求不存在的URL时返回500个服务器错误。在这种情况下,/ index.shtml是最后一次尝试并且失败,它将返回404。

我知道这并没有准确回答你的问题,但是你在搜索“没有尾随斜线重定向到原点的云端”时发现的很少,而你一年没有得到答案,所以我认为值得发送回复。

答案 1 :(得分:0)

我遇到了同样的问题。

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

在elasticbeanstalk中,我为自定义域和文件CUSTOM_URL设置了参数/var/www/html/wp-includes/load.php 我将参数HTTP_HOSTSERVER_NAME设置为CUSTOM_URL的相同值,并解决了重定向到elasticbeanstalk网址的问题。

$_SERVER['HTTP_HOST'] = $_SERVER['CUSTOM_URL'];
$_SERVER['SERVER_NAME'] = $_SERVER['CUSTOM_URL'];