ইউআরএলগুলিতে ডাবল স্ল্যাশ বলতে কী বোঝায়?


32

ডাবল স্ল্যাশগুলি প্রায়শই URL এর অর্থ খুঁজে পাওয়া যায়?

উদাহরণ স্বরূপ:

  • http://www.example.com/A/B//C/

দয়া করে মনে রাখবেন যে আমি ঠিক পরে শুরুতে উল্লেখ করছি না http:

উত্তর:


32

এটি প্রোগ্রামারদের / বিকাশকারীদের কোডে একটি ত্রুটি। আপনি যদি এই দুটি ইউআরএলএস তুলনা করেন:

  • http://www.example.com/A/B/C/
  • http://www.example.com/A/B//C/

এগুলি দেখতে অন্যরকম তবে আপনি যদি দেখতে যান তবে উভয়ই বেশিরভাগ আধুনিক ব্রাউজারে কাজ করবে।

এটি এমন কিছু যা আপনি ঠিক করতে চান। আপনার যদি ডাবল স্ল্যাশ থাকে তবে এটি গুগলের ওয়েব ক্রলারগুলিকে বিভ্রান্ত করতে পারে এবং তাদের মনে করতে পারে যে পৃষ্ঠার 2 সংস্করণ রয়েছে।


11
প্রকৃতপক্ষে, পৃষ্ঠা লোডের ব্রাউজারের সাথে কোনও সম্পর্ক নেই , বরং সার্ভারটি অতিরিক্ত স্ল্যাশটিকে উপেক্ষা করে। এটি দীর্ঘ হয়ে গেল, তাই আমি পোস্ট করা উত্তরটি দেখুন ।
josh3736

33

@ র্যান্ডমবেন দ্বারা উল্লিখিত হিসাবে , ডাবল স্ল্যাশ সম্ভবত কোথাও একটি ত্রুটির ফলস্বরূপ।

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

GET /A/B//C/D HTTP/1.1
Host: www.example.com
...

দেখে মনে হচ্ছে অ্যাপাচি এবং আইআইএস উভয় সংস্করণই পথের সমাধানের সময় অতিরিক্ত স্ল্যাশগুলিকে উপেক্ষা করবে এবং URL টি অতিরিক্ত স্ল্যাশ না থাকলে ডকুমেন্টটি ফিরে আসবে return যাইহোক , ব্রাউজারগুলি (আইই 8 এবং Chrome 9 পরীক্ষা করে দেখেছি) পৃষ্ঠার সংস্থানগুলির যে কোনও আপেক্ষিক URL (প্যারেন্ট পাথ উপাদানযুক্ত) দ্বারা বিভ্রান্ত হয়, যা খারাপ ফলাফল দেয়। উদাহরণস্বরূপ, যদি কোনও পৃষ্ঠাতে থাকে:

<link rel="stylesheet" href="../../style.css" type="text/css" />

পৃষ্ঠাটি লোড করার পরে /a/b/c/, ব্রাউজারটি অনুরোধ করবে /a/style.css। তবে যদি whatever যে কোনও /a/b//c/কারণেই requested অনুরোধ করা হয় (এবং সার্ভারটি অতিরিক্ত স্ল্যাশ উপেক্ষা করে), ব্রাউজারটি অনুরোধ করে শেষ হবে /a/b/style.css, যা বিদ্যমান থাকবে না। ওফস, পৃষ্ঠাটি কুরুচিপূর্ণ দেখাচ্ছে।

(যদি URL টির কোনও প্যারেন্ট পাথ উপাদান না থাকে ( ..) বা পরম হয় তবে এটি স্পষ্টতই ঘটবে না ))

এটি আমার মতামত যে অ্যাপাচি এবং আইআইএস (এবং সম্ভবত অন্যরা) দুটি ভিন্ন সংস্থান হিসাবে প্রযুক্তিগতভাবে প্রতিনিধিত্ব করে এবং ভুলভাবে কাজ করছে acting আরএফসি 2396 অনুসারে , প্রতিটি স্ল্যাশ উল্লেখযোগ্য:/a/b/c//a/b//c/

  path          = [ abs_path | opaque_part ]

  path_segments = segment *( "/" segment )
  segment       = *pchar *( ";" param )
  param         = *pchar

  pchar         = unreserved | escaped |
                  ":" | "@" | "&" | "=" | "+" | "$" | ","

সুতরাং, /a/b/c/তিনটি বিভাগ নিয়ে গঠিত: "এ", "বি", এবং "সি"; /a/b//c/আসলে চারটি নিয়ে গঠিত: "এ", "বি", "" (খালি স্ট্রিং) এবং "সি"। খালি স্ট্রিংটি একটি বৈধ ফাইল সিস্টেম ডিরেক্টরি কিনা তা সার্ভারের প্ল্যাটফর্মের বিশদ। (এবং যৌক্তিকভাবে, এর অর্থ ব্রাউজারগুলি প্যারেন্ট পাথের উপাদানগুলির সাথে সম্পর্কিত ইউআরএলগুলি পার্স করার সময় আসলে সঠিকভাবে পরিচালিত হয় - আমার উদাহরণস্বরূপ, তারা "সি" ডিরেক্টরি এবং "" ডিরেক্টরিটি পেরিয়ে style.cssযায়, "বি" থেকে অনুরোধ করতে আমাদের ছেড়ে যায় ))

আপনি যদি অ্যাপাচি ব্যবহার করে থাকেন mod_rewriteতবে একটি দুর্দান্ত সরল ফিক্স রয়েছে :

