我在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;
}
非常感谢任何帮助!
谢谢!
答案 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_HOST
和SERVER_NAME
设置为CUSTOM_URL
的相同值,并解决了重定向到elasticbeanstalk网址的问题。
$_SERVER['HTTP_HOST'] = $_SERVER['CUSTOM_URL'];
$_SERVER['SERVER_NAME'] = $_SERVER['CUSTOM_URL'];