【问题标题】:Wordpress MU Cloudfront. Trailing slash redirect goes to wrong domainWordPress MU Cloudfront。尾部斜杠重定向到错误的域
【发布时间】:2013-04-16 19:48:04
【问题描述】:

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

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

当我打开不带斜杠的链接时,会出现 301 重定向: 去这里:www.domain.com/page 带你到这里:noncdn.somedomain.com/page/

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

如何强制此 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;
}

非常感谢任何帮助!

谢谢!

【问题讨论】:

    标签: amazon-cloudfront wordpress


    【解决方案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 directive。正如我提到的,这是一个静态站点,所以我的 try_files 变成了:

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

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

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

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。

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

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

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

      【讨论】:

      • 似乎不太适合编辑诸如 load.php 之类的 WordPress 核心文件,这些文件可能会在未来的更新中被覆盖。还有其他方法可以实现这样的功能吗?
      猜你喜欢
      • 2018-07-17
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      相关资源
      最近更新 更多