2014-04-25 139 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'方法,我知道效率不高,但我不需要效率,因爲網站不會收到很多請求,因爲它是爲我們的客戶而不是爲公衆。 –