nginx rewrite 能够简单实现二级域名跳转。下面为使用方法。

访问效果:
当访问 http://abc.test.com 跳转到 http://www.test.com/abc
浏览器地址会变www.test.com/abc
实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server { 
listen 80;
server_name www.test.com;
location / {
root /data/test;
index index.html;
}
}
server {
listen 80;
server_name *.test.com;
if ( $http_host ~* "^(.*)\.test\.com$") {
set $domain $1;
rewrite ^(.*) http://www.test.com/$domain break;
}
}

访问效果二
当访问http://abc.test.com跳转到http://www.test.com/abc/
这样配置浏览器的地址就会显示成http://abc.test.com
实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name *.test.com;
root /usr/local/www;
#这是里可以加多个目录,如果不加目录,会无法访问到abc.test.com/目录下的文件,如图片目录/images
location ~ ^/(test|images|styles)/
{
proxy_redirect off;
proxy_set_header Hostwww.test.com;
proxy_pass http://192.168.1.2:8080;
}
location / {
set $domain default;
if ( $http_host ~* "^(.*)\.test\.com$") {
set $domain $1;
}
rewrite ^/(.*) /$domain/$1 last;
}
access_log off;
}

获取二级域名并指向不同静态目录的方法

1
2
3
4
5
6
7
if ( $host ~* (\b(?!www\b)\w+)\.\w+\.\w+ ) {
set $subdomain /$1;
}
location / {
root /home/www/public_html$subdomain;
index index.html index.php;
}