नगीनक्स द्वारा सर्व किए गए URL में डबल स्लैश कैसे निकालें?


9

मुझे उबंटू 12.04 पर नियनेक्स कॉन्फिग में निम्नलिखित अपाचे रीराइट नियमों को दोहराने की आवश्यकता है। के बराबर क्या है:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]


जिसने भी इसे ऑनलाइन पाया है और सुझाए गए उत्तरों को कॉपी-पेस्ट करने की कोशिश करता है, अगर आप कस्टम पोर्ट के साथ वर्चुअलबॉक्स सेटअप का उपयोग कर रहे हैं तो सावधान रहें । मुझे इसे बदलना पड़ा जैसे rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;कि 4321 वर्चुअलबॉक्स के बाहरी पोर्ट को मेरे ब्राउज़र से कनेक्ट करता है।
एएक्सएल

जवाबों:


6

मैं इस दृष्टिकोण का सुझाव देना चाहता हूं:

# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}

यह nginx के डिफ़ॉल्ट व्यवहार का उपयोग करता है - स्लैग का विलय, इसलिए हमें स्लैश को बदलने की आवश्यकता नहीं है, हम बस पुनर्निर्देशन करते हैं

यहाँ पाया गया


1
'अगर' बुराई है: nginx.com/resources/wiki/start/topics/depth/ifisevil
MacroMan

यह SSLbot के लिए सर्टिफिकेट के माध्यम से काम नहीं करता है, यदि आपके पास नग्नेक्स एक रिवर्स प्रॉक्सी के रूप में है proxy_pass
जोनाथन

3

मुझे काम नहीं करने के लिए क्वो की प्रतिक्रिया मिली। मेरे डिबग लॉग को देखते हुए, ऐसा होता है:

2014/08/18 15:51:04 [debug] 16361#0: *1 http script regex: "(.*)//+(.*)"
2014/08/18 15:51:04 [notice] 16361#0: *1 "(.*)//+(.*)" does not match "/contact-us/", client: 59.167.230.186, server: *.domain.edu, request: "GET //////contact-us//// HTTP/1.1", host: 
"test.domain.edu"

मैंने पाया कि यह मेरे लिए काम कर रहा है:

if ($request_uri ~* "\/\/") {
  rewrite ^/(.*)      $scheme://$host/$1    permanent;
}

रेफरी: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/


संदर्भ लिंक वह है जिसे आपको जांचने की आवश्यकता है। सही समाधान है। मैं उत्तर को संपादित करने का प्रयास करूंगा।
अनूप नायर

1

इसे इस्तेमाल करे:

merge_slashes off;
rewrite (.*)//+(.*) $1/$2 permanent;

स्लैश> 3 या स्लैश के कई समूहों के लिए कई रीडायरेक्ट हो सकते हैं।


'मर्ज_स्लैश ऑफ' से कोई फर्क नहीं पड़ा और परिणामस्वरूप कोई बदलाव नहीं हुआ।
अनूप नायर

1
merge_slashes on;सिर्फ काम क्यों नहीं करता ? क्या नग्नेक्स छोटी गाड़ी है?
जोनाथन

1
@ जोनाथन - मैं अभी भी इस पार आया था। मेरी समझ, यह वह merge_slashes onनहीं है जो आप सोच रहे हैं। यह मूल रूप से nginx को // और / और /// को एक ही स्लैश के रूप में लेने के लिए कहता है (अपने आप में विलय और पुनर्निर्देशित नहीं करने के लिए)
एंड्रयू न्यूबी

1

मैं एक टीम के लिए कई उत्पादन सर्वर और देव सर्वर चलाने के अनुभव से बोलता हूं। नगीनक्स में ऐसा न करें। इसके बजाय, अपने एप्लिकेशन सर्वर (JS / PHP आदि) के भीतर अपने राउटर का उपयोग करें।

Nginx मूल कार्य के लिए विश्वसनीय नहीं है। उदाहरण के लिए, ifयदि आप एसएसएल, एक रिवर्स प्रॉक्सी, हिडन पोर्ट्स, और इसी तरह का उपयोग करने के लिए अपना सेटअप बदलते हैं , तो पुनर्निर्देश, पुनर्लेखन और खंड गैर-नियतात्मक हैं। तो आप इसे एक वातावरण में सही तरीके से काम कर सकते हैं, लेकिन दूसरे में काम करना असंभव हो सकता है।

समस्याओं को हल करने के लिए एक उचित प्रोग्रामिंग भाषा से चिपके रहें, यहां तक ​​कि दोहरे स्लैग को मर्ज करने के लिए भी सरल। आप मुझे बाद में धन्यवाद देंगे।


जबकि मैं आपके विचार से सहमत हूं, मेरा मानना ​​है कि हमें लोगों को मामले के बारे में अपनी राय बनाने का विकल्प देना चाहिए। मैं अपाचे को नग्नेक्स पसंद करता हूं, उसी कारण से तुम्हारा। ध्यान दें, Apache mod_rewrite को एक साधारण प्रोग्रामिंग भाषा भी माना जा सकता है। :-)
पेटेर - मोनिका


-1

URL example.com//dir1////dir2///dir3 और अधिक यह कोशिश करें कि यह मेरे लिए काम कर रहा है

merge_slashes बंद; स्थान ~ ^ (; *?) // + (। *) $ {वापसी 301 $ 1 / $ 2; }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.