# remove multiple slashes anywhere in url 
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

এটি একটি এইচটিটিপি 301 Moved Permanentlyপুনর্নির্দেশ জারি করবে যাতে কোনও ডাবল স্ল্যাশ ইউআরএল থেকে ছিটকে যায়।


2
আপনার mod_rewriteসমাধানটি 3, 4, ... স্ল্যাশগুলিকেও বিবেচনায় নেওয়া ভাল না? লাইন বরাবর কিছু /{2,}? (ধরে নিচ্ছি আপাচি এই ধরণের
পরিমাণের পরিমাণের

+1 - অতিরিক্ত তথ্যের জন্য ধন্যবাদ। আমি সেভাবে ভাবিনি!
বেন হফম্যান

3
এটি ভুল আচরণ নয়: a/bএবং a//bপ্রকৃতপক্ষে দুটি স্বতন্ত্র ইউআরএল পাথ, তবে সার্ভার এটি চাইলে উভয়ের জন্য একই উত্স ফেরত দিতে বাধা দেয় না। তবে আমি আপনার সাথে একমত হই যে অনুশীলনে 301 পুনর্নির্দেশ ফিরিয়ে দেওয়া আরও দরকারী বলে মনে হয়।
ইলমারি করোনেন

4
@ ইলমারি কারোনেন: এটি একেবারে ভুল আচরণ, কারণ (১) এই আচরণটি স্বয়ংক্রিয়ভাবে একটি একক সংস্থার জন্য অসীম সংখ্যক নকল রেফারেন্স তৈরি করে (যা কোনও স্পেসের চিঠির লঙ্ঘন না করলে অবশ্যই স্পিরিট লঙ্ঘন করে), এবং আরও ব্যবহারিকভাবে (২) এটি ব্রাউজারগুলিতে আপেক্ষিক-পথ পরিচালনার "বিরতি" দেয় যা সঠিকভাবে a//bএকটি ডিরেক্টরি হিসাবে খালি স্ট্রিংটি গণনা করে (উপরের স্টাইলশিটের উদাহরণ দেখুন)।
josh3736

1
... এবং যাইহোক, আমি যুক্তি দিয়েছি যে আরএফসি 2396 কোনও সার্ভারকে স্বয়ংক্রিয়ভাবে সংহত করে স্ল্যাশ করে একই সংস্থানটি ফেরত দিতে নিষেধ করে কারণ প্রতিবেদনে বলা হয়েছে যে প্রতিটি স্ল্যাশ তাৎপর্যপূর্ণ। পরপর স্ল্যাশগুলি স্বয়ংক্রিয়ভাবে উপেক্ষা করা সেই অনুমানের লঙ্ঘন। (যদি কেউ তাদের সার্ভারটিকে এটি করার জন্য প্রোগ্রাম করে থাকে তবে এটি নিখুঁত হবে one তবে, সার্ভারগুলি ডিফল্টরূপে এটি করা ভুল is )
josh3736

4

যখন এটি রিসোর্স ইউআরএল-এ ব্যবহৃত হয় তখন ডাবল স্ল্যাশের একটি অর্থ থাকে। উদাহরণস্বরূপ, যখন এটি কোনও পটভূমি চিত্রের URL এর জন্য সিএসএসে ব্যবহারকারী হয়:

.classname {
    background : url("//example.com/a/b/c/d.png");
}

এখানে এর অর্থ এই পটভূমি চিত্রটি বর্তমান ওয়েব পৃষ্ঠার ডোমেন ব্যতীত অন্য কোনও ডোমেন থেকে আনা হচ্ছে। বা অন্য কথায়, http://ঠিক যেমন //संसाधन ইউআরএল ব্যবহার করার সময় লেখা যেতে পারে ।

তবে URL এর (যেমন /a//b/c/d.htm:) এর মধ্যে এই ডাবল স্ল্যাশের কোনও অর্থ নেই।


ভাল, এটি পুরো সত্য নয়। ডাবল স্ল্যাশ হয় যখন মিক্সড কন্টেন্টের সমস্যা এড়াতে হবে, সুতরাং সাইটটি যখন এইচটিপি থেকে লোড করা হয় তখন ডাবলস্ল্যাশটি প্রসারিত হবে http- এ, যখন সাইটটি https থেকে লোড করা হয় তখন ডাবলস্ল্যাশটি https এ প্রসারিত হয়।
andrej

2

উল্লিখিত হিসাবে, কিছু সার্ভারগুলি ইউআরএল পথে ডাবল স্ল্যাশ উপেক্ষা করার জন্য সেটআপ করা হয়েছে, তবে অ্যামাজন এস 3 স্ট্যাটিক হোস্টিং তা করবে না। যদি আপনি সে ক্ষেত্রে তাদের পরিচালনা / উপেক্ষা করতে চান তবে আপনি বৈশিষ্ট্য প্যানেলে পুনঃনির্দেশ বিধিগুলি ব্যবহার করতে পারেন ।

আপনি যদি ডোমেন নাম অনুসরণ করে একটি ডাবল স্ল্যাশ উপেক্ষা করতে চান তবে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyPrefixWith/>
    </Redirect>
  </RoutingRule>
</RoutingRules>

আপনি সম্ভবত এটিগুলি খুঁজে পেতে এবং প্রতিস্থাপন করতে পারেন, তবে এটি আমার পক্ষে যথেষ্ট ছিল।

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