如何在nginx中将特定路径重定向到没有www的相同路径

Posted

技术标签:

【中文标题】如何在nginx中将特定路径重定向到没有www的相同路径【英文标题】:How to redirect a specific path to the same path without www in nginx 【发布时间】:2015-02-09 06:48:52 【问题描述】:

我在服务器配置过程中遇到了一个问题:我需要一个从 http://www.example.com 到 http://example.com 的 301 重定向,只是针对一个特定的 URL 别名 - 例如 /partners。

预期输出 - http://www.example.com/partners/stuff -> http://example.com/partners/stuff。

我已经尝试将以下代码添加到虚拟主机:

server  
        server_name http://www.example.com/partners; 
        return 301 $scheme://example.com/partners;

但 vhosts 给我一个错误,告诉我此代码无效。 实现这种重写的正确方法是什么?

【问题讨论】:

【参考方案1】:

server_name 仅用于域。我可以建议你 2 个解决方案。

在服务器之间复制配置。这是nginx作者推荐的最佳方案。

server 
   server_name example.com;
   include example.com.conf;


server 
   server_name www.example.com;
   include example.com.conf;
   location /partners/ 
      return 301 $scheme://example.com$request_uri;
   

或者使用 if。性能不佳的解决方案

server 
   server_name .example.com;
   ...
   location /partners/ 
      if ($host = "www.example.com") 
         return 301 $scheme://example.com$request_uri;
      
   

http://wiki.nginx.org/IfIsEvil

http://wiki.nginx.org/Pitfalls#Server_Name

【讨论】:

以上是关于如何在nginx中将特定路径重定向到没有www的相同路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nginx docker elastic beanstalk中将http重定向到https

nginx - 将某个路径重定向到另一个域

nginx如何将url重定向到特定页面

【SWAG】解决nginx重定向问题

如何在没有 mod_rewrite 的情况下重定向除一个路径及其所有子路径之外的所有 URL?

如何禁用 301 重定向,在 Apache 中将斜杠添加到目录名称