nginx

2013-07-19 9 views
17

में एक उपनिर्देशिका में रूट पता को फिर से लिखें, मैं अपनी मीडियाविकी साइट को php के बैकएंड पर अपाचे के साथ स्थैतिक फ़ाइलों के लिए अग्रभाग के रूप में nginx का उपयोग करने के लिए परिवर्तित कर रहा हूं। जब तक मैं मूल निर्देशिका "example.com" को देखता हूं, तब तक मुझे अब तक काम करने वाली सबकुछ मिल गई है, यह एक निर्देशिका सूची की सेवा करने की कोशिश करता है और 403 त्रुटि देता है क्योंकि मेरे पास अक्षम है और वहां कोई अनुक्रमणिका फ़ाइल नहीं है।nginx

अपाचे पुनर्लेखन नियम मैं जगह में अभी बस है:

RewriteRule ^$ /wiki/Main_Page [L] 

मैं nginx में एक स्थान निर्देश के साथ कुछ ऐसा ही करने की कोशिश की, लेकिन यह काम नहीं कर रहा:

location =/{ 
    rewrite "^$" /wiki/Main_Page; 
} 

के बाकी मेरे स्थान निर्देश हैं:

location/{ 
    try_files $uri $uri/ @rewrite; 
} 

location @rewrite { 
    rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args; 
} 

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    try_files $uri /w/index.php?title=$1&$args; 
    expires max; 
    log_not_found off; 
} 

location ~ \.php?$ { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    proxy_pass http://127.0.0.1:8080; 
} 

मैं केवल एक index.php फ़ाइल हेडर के साथ रख सकता हूं ('Locat आयन: ') इसमें, लेकिन मैं इसे फिर से लिखने के नियम के साथ ठीक से करूँगा।

nginx के साथ मीडियाविकी चलाने के लिए मुझे ऑनलाइन मिले सभी उदाहरण विकी/viki/subdirectory के बजाय wiki.example.com के रूप में विकी चलाते हैं।

संपादित करें: मैंने इस तरह की try_files को जोड़ने का भी प्रयास किया: try_files $uri $uri/ @rewrite /wiki/Main_Page; उसी 403 त्रुटि परिणाम के साथ।

उत्तर

27

मुझे nginx irc चैट में सहायता मिली।

मूल रूप से मुझे जो करना है वह पुनर्लेखन के बजाय वापसी का उपयोग करना था। कोई

location =/{ 
    return 301 http://www.example.com/wiki/Main_Page; 
} 
0
  1. सुनिश्चित करें कि "/wiki/Main_Page" हो सकता है सफलतापूर्वक सर्वर खंड में पहुँचा
  2. चेक, देखते हैं: इस के लिए

    location =/{ 
        rewrite "^$" /wiki/Main_Page; 
    } 
    

    : तो मैं इस बदल वैश्विक पुनर्लेखन नियम। सर्वर अनुभाग में नियमों को पुनर्लेखन स्थान अनुभाग से पहले निष्पादित किया जाएगा। इस तरह स्थान अनुभाग में

  3. का उपयोग करते हुए पुनः लेखन के नियम:

    location =/{ 
        rewrite "^.*$" /wiki/Main_Page break;  
    } 
    

वेतन ध्यान "तोड़" यहाँ। मतलब पुनर्लेखन चक्र तोड़ने का मतलब है।

यदि यह पृष्ठ बैकएंड सर्वर में स्थित है, तो यहां proxy_pass का उपयोग करना चाहिए।

0

जवाब आप के लिए इस्तेमाल किया, कोई रीडायरेक्ट है आप एक /wiki स्थान पर / स्थान को छोड़ कर रही है, आप इस कोशिश कर सकते हैं बजाय

location =/{ 
    rewrite^/w/index.php?title=Main_Page&$args last; 
} 

यह चाहिए / यूआरआई

+0

मुझे यह कोड कहां लिखना चाहिए? –

+0

@Pankajkatiyar आपके सर्वर ब्लॉक –

8

मैं पसंद के लिए सर्वर Main_Page उपयोग करने के लिए:

location =/{ 
    return 301 http://$host/wiki/Main_Page; 
} 
+1

में स्वीकार्य उत्तर में सुधार करने के लिए और अधिक सहायक नहीं है क्योंकि एक ही विचार है? –

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