2

我想在我的网站上有各种子域,例如:biology.mysite.com.

目前我的 nginx.conf 中有以下内容:

server {
  listen 80;
  server_name biology.mysite.com;
  return 301  https://mysite.com/tags/biology$request_uri;
}

此代码的工作原理是,如果您将浏览器指向biology.mysite.com,它会重定向到https://mysite.com/tags/biology并加载正确的生物学内容。

但是,我不想重定向 url,但想将子域保留为 url。

所以我根据这个要点用下面的代码替换了上面的代码,但它没有效果(意味着biology.mysite.com简单地指向mysite.com):

      if ($host ~* ^www\.([a-z0-9]*)\.(mysite\.com) )
      {
          set $tagname $1;
          set $host_without_www $2;
          rewrite ^/(.*)$ $scheme://$tagname.$host_without_www/ permanent;
      }

      if ($host ~* ^([a-z0-9]+)\.(mysite\.com))
      {
          set $tagname $1;
            set $host_without_www $2;

            rewrite ^/$ /index.php/tags/index/ last;
            rewrite ^/(.+)$ /index.php/$1 last;
      }

想法?

请注意我在此处发布此内容而不是Serverfault的原因是 b/c 我使用的是 Codeigniter 框架(它具有独特的路由方案),因此答案可能涉及 NGINX 和 Codeigniter 的知识。

4

1 回答 1

1

我相信您的最后一次重写应该如下所示:

rewrite ^/(.+)$ /index.php/tags/$tagname$1 last;

更新: 如果您想将 subdomain.mysite.com(没有 uri 部分)之类的请求重定向到标签控制器并使用子域方法,您应该更改下面的行

rewrite ^/$ /index.php/tags/index/ last;

rewrite ^/$ /index.php/tags/$tagname/ last;

lynxluna 的 nginx 配置和提到的要点中的注释是错误的。

于 2013-03-11T21:28:58.013 回答