我需要一個nginx的重寫規則重寫來自:nginx的子域重寫
http://some-keyword.example.com
到www.example.com/keyword.php?keyword=$some-keyword
,而無需在前面www
域還是重寫爲www.example.com
和www
未作爲關鍵字。
請你能幫我解決這個問題,怎麼寫這兩條規則?
我需要一個nginx的重寫規則重寫來自:nginx的子域重寫
http://some-keyword.example.com
到www.example.com/keyword.php?keyword=$some-keyword
,而無需在前面www
域還是重寫爲www.example.com
和www
未作爲關鍵字。
請你能幫我解決這個問題,怎麼寫這兩條規則?
如果你的意思是重定向,則:
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 {
# ....
# }
}
即使問題是關於重寫,您的示例並不排除「www」應該像它應該。你需要爲這個添加一個負面的lookahead構造:'^((?!www \。)。*)\。example \ .com $' – conny 2010-03-23 10:56:23
配置應該沒問題,因爲Nginx具有服務器搜索順序,正式名稱(www.example.com)在正則表達式之前。 – 2010-03-24 10:25:09
我有類似的問題,但這個解決方案似乎並沒有重寫主機。在OP中,他要求服務器在規則完成時處理www.example.com/keyword.php?keyword=$1,但這似乎只重寫路徑和查詢。有沒有辦法在內部重寫主機?我只看到了使用重定向的例子,我的所有實驗都失敗了。謝謝。 – 2011-01-28 07:30:28
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;
如果有可能我只創造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;
}
}
請告訴我,如果我錯過了什麼。
你說重寫(如在服務器端,代理重寫),但它聽起來像你的意思是重定向?在重定向時,對用戶可見的URL發生更改。在代理重寫時,這一切都發生在服務器端,用戶不可見。 – conny 2010-03-23 09:58:42
我的意思是重寫,用戶應該看到的是http://keyword.example.com Conny – ivan73 2010-03-23 10:49:32