এনজিএনএক্স দ্বারা পরিবেশিত ইউআরএলগুলিতে ডাবল স্ল্যাশ কীভাবে সরিয়ে ফেলবেন?


9

আমাকে উবুন্টু 12.04-এ Nginx কনফিগারেশনে নিম্নলিখিত অ্যাপাচি পুনর্লিখনের নিয়মগুলি প্রতিলিপি করতে হবে। Nginx সমতুল্য কি:

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


যে কেউ এই অনলাইন খুঁজে পেয়েছে এবং প্রস্তাবিত উত্তরগুলি অনুলিপি করার চেষ্টা করেছে, আপনি যদি কাস্টম পোর্টগুলির সাথে ভার্চুয়ালবক্স সেটআপ ব্যবহার করছেন তবে সাবধান হন । আমি যেমন হতে সেটা বদলাতে হবে rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;যেখানে 4321 Virtualbox'd বাইরের পোর্টের নিজের ব্রাউজার সংযোগ স্থাপন করে nginx হয়।
এক্সেল

উত্তর:


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- এর ডিফল্ট আচরণ ব্যবহার করে - স্ল্যাশগুলি মার্জ করে, সুতরাং আমাদের স্ল্যাশগুলি প্রতিস্থাপনের দরকার নেই, আমরা কেবল পুনঃনির্দেশ করি

এখানে পাওয়া গেছে



এটি SSL এর পক্ষে সার্টবোটের মাধ্যমে কাজ করে না যদি আপনার মাধ্যমে বিপরীত প্রক্সি হিসাবে এনগিনেক্স থাকে proxy_pass
জোনাথন

3

আমি কাজ না করার জন্য kwo এর প্রতিক্রিয়া পেয়েছি। আমার ডিবাগ লগটি দেখে, যা ঘটেছিল তা হ'ল:

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-Caning-removing/


আপনার যাচাই করা দরকার রেফারেন্স লিঙ্ক। সঠিক সমাধান আছে। আমি উত্তরটি সম্পাদনা করার চেষ্টা করব।
অনুপ নায়ের

1

এটা চেষ্টা কর:

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

স্ল্যাশ> 3 বা স্ল্যাশের একাধিক গ্রুপের জন্য একাধিক পুনঃনির্দেশ থাকতে পারে।


'মার্জ_স্ল্যাশস অফ' কোনও পার্থক্য তৈরি করে না এবং এর ফলে কোনও পরিবর্তন হয়নি।
অনুপ নায়ের

1
merge_slashes on;শুধু কাজ করে না কেন ? এনগিনেক্স বগি?
জোনাথন

1
@ জোনাথন - আমি ঠিক এটির পাশাপাশি এসেছি। আমার বোঝাপড়া, merge_slashes onআপনি যা ভাবছেন তা তা করে না। এটি মূলত nginx কে // এবং / এবং /// কে একক স্ল্যাশ হিসাবে গ্রহণ করতে বলে (নিজেই একীভূত হতে এবং পুনঃনির্দেশ না করা)
অ্যান্ড্রু নিউবি

1

আমি একটি দলের জন্য একাধিক উত্পাদন সার্ভার এবং ডেভ সার্ভার চালানোর অভিজ্ঞতা থেকে কথা বলি। এনগিনেক্সে এটি করবেন না। পরিবর্তে, আপনার অ্যাপ্লিকেশন সার্ভারের মধ্যে আপনার রাউটারটি ব্যবহার করুন (জেএস / পিএইচপি ইত্যাদি)।

Nginx স্থির কাজের জন্য নির্ভরযোগ্য নয়। উদাহরণস্বরূপ, পুনর্নির্দেশগুলি, পুনর্লিখন এবং ifক্লজগুলি হ'ল যদি আপনি নিজের সেটআপটি এসএসএল, একটি বিপরীত প্রক্সি, লুকানো পোর্টস এবং এই জাতীয় ব্যবহার করতে পরিবর্তন করেন। সুতরাং আপনি এটি একটি পরিবেশে সঠিকভাবে কাজ করতে পারেন তবে অন্যটিতে কাজ করা অসম্ভব হতে পারে।

সমস্যা সমাধানের জন্য একটি উপযুক্ত প্রোগ্রামিং ভাষার প্রতি আঁকুন, এমনকি ডাবল স্ল্যাশগুলি মার্জ করার মতো সহজ। আপনি পরে আমাকে ধন্যবাদ জানাতে হবে।


আমি আপনার দৃষ্টিভঙ্গির সাথে একমত হওয়ার পরেও আমি বিশ্বাস করি যে আমাদের উচিত বিষয়টি সম্পর্কে লোকদের তাদের নিজস্ব মতামত গঠনের বিকল্প দেওয়া উচিত। আমি আপনার চেয়ে একই কারণে নেগিনেক্সে অ্যাপাচি পছন্দ করি। দ্রষ্টব্য, অ্যাপাচি মোড_উরাইটকেও একটি সাধারণ প্রোগ্রামিং ভাষা হিসাবে বিবেচনা করা যেতে পারে। :-)
পিটার - মনিকা


-1

URL উদাহরণ.com//dir1////dir2///dir3 এবং আরও অনেক কিছু এটি আমার জন্য কাজ করে দেখুন Try

মার্জ_স্ল্যাশ বন্ধ; অবস্থান ~ ^ (। *?) // + (। *?) 30 30 301 $ 1 / $ 2; }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.