2010-03-23 12 views
8

मैं से पुनर्लेखन के लिए एक nginx पुनर्लेखन नियम की जरूरत है।nginx उपडोमेन पुनर्लेखन

कृपया आप इस समस्या को हल करने में मदद कर सकते हैं, इन दो नियमों को कैसे लिखना है?

+0

आप फिर से लिखते हैं (जैसे सर्वर की तरफ, प्रॉक्सी रीराइट) लेकिन ऐसा लगता है जैसे आप रीडायरेक्ट करते हैं? एक रीडायरेक्ट पर उपयोगकर्ता के लिए दृश्यमान यूआरएल बदलता है। प्रॉक्सी रीराइट पर, यह सर्वर के पक्ष में होता है, जो उपयोगकर्ता के लिए अदृश्य है। – conny

+0

मेरा मतलब है फिर से लिखना, उपयोगकर्ताओं को क्या देखना चाहिए http://keyword.example.com Conny – ivan73

उत्तर

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" को बाहर नहीं करना चाहिए जैसा कि इसे करना चाहिए। इसके लिए आपको एक नकारात्मक लुकहेड निर्माण जोड़ने की आवश्यकता है: '^ ((?! www \।)। *) \। उदाहरण \ .com $' – conny

+0

कॉन्फ़िगरेशन नकारात्मक दिखने के बिना ठीक होना चाहिए, क्योंकि Nginx में सर्वर खोज ऑर्डरिंग है पूर्ण नाम (www.example.com) regexes से पहले जाओ। –

+0

मेरे पास एक समान समस्या है, लेकिन यह समाधान मेजबान को फिर से लिखना प्रतीत नहीं होता है। ओपी में, उन्होंने अनुरोध किया कि नियम पूर्ण होने पर सर्वर www.example.com/keyword.php?keyword=$1 को संभाला जा रहा है, लेकिन ऐसा लगता है कि यह केवल पथ और क्वेरी को फिर से लिखना है। मेजबान को आंतरिक रूप से फिर से लिखने का कोई तरीका है? मैंने केवल रीडायरेक्ट का उपयोग करके उदाहरण देखे हैं और मेरे सभी प्रयोग विफल हो गए हैं। धन्यवाद। –

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

तो यह संभव है कि मैं केवल 1 सर्वर बना सकते हैं (आभासी मेजबान) जो सामान्य 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; 
    } 
} 

कृपया मुझे बताएं कि मुझे कुछ याद आया है या नहीं।

संबंधित मुद्दे