আমি কীভাবে সমস্ত ইউআরএল একক পিএইচপি ফাইলের মাধ্যমে চালিত করব?


9

এমভিসি সিস্টেমগুলি যেখানে url গুলি এই ফর্মগুলিতে থাকে সেগুলি কীভাবে একক সূচক.এফপি ফাইলের মাধ্যমে সমস্ত অনুরোধকে বাধ্য করে?

http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you

সম্পাদনা: যখন আমি নীচে পুনর্লিখনের নিয়মগুলি চেষ্টা করি তখন আমি এই ত্রুটিটি পাই:

[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1

সম্পাদনা: ওহ, এটি /index.php এর সম্পূর্ণ সামগ্রী। আমি যখন পুনর্লিখনের নিয়মগুলি সরিয়ে ফেলি তখন এটি '/' বা '/index.php' আউটপুট দেয় বা অন্য কোনও কিছুর জন্য আমি 404 পাই।

<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>

সলভড: আমি পুনর্লিখনের নিয়মে সূচি.এফপি এর সামনে একটি / যোগ করেছি এবং তারপরে এটি কাজ করেছে:

সলভড অ্যাগেইইন: কেবলমাত্র প্রয়োজন ছিল / চালু হয়েছিল কারণ আমি ২.২.৪ চালাচ্ছি। আমি যখন ২.২.১১ এ আপগ্রেড করেছি তখন / এর আর প্রয়োজন হয় না।


আপনি কোন নিয়মের সেট ব্যবহার করেছেন? আমি উভয়ের চেষ্টা করেছি এবং দুজনেই ভাল কাজ করছি। আপনি কি মোড_উইরাইট সক্রিয় করেছেন তা নিশ্চিত?
ম্যানুয়েল ফক্স

মোড_উইরাইট সক্রিয় না থাকলে সার্ভার শুরু হবে না। এটি যদি গুরুত্বপূর্ণ হয় তবে এটি WinXP এ অ্যাপাচি ২.২।
jmucchiello

উত্তর:


12

আপনি যদি অ্যাপাচি ব্যবহার করে থাকেন তবে এর মাধ্যমে পুনরায় লেখাগুলি ব্যবহার করুন mod_rewrite:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

এটি আপনার URL গুলি «index.php? Q = foo / bar / baz« স্বচ্ছভাবে পুনর্লিখন করবে w

২ এবং ৩ লাইন পুনরায় লেখক ইঞ্জিনকে ইউআরএল পুনর্লিখন না করতে বলে যদি এটি কোনও বিদ্যমান ফাইল বা ডিরেক্টরিতে নির্দেশ করে। এটি httpd সার্ভার দ্বারা সরবরাহিত আসল ফাইলগুলিতে অ্যাক্সেস থাকা প্রয়োজন।


উপরে সম্পাদনা দেখুন। ত্রুটি 400
হওয়া

আপনি সার্ভারে ঠিক অনুরোধটি কী পাঠিয়েছিলেন? আপনার সার্ভারে মোড_উইরাইট ইনস্টল করা আছে? আমার ধারণা তাই, কারণ অন্যথায় এটি একটি সিনট্যাক্স ত্রুটির কারণে শুরু হবে না।
ম্যানুয়েল ফক্স

সম্পাদনাটি সঠিক অনুরোধটি দেখায়: লোকালহোস্ট: 8181 এবং লোকালহোস্ট: 8181 / abc । আমি যদি পুনর্লিখনের নিয়মগুলি সরিয়ে ফেলি তবে আমি আমার সূচকগুলি / পিএফপি এবং / এবিসি সহ একটি সাধারণ 404 পাই।
jmucchiello

আমি index.php এর সামনে একটি / যোগ করেছি এবং এটি সমস্যার সমাধান করেছে।
jmucchiello

রহস্যময় ... আমি স্ল্যাশ ছাড়াই পরীক্ষা করেছি এবং এটি আমার জন্য অ্যাপাচি -২.২.১১-৮ নিয়ে কাজ করেছে।
ম্যানুয়েল ফক্স

1

নীচের কোডটি সমস্ত ইউআরএলগুলিকে পুনর্লিখনের জন্য অ্যাডাকে মোড_উইরাইট ব্যবহার করে যা সূচক ফাইল বা ডিরেক্টরিতে সূচক না করে ইন্ডেক্স.এফপি তে ম্যাপ করা যায়। শেষ ফলাফলটি হবে:

http://www.example.com/index.php/foo/bar/baz
http://www.example.com/index.php/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/index.php/hey/you

পুনর্লিখনের নিয়ম:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [PT,L,QSA]

ব্যাখ্যা:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

উপরের দুটি লাইনই হুকুম দেয় যে এই নিয়মটি নিয়মিত ফাইল (-f) বা ডিরেক্টরিতে (-d) প্রযোজ্য নয়।

RewriteRule ^(.*)$ index.php/$1 [PT,L,QSA]

: কিভাবে mod_rewrite নিয়ম তৈরি করতে আরও তথ্য Apache ওয়েব সাইট থেকে সংগৃহীত করা যাবে http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html


উপরে সম্পাদনা দেখুন। ত্রুটি 400
হওয়া

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