আমার রাইরাইটরুল যেখানে অবস্থিত তার উপর নির্ভর করে কেন আমি দ্বিগুণ ট্রেলিং স্ল্যাশ পাব?


9

আমি নন-www ইউআরএল-তে সমস্ত www অনুরোধগুলি নির্দেশ করার জন্য নিম্নলিখিত কোডটি ব্যবহার করছি:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

এটি আমার ওয়েবসাইটের মূলের একটি .htaccess ফাইলের মধ্যে দুর্দান্ত কাজ করে।
উদাহরণস্বরূপ,
www.example.com -> উদাহরণ.
com/ www.example.com/ -> উদাহরণ.
com/ www.example.com/other_page -> উদাহরণ. com/other_page

তবে, যদি আমি এই একই কোডটিকে আমার ভার্চুয়ালহস্ট কনফিগারেশনে স্থানান্তরিত করি তবে পুনরায় লিখিত URL গুলিতে ডাবল ট্রেলিং স্ল্যাশ থাকে contain
www.example.com -> উদাহরণ.
com // www.example.com/ -> example.com//
www.example.com/other_page -> উদাহরণ. com // ਦੂਜੇ_পেজ

পুনরায় লেখার নিয়ম থেকে স্ল্যাশ সরিয়ে আমি এটি ঠিক করেছি:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]

তবে এর কারণ আমি বুঝতে পারি না। কেউ জানেন কেন?

উত্তর:


10

আমি যেমন এটি বুঝতে পারি, .htaccess ফাইলগুলিতে, আপনার নিয়মে মোড_আরাইট প্রসেসের স্ট্রিংটি .htaccess ফাইলটি যে ডিরেক্টরিটিতে রয়েছে তার সাথে সম্পর্কিত, তাই এটির শুরুতে / থাকবে না।

ভার্চুয়ালহোস্ট এন্ট্রি-তে, এটির স্ট্রিংটি সার্ভারের মূলের সাথে নিখুঁত এবং এর মধ্যে অন্তর্ভুক্ত থাকে /।

এটি মোড_উইরাইট কীভাবে কাজ করে তার মধ্যে সূক্ষ্ম পার্থক্য তৈরি করে।

এখানে অনুরূপ সমস্যা এবং সমাধান সহ কেউ আছেন:

http://forum.modrewrite.com/viewtopic.php?p=56322&sid=77f72967f59200b5b5de174440234c3a

এটি উভয় ক্ষেত্রেই কাজ করা উচিত, ধরেই নেওয়া উচিত যে আমার পালানো সঠিকভাবে মনে আছে:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^\/?(.*?)$ http://example.com/$1 [R=301,L]

ধন্যবাদ! এখন আমি বুঝতে পারি কেন, অন্তত। যাইহোক, আমার মূল প্রশ্নটিতে আমি যেভাবে $ 1 টি দেখিয়েছি কেবল তার আগে / অপসারণের চেয়ে এটি কি কোনও কারণে ভাল?
ডেভেকোর

1
এর চেয়ে ভাল বা খারাপ আর কিছু নয়, এটি প্রবাহের পার্থক্যগুলি পরিচালনা করার জন্য প্রতিবার সম্পাদনা না করে আপনি ভার্চুয়ালহস্টের .htaccess এর মধ্যে পরিবর্তন করতে পারেন। যদি আপনার পথটি আপনার পক্ষে কাজ করে তবে এটি আটকে দিন! :)
নিওবাইট

ওহ, এটি ঠিক - আপনার পদ্ধতি .htaccess এবং ভার্চুয়ালহোস্ট উভয় ক্ষেত্রেই কাজ করবে। এটি এটি আরও ভাল আইএমও করে তোলে :)
ডেভেকোর

4
আমি @ ডেভেকারোর মতো ঠিক একই সমস্যাটি পেয়েছি এবং আপনার সমাধানটি চেষ্টা করেছি। শেষ লাইনটি আমার পক্ষে কাজ করে নি। RewriteRule ^/?(.*)$ http://example.com/$1 [R=301,L]কৌতুকটি করেছে
কেনি রাসচেয়ার্ট

2

এটি ঘটছে কারণ আপনি প্রাথমিক স্ল্যাশটি ক্যাপচার করছেন (.*)এবং তারপরে নতুন জায়গায় এটির আগে আরও একটি স্ল্যাশ প্রয়োগ করছেন /$1। এর আগে এটি ঘটেনি কারণ প্রতি_ ডিরেক্টরি প্রসঙ্গে একটি সার্ভারের প্রসঙ্গের বিপরীতে অপারেটিং করার সময় mod_rewrite কিছুটা আলাদা আচরণ করে।

আপনি স্ল্যাশ optionচ্ছিকভাবে প্রাক-খালি করে এড়াতে পারেন। অতিরিক্ত হিসাবে আপনি আপনার উদ্বৃত্ত ডোমেনগুলির সাহায্যে খালি ভার্চুয়ালহোস্টে রেডাইরেক্ট ম্যাচটি ব্যবহার করতে পারেন যা কিছুটা কম প্রক্রিয়াজাতকরণ তৈরি করে এবং আরও পরিষ্কার দেখায়।

<VirtualHost *>
ServerName example.com
ServerAlias other.example.com
..
RedirectMatch permanent ^/?(.*) http://example.com/$1
</VirtualHost>


খুশী হলাম। আমি পুনঃনির্দেশ ম্যাচ পদ্ধতির পছন্দ করি। আমি সম্ভবত এটির সাথে যাব কারণ এটি সত্যিই এমন একটি পুনর্নির্দেশ যা আমি অর্জন করতে চাই।
ডেভেকোর

1

আমি এই পোস্টটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত করছি।

এ্যাপাচি ডকুমেন্টেশন ব্যাখ্যা দিয়েছে কেন এই আচরণ খুব ভাল ঘটে এবং কারন যে 'RewriteBase' নির্দেশ বিদ্যমান।

আপনার .htaccess ফাইলটিতে কেবল 'রাইরাইটবেস' নির্দেশিকা অন্তর্ভুক্ত করা আপনার পছন্দসই ফলাফলটি অর্জন করা উচিত।

উদাহরণ:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

অ্যাপাচি ২.২ মোড_উরাইট ডকুমেন্টেশন থেকে:

RewritBase নির্দেশাবলী স্পষ্টভাবে প্রতি ডিরেক্টরি পুনর্লিখনের জন্য বেস ইউআরএল সেট করে।

আমার থাম্বের নিয়মটি প্রায় সর্বদা .htaccess ফাইলগুলিতে 'RewritBase' ব্যবহার করা এবং এটি অ্যাপাচি কনফিগারেশনে ব্যবহার না করা।


0

আমার এই সমস্যাটি হ্যান্ডেল করার সময় নেই তাই কেবল পুনরায় লিখুন // টু / :)

RewriteCond %{THE_REQUEST} //
RewriteRule ^(.*)$ http://domain.com [R=301,L]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.