2010-03-23 90 views
8

我需要一個nginx的重寫規則重寫來自:nginx的子域重寫

http://some-keyword.example.comwww.example.com/keyword.php?keyword=$some-keyword

,而無需在前面www域還是重寫爲www.example.comwww未作爲關鍵字。

請你能幫我解決這個問題,怎麼寫這兩條規則?

+0

你說重寫(如在服務器端,代理重寫),但它聽起來像你的意思是重定向?在重定向時,對用戶可見的URL發生更改。在代理重寫時,這一切都發生在服務器端,用戶不可見。 – conny 2010-03-23 09:58:42

+0

我的意思是重寫,用戶應該看到的是http://keyword.example.com Conny – ivan73 2010-03-23 10:49:32

回答

7

如果你的意思是重定向,則:

server { 
    server_name ~^(.*)\.example\.com$ ; 

    rewrite^http://www.example.com/keyword.php?keyword=$1 redirect; 
} 

重寫隨後的情況下根本就

server { 
    server_name example.com ~^(.*)\.example\.com$ ; 

    rewrite^/keyword.php?keyword=$1 break; 

# location /keyword.php { 
# .... 
# } 
} 
+1

即使問題是關於重寫,您的示例並不排除「www」應該像它應該。你需要爲這個添加一個負面的lookahead構造:'^((?!www \。)。*)\。example \ .com $' – conny 2010-03-23 10:56:23

+0

配置應該沒問題,因爲Nginx具有服務器搜索順序,正式名稱(www.example.com)在正則表達式之前。 – 2010-03-24 10:25:09

+0

我有類似的問題,但這個解決方案似乎並沒有重寫主機。在OP中,他要求服務器在規則完成時處理www.example.com/keyword.php?keyword=$1,但這似乎只重寫路徑和查詢。有沒有辦法在內部重寫主機?我只看到了使用重定向的例子,我的所有實驗都失敗了。謝謝。 – 2011-01-28 07:30:28

2
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&p=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-price-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&price=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=$4 last; 
0

如果有可能我只創造100臺服務器(虛擬主機)這是正常的domain.com/www.domain.com然後用conf來重寫其餘的給他們

server { 
    server_name domain.com www.domain.com; 
    # normal handling for files 
} 

server { 
    server_name ~(?<subdomain>[^\.]*).domain.com; 
    location/{ 
     try_files keyword.php?keyword=$subdomain =404; 
    } 
} 

請告訴我,如果我錯過了什麼。