rewrite module

پرسیده شده
فعالیت 1494 روز پیش
دیده شده 875 بار
0

سلام وقت بخیر

در مورد ماژول rewrite سوال دارم که چطور برای customize کردن url استفاده می شود.

فایل پیوست

هاجر اسدالله پور
هاجر اسدالله پور

7 فروردین 99

2

مورد تایید استاد

حذف شده

سلام.

اگر ماژول rewrite داخل تنظیمات آپاچی، کامنت هست، از کامنت خارج کنید و آپاچی رو ریستارت کنید:

LoadModule rewrite_module modules/mod_rewrite.so

 

برای اینکه آدرس های سایتتون رو اصطلاحاً user-friendly کنید، یک فایل .htaccess داخل روت پروژتون ایجاد کنید.

ابتدا با دستور زیر ماژول رو فعال کنید:

RewriteEngine On

 

در خطوط بعدی میتونید قوانین آدرس هاتون رو بذارید.

فرم کلیه قوانین به شکل زیره:

RewriteRule pattern substitution [flags]

pattern: این همون رشته ایه که کاربر داخل مرورگرش وارد میکنه و شما الگورو با regex مشخص میکنید.

substitution: مسیر اصلیه سایت هست. در واقع این آدرس در سایتتون وجود داره و pattern در صورت تطبیق، باید به این آدرس ریدایرکت شه.

flags: تعیین میکنه RewriteRule چگونه کار کنه.(رفتار rule رو مشخص میکنه و اختیاریه)

 

داخل پروژتون فایلی دارید به نام about.php:

اگر بخواهید این صفحه رو باز کنید، باید در مرورگر http://example.com/about.php وارد کنید.

حالا میخواهید به وب سرور آپاچی بگید، اگر about خالی هم تایپ شد، باز هم about.php باز شود:

RewriteEngine on
RewriteRule ^about$ about.php [NC]

pattern: مشخص میکنه که با a شروع بشه و در ادامه bout و با t تمام بشه. یعنی فقط کلمه ی about نوشته شده باشه. اگر الگو صحیح بود به about.php ریدایرکت شه.

* علامت $ انتهای url رو نشون میده. (در خود regex هم به معنی پایان الگو است.)

* فلگ NC بمعنای No Case هست و به حروف بزرگ و کوچیک حساس نیست.

با توجه به رول بالا، تمام آدرس های زیر، به یک صفحه ختم میشه:

http://example.com/about
http://example.com/About
http://example.com/about.php

* پترن به رشته ی بعد از domain-name/ اشاره میکنه:

http://example.com/++pattern++

 

اگر بخواهید برای صفحات مجزا رول های دیگه هم اضافه کنید، میتونید زیر هم رول هارو بنویسید.

یک مثال دیگه:

آدرسی داریم به فرم http://example.com/index.php?id=2

میخواهیم تبدیل شود به فرم: http://example.com/blog/2

RewriteEngine on
RewriteRule ^blog/(\d+)/?$ index.php?id=$1 [QSA,L,NC]

(\d+) : اشاره به رشته ی عدد با حداقل طول یک کاراکتر.

/? : انتهای url(در اینجا بعد عدد) میتونه / بیاد یا نیاد. (؟ اشاره به یکدونه یا هیچی)

$1 : اشاره به رشته ی داخل پرانتز (اگر بعد ازین پرانتز، پرانتز دومی هم داشتیم $2 به پرانتز دوم اشاره میکرد.)

فلگ QSA: میشه به لینک با & یک کوئری استرینگ دیگه append کرد.

فلگ L: به معنای Last که اگر این رول با url مطابقت داشت، پردازش متوقف شود و رول های دیگر بررسی نشود.

 

یک مثال دیگه:

فرم کلی آدرس:

http://example.com/index.php?r=controller/action/id

میخواهید این فرمها جواب بده:

-- http://example.com/index.php?r=controller

-- http://example.com/index.php?r=controller/action

--http://example.com/index.php?r=controller/action/id

رول به شکل زیر است:

RewriteRule ^(.+)$ index.php?r=$1 [L,NC,QSA]

هر رشته ای با هر شکلی که در url نوشته شود بعنوان مقدار r پاس داده میشود.

 

یه سری دستورات دیگه هم وجود داره مثل RewriteCond که میتوانیم قبل از چک شدن یک رول، چندین Condition رو زیر هم بیاریم و در صورتی که شرط ها برقرار بود، بره سراغ رول و ...

 

* تمام این مراحل داخل فایل کانفیگ سرور هم میشه انجام داد ولی ازونجا که اغلب سایت ها روی هاست های اشتراکی است که دسترسی به فایل اصلی تنظیمات وجود نداره و همچنین روی سیستم هم اغلب چندین پروژه روی ومپ سرور و ... ران میکنیم، بنابراین از فایل .htaccess استفاده میکنیم. این فایل، داخل فایل اصلی تنظیمات وب سرور، فراخوانی شده است.

 

موارد کلی رو بصورت کوتاه اوردم. برای اینکه بیشتر آشنا بشید، مقالات انگلیسی رو سرچ بزنید، توضیحات بیشتری پیدا میکنید.

فایل پیوست

محسن موحد

توسط

محسن موحد

8 فروردین 99

0
حذف شده

چرا ویرایش پست، حذف میشه؟!!!

این قسمت:

-- http://example.com/index.php?r=controller

-- http://example.com/index.php?r=controller/action

-- http://example.com/index.php?r=controller/action/id

باید اصلاح بشه به فرم زیر:

-- http://example.com/controller

-- http://example.com/controller/action

-- http://example.com/controller/action/id

* index.php?r= باید حذف شه.

فایل پیوست

محسن موحد

توسط

محسن موحد

8 فروردین 99

حذف شده
سلام محسن جان ویرایش پست تا یک ساعت امکان پذیر هست. به تیم دولوپ انتقال دادیم که به ۲۴ ساعت افزایش بدن
لقمان آوند

11 فروردین 99