首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Nginx中重定向URL

如何在Nginx中重定向URL
EN

Stack Overflow用户
提问于 2012-04-24 16:39:55
回答 4查看 287.3K关注 0票数 140

我需要将每个http://test.com请求重定向到http://www.test.com。如何做到这一点呢?

在服务器块中,我尝试添加

rewrite ^/(.*) http://www.test.com/$1 permanent;

但在浏览器里它说

页面未正确重定向

Firefox检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求。

我的服务器块看起来像这样

 server {
            listen       80;
            server_name  test.com;
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            #rewrite ^/(.*) http://www.test.com/$1 permanent;
            #rewrite ^(.*)$ $scheme://www.test.com$1;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-25 02:29:54

执行所需操作的最佳方法是添加另一个服务器块:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name test.com;
        return 301 $scheme://www.test.com$request_uri;
}

并编辑主服务器块server_name变量,如下所示:

server_name  www.test.com;

重要提示:if is evil,新的server块是正确的方法。如果可能,您必须使用位置和服务器,而不是ifRewrite有时是evil too,所以用return代替它。

票数 280
EN

Stack Overflow用户

发布于 2013-07-27 02:17:56

与这里的另一个答案类似,但将重写中的http更改为$scheme,如下所示:

server {
        listen 80;
        server_name test.com;
        rewrite     ^ $scheme://www.test.com$request_uri? permanent;
}

并编辑主服务器块server_name变量,如下所示:

server_name  www.test.com;

我必须这样做才能将www.test.com重定向到test.com。

票数 16
EN

Stack Overflow用户

发布于 2012-04-24 17:57:56

首先,确保您已经安装了带有HTTP重写模块的Nginx。要安装它,我们需要有pcre-library

How to install pcre library

如果上述操作已经完成,或者您已经有了它们,那么只需在您的nginx服务器块中添加以下代码

  if ($host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$host$1 permanent;
  }

从您可以使用的每个请求中删除www

  if ($host = 'www.your_domain.com' ) {
   rewrite  ^/(.*)$  http://your_domain.com/$1  permanent;
  }

因此,您的服务器块将如下所示

  server {
            listen       80;
            server_name  test.com;
            if ($host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$host$1 permanent;
            }
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10294481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档