অ্যাপাচি মোড_উরাইট
আপনি যা খুঁজছেন তা হল মোড_উইরাইট ,
বিবরণ: ফ্লাইতে অনুরোধ করা ইউআরএলগুলি পুনরায় লেখার জন্য একটি নিয়ম-ভিত্তিক পুনর্লিখন ইঞ্জিন সরবরাহ করে।
সাধারণভাবে বলতে গেলে, mod_rewriteনির্দিষ্ট নিয়মিত অভিব্যক্তির বিপরীতে অনুরোধ করা দস্তাবেজটি মিলিয়ে কাজ করে, তারপরে অভ্যন্তরীণভাবে (অ্যাপাচি প্রক্রিয়াটির মধ্যে) বা বাহ্যিকভাবে (ক্লায়েন্ট ব্রাউজারে) ইউআরএল পুনর্লিখন করে। এই পুনর্লিখনগুলি অভ্যন্তরীণভাবে উদাহরণ.ফু / বারের জন্য একটি অনুরোধ হিসাবে উদাহরণ.com/foo অনুবাদ করার মতোই সহজ হতে পারে।
অ্যাপাচি ডক্সে একটি mod_rewriteগাইড অন্তর্ভুক্ত রয়েছে এবং আমি মনে করি আপনি করতে চান এমন কিছু বিষয় এতে আবৃত। বিস্তারিত মোড_উইরাইট গাইড ।
ফোর্স wwwসাবডোমেন
আমি এটি প্রতিটি url এর আগে "www" চাপিয়ে দিতে চাই, সুতরাং এটি ডোমেইন ডটকম নয় বরং www.domain.com/page page
পুনর্লিখনের নির্দেশিকায় ক্যানোনিকাল হোস্টনেম উদাহরণ অনুসারে এর জন্য নির্দেশাবলী অন্তর্ভুক্ত রয়েছে ।
ট্রেলিং স্ল্যাশগুলি সরান (পর্ব 1)
আমি পৃষ্ঠা থেকে সমস্ত অনুসরণীয় স্ল্যাশ সরিয়ে ফেলতে চাই
আমি নিশ্চিত নই যে আপনি কেন এটি করতে চাইবেন কারণ পুনর্লিখনের গাইডটিতে হুবহু বিপরীত উদাহরণ রয়েছে , যেমন সর্বদা একটি পিছনের স্ল্যাশ সহ। দস্তাবেজগুলি পরামর্শ দেয় যে পিছনে স্ল্যাশ সরিয়ে ফেলার সমস্যা সৃষ্টির দুর্দান্ত সম্ভাবনা রয়েছে:
ট্রেলিং স্ল্যাশ সমস্যা
বর্ণনা:
প্রতিটি ওয়েবমাস্টার ইউআরএলস রেফারেন্সিং ডিরেক্টরিতে পিছনে স্ল্যাশের সমস্যা সম্পর্কে একটি গান গাইতে পারে। যদি সেগুলি অনুপস্থিত থাকে তবে সার্ভারটি একটি ত্রুটি ডাম্প করে, কারণ আপনি যদি এর /~quux/fooপরিবর্তে বলেন /~quux/foo/
তবে সার্ভার foo নামের একটি ফাইল অনুসন্ধান করে। এবং এই ফাইলটি একটি ডিরেক্টরি এটি অভিযোগ করে। আসলে এটি বেশিরভাগ ক্ষেত্রে এটিকে নিজেই ঠিক করার চেষ্টা করে, তবে কখনও কখনও এই প্রক্রিয়াটি আপনার দ্বারা অনুকরণ করা প্রয়োজন। উদাহরণস্বরূপ আপনি সিজিআই স্ক্রিপ্টগুলিতে অনেকগুলি জটিল ইউআরএল পুনর্লিখনগুলি করার পরে etc.
আপনি কেন পুরোপুরি পিছনে থাকা স্ল্যাশটি মুছে ফেলতে চান তা নিয়ে আপনি প্রসারিত করতে পারেন?
.phpএক্সটেনশন সরান
.Php অপসারণ করার জন্য আমার এটি দরকার
এটি করার সবচেয়ে কাছের জিনিসটি যা আমি ভাবতে পারি তা হ'ল অভ্যন্তরীণভাবে একটি পিএইচপি এক্সটেনশন সহ প্রতিটি অনুরোধ ডকুমেন্টকে পুনরায় লিখন করা, উদাহরণস্বরূপ, ডটকম / সোমপেজের পরিবর্তে উদাহরণস্বরূপ.com/somepage.php এর অনুরোধ হিসাবে প্রক্রিয়া করা হয়। নোট করুন যে এই পদ্ধতিতে অগ্রসর হওয়ার জন্য প্রতিটি সিস্টেমে আসলে ফাইল সিস্টেমে কিছু পৃষ্ঠাগুলি উপস্থিত থাকতে পারে ph
নিয়মিত প্রকাশের সঠিক সংমিশ্রণের সাথে এটি কিছুটা সম্ভব হওয়া উচিত should যাইহোক, আমি সূচী পৃষ্ঠাগুলি সঠিকভাবে অনুরোধ করা হচ্ছে না এবং ডিরেক্টরিগুলি সঠিকভাবে মেলে না এমন কিছু সম্ভাব্য সমস্যাগুলির পূর্বেই ধারণা করতে পারি।
উদাহরণস্বরূপ, উদাহরণস্বরূপ এটি একটি অনুরোধ হিসাবে example.com / টেক্সট পুনঃলিখন করবে:
RewriteEngine on
RewriteRule ^(.*)$ $1.php
উদাহরণস্বরূপ ডটকম লোড করতে ব্যর্থ করে দেবে কারণ এখানে কোন উদাহরণ.com/.php নেই
আমি অনুমান করতে চলেছি যে আপনি যদি সমস্ত পেছনের স্ল্যাশগুলি অপসারণ করেন তবে পিতামাতার ডিরেক্টরিতে ফাইলের জন্য একটি অনুরোধ থেকে ডিরেক্টরি সূচকের জন্য একটি অনুরোধ বাছাই করা প্রায় অসম্ভব হয়ে যাবে। ডিরেক্টরি 'foobar' জন্য আপনি কীভাবে একটি অনুরোধ নির্ধারণ করবেন:
example.com/foobar
foobar নামক কোনও ফাইলের অনুরোধ থেকে (যা আসলে foobar.php)
example.com/foobar
আপনি যদি RewriteBaseনির্দেশটি ব্যবহার করেন তবে এটি সম্ভবত সম্ভব । তবে যদি আপনি এটি করেন তবে এই সমস্যাটি আরও জটিল হয়ে RewriteCondউঠবে কারণ আপনি কোনও ডিরেক্টরি বা কোনও ফাইলের জন্য অনুরোধের মানচিত্র কিনা তা ফাইল সিস্টেমের স্তরের চেক করার জন্য নির্দেশনা প্রয়োজন ।
এটি বলে, যদি আপনি সমস্ত লেজযুক্ত স্ল্যাশগুলি অপসারণের প্রয়োজনীয়তা সরিয়ে ফেলেন এবং এর পরিবর্তে জোর-সংযুক্ত ট্রেলিং স্ল্যাশগুলি "না। পিএফপি এক্সটেনশন" সমস্যাটি কিছুটা যুক্তিসঙ্গত হয়ে ওঠে।
# Turn on the rewrite engine
RewriteEngine on
# If the request doesn't end in .php (Case insensitive) continue processing rules
RewriteCond %{REQUEST_URI} !\.php$ [NC]
# If the request doesn't end in a slash continue processing the rules
RewriteCond %{REQUEST_URI} [^/]$
# Rewrite the request with a .php extension. L means this is the 'Last' rule
RewriteRule ^(.*)$ $1.php [L]
এটি এখনও নিখুঁত নয় - কোনও ফাইলের প্রতিটি অনুরোধের অভ্যন্তরীণভাবে অনুরোধের সাথে .php যুক্ত হয়। 'Hi.txt' এর জন্য একটি অনুরোধ এটি আপনার ত্রুটিযুক্ত লগগুলিতে রাখবে:
[Tue Oct 26 18:12:52 2010] [error] [client 71.61.190.56] script '/var/www/test.peopleareducks.com/rewrite/hi.txt.php' not found or unable to stat
তবে আরও একটি বিকল্প রয়েছে, এর মতো নির্দেশাবলী DefaultTypeএবং সেট করুন DirectoryIndex:
DefaultType application/x-httpd-php
DirectoryIndex index.php index.html
2013-10-14 আপডেট করুন - নিকোরেলিয়াসের পর্যবেক্ষণকে সংযুক্ত করতে উপরের স্নিপেটটি স্থির করে
এখন হাই.এসটিএসটি (এবং অন্য যে কোনও কিছু) জন্য অনুরোধ সফল হয়েছে, উদাহরণ.টেষ্ট / অনুরোধের অনুরোধগুলি টেস্ট.এফপি এর প্রক্রিয়াযুক্ত সংস্করণটি ফিরিয়ে দেবে, এবং সূচি.এফপিপি ফাইলগুলি আবার কাজ করবে।
এই সমাধানের জন্য ক্রেডিট দেওয়ার জন্য যেখানে অবশ্যই ক্রেডিট দিতে হবে আমি পিএইচপি কোনও এক্সটেনশন অ্যাপাচি গুগল অনুসন্ধান করে মাইকেল জে। রেডউইনস ব্লগকে খুঁজে পেয়েছি ।
ট্রেলিং স্ল্যাশগুলি সরান
কিছু অনুসন্ধান apache remove trailing slashesআমাকে কিছু অনুসন্ধান ইঞ্জিন অপ্টিমাইজেশন পৃষ্ঠাগুলিতে নিয়ে আসে। স্পষ্টতই কিছু বিষয়বস্তু পরিচালনা সিস্টেম (এই ক্ষেত্রে দ্রুপাল) ইউআরএলএসে এবং এর পিছনে পিছনে থাকা কোনও স্ল্যাশ ছাড়াই সামগ্রী সরবরাহ করবে, যা এসইও বিশ্বে আপনার সাইটের ডুপ্লিকেট সামগ্রী জরিমানার কারণ হতে পারে। সূত্র
সমাধানটি মোটামুটি তুচ্ছ মনে হয়, mod_rewriteআমরা অনুরোধ করা সংস্থানটি যে অবস্থায় শেষ হয় /এবং 301 Permanent Redirectএইচটিটিপি শিরোনামটি ফেরত পাঠিয়ে ইউআরএল পুনর্লিখন করে সেই শর্তে পুনর্লিখন ব্যবহার করে ।
এখানে তার উদাহরণ যা ধরে নিয়েছে আপনার ডোমেনটি ব্লেমকাস্ট.এনএল এবং অনুরোধটি allyচ্ছিকভাবে প্রিফিক্স করার অনুমতি দেয় www.।
#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?blamcast\.net$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
এখন আমরা কোথাও পাচ্ছি। এগুলি সমস্ত একসাথে রাখুন এবং দেখতে দেখতে এটি কেমন দেখাচ্ছে।
বাধ্যতামূলক www., না .phpএবং কোনও পিছনে টুকরো টুকরো টুকরো না
এটি ধরে নিয়েছে ডোমেনটি foobar.com এবং এটি স্ট্যান্ডার্ড পোর্ট ৮০ এ চলছে।
# Process all files as PHP by default
DefaultType application/x-httpd-php
# Fix sub-directory requests by allowing 'index' as a DirectoryIndex value
DirectoryIndex index index.html
# Force the domain to load with the www subdomain prefix
# If the request doesn't start with www...
RewriteCond %{HTTP_HOST} !^www\.foobar\.com [NC]
# And the site name isn't empty
RewriteCond %{HTTP_HOST} !^$
# Finally rewrite the request: end of rules, don't escape the output, and force a 301 redirect
RewriteRule ^/?(.*) http://www.foobar.com/$1 [L,R,NE]
#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?foobar\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
RewriteRuleনির্দেশক বিভাগে 'আর' পতাকা বর্ণিত হয়েছে । স্নিপেট:
redirect|R [=code](জোর করে পুনর্নির্দেশ) বাহ্যিক পুনঃনির্দেশকে বাধ্য করতে প্রিফিক্স সাবস্টিটিউশন
http://thishost[:thisport]/(যা নতুন ইউআরএলকে ইউআরআই করে তোলে) দিয়ে। যদি কোনও কোড দেওয়া না হয় তবে 302 ( মুভিড স্মরণীয় ) এর একটি HTTP প্রতিক্রিয়া ফিরে আসবে।
চূড়ান্ত নোট
আমি সফলভাবে কাজ করতে স্ল্যাশ অপসারণ পেতে সক্ষম হইনি। পুনর্নির্দেশটি আমাকে অসীম পুনর্নির্দেশ লুপগুলি দিয়ে শেষ করে। মূল সমাধানটি কাছাকাছি পড়ার পরে আমি এই ধারণাটি পেয়েছি যে উপরোক্ত উদাহরণটি তাদের জন্য কাজ করে কারণ কীভাবে তাদের দ্রুপাল ইনস্টলেশনটি কনফিগার করা আছে। তিনি বিশেষভাবে উল্লেখ করেছেন:
একটি সাধারণ ড্রুপাল সাইটে, পরিষ্কার ইউআরএল সক্ষম করে, এই দুটি ঠিকানা মূলত বিনিময়যোগ্য
কোনও স্ল্যাশ ছাড়াই এবং ছাড়াই শেষ হওয়া URL গুলি reference তদ্ব্যতীত,
.htaccessআপনার ওয়েব সার্ভারকে ইউআরএল কীভাবে পরিচালনা করতে হয় তা জানানোর জন্য ড্রুপাল একটি ফাইল ব্যবহার করে । এটি একই ফাইল যা দ্রুপালের ক্লিন ইউআরএল যাদুটিকে সক্ষম করে। আপনার .htaccessফাইলের শুরুতে একটি সাধারণ পুনর্নির্দেশ কমান্ড যুক্ত করে আপনি
সার্ভারটিকে যেকোন পিছনের স্ল্যাশ স্বয়ংক্রিয়ভাবে অপসারণ করতে বাধ্য করতে পারেন।