避免双重redirectNGINX

我正在使用301redirect到Nginx,将我的网站用户redirect到网站的HTTPS版本。
我使用Google的PageSpeedtesting了我的网站,发现我是从主页面redirect的。 这是因为我的CMS。 例:
http:// domain.tld – > NGINX 301 – > https:// domain.tld – > CMSredirect – > https:// domain.tld / homepage

我希望能用NGINXredirect直接根连接

location = / { return 301 https:// domain.tld/homepage; } 

这适用于主页,但是,这将给404任何其他http页面的错误比主页,我试图添加return 301 https://$host$request_uri; 在位置块,但不知何故这覆盖了根域的规则。 (这再次提供了一个双redirect)有没有办法redirect所有链接与他们相应的request_uri,除了根域?

PS我希望没有iffunction做到这一点:请参阅: https : //www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

这里是我的完整configuration文件的示例:

 server { listen 80; server_name domainname.tld; location = / { return 301 https://domainname.tld/homepage; } return 301 https://$host$request_uri; #if i remove this I'll get 404 errors on any other page than the homepage. #but if I add it, the 'location = /' block gets ignored. } server { listen 443 ssl; server_name domainname.tld; root /var/www/domainname.tld; index index.php; ... (stuff like rewrite rules, irrelevant) ... } 

只需将它包装在一个location / { ... }区块中,使其具有相同的优先级:

 server { listen 80; server_name domainname.tld; location = / { return 301 https://$server_name/homepage; } location / { return 301 https://$server_name$request_uri; } } 

详情请参阅此文件 。

您可以使用正则expression式来仅匹配根url,就像这样。

  location ~ ^/$ { return 301 https://domainname.tld/homepage; } 

但是,最好将301代码redirect到HTTPS站点,并将HTTPS站点根目录中的302代码保存到/homepage 。 你不希望search引擎caching301永久redirect。 这是一个坏主意,因为该网页可能最终会改变。