2014-04-25 81 views
0

我设置了通配符域,并试图使重写规则适用于一个子域而不是另一个子域,也不适用于主域。Nginx重写通配符域

server{ 
    listen 80 default_server; 

    server_name _; 
    root   /usr/share/nginx/html/$http_host; 
    index   index.php index.html index.htm; 

    location/{ 
     try_files $uri $uri/ /index.html; 
    } 

    include /usr/share/nginx/conf/mission13.io.conf; 

    location ~ \.php$ { 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

正如你可以看到,我包括在那里就是我的改写将mission13.io.conf,我已经尝试了一些不同的东西,并没有奏效,像这样的:

rewrite ^http://sub.mission13.io/(.+)/(.+)$ /index.php?page=$1&action=$2&ajax=0; 

我也有试试这个:

location sub.missison13.io/ { 
    rewrite ^(.+)/(.+)$ /index.php?page=$1&action=$2&ajax=0; 
} 

这两种方法都没有工作。我能做些什么来做到这一点?

+0

您是否尝试将所有请求重写为http://sub.mission13.io? –

回答

1

你应该在它创建一个新的server块,并把你的改写:

server { 
    listen 80; 

    server_name sub.mission13.io; 

    # everything else # 

    include /usr/share/nginx/conf/mission13.io.conf; 
} 

server { 
    listen 80 default_server; 

    server_name _; 
    root   /usr/share/nginx/html/$http_host; 
    index   index.php index.html index.htm; 

    location/{ 
     try_files $uri $uri/ /index.html; 
    } 

    location ~ \.php$ { 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 
} 

职高,你可以做到这一点不使用if块第二server块,但是这将是坏的,不优雅和不合时宜。

if ($http_host = sub.mission13.io) { 
    rewrite ^(.+)/(.+)$ /index.php?page=$1&action=$2&ajax=0; 
} 
+0

谢谢,我使用'if'方法,我知道效率不高,但我不需要效率,因为网站不会收到很多请求,因为它是为我们的客户而不是为公众。 –