PDA

View Full Version : سوال: ModRewrite



bikran
شنبه 16 فروردین 1393, 10:59 صبح
با سلام خدمت دوستان


ما اين دستور رو داريم



RewriteRule ^(.*)/(.*)$ index.php?action=$1&id=$2 [L,QSA]
حالا وقتي آدرس رو بدون id و به اين شكل ميزنم خطا ميده
www.site.com/search (http://localhost/example/URL/search)


اما اگه اسلش آخر رو بزارم درست ميشه . در صورتي كه من ميخوام بدون اسلش هم كار كنه و action رو برابر search قرار بده و id رو خالي بزاره. آيا ميشه؟

سوال دوم اينه كه وقتي آدرس رو rewrite ميكنيم حتما بايد در همه ي شرايط آدرسها مطلق باشن؟ و ديگه از آدرس دهي نسبي استفاده نكرد؟

و سوال سوم اینکه اگه ممکنه در مورد Flag های [L,QSA] توضیح بدید.


سپاس.

bikran
یک شنبه 17 فروردین 1393, 10:17 صبح
اگر هم مرجع خوبی واسه ساختن Rewite Rule میشناسید راهنمایی بفرمایید.

bikran
پنج شنبه 11 اردیبهشت 1393, 10:43 صبح
دوستان لطفا نظر بدید که آیا میشه همچین کاری کرد یا خیر؟

Mori Bone
پنج شنبه 11 اردیبهشت 1393, 10:51 صبح
http://stackoverflow.com/questions/559186/php-rewrite-rules
صد درصد شما سرچ نکردین و این تاپیک رو ایجاد کردین

bikran
پنج شنبه 11 اردیبهشت 1393, 11:33 صبح
دوست عزیز من میخوام از 2 متغیر در آدرسم استفاده کنم که وارد کردن متغیر دوم اختیاری باشه و کاربر اگه اسلش رو وارد نکرد فقط متغیر اول مقدار دهی بشه و متغیر دوم خالی بمونه

MMSHFE
پنج شنبه 11 اردیبهشت 1393, 11:40 صبح
این دو خط رو بگذارین:

RewriteRule ^(.*)/(.*)$ index.php?action=$1&id=$2 [L,QSA,NC]
RewriteRule ^(.*)$ index.php?action=$1 [L,QSA,NC]

bikran
پنج شنبه 11 اردیبهشت 1393, 13:13 عصر
با تشکر جناب شهرکی
میشه اگه منبع خوبی واسه یادگیری ReWrite Rule میشناسید ، معرفی کنید؟

MMSHFE
پنج شنبه 11 اردیبهشت 1393, 14:09 عصر
کلاً سخت نیست. توی اینترنت دنبال htaccess rewrite rules and conditions جستجو کنید.

MMSHFE
پنج شنبه 11 اردیبهشت 1393, 14:13 عصر
سوال دوم اينه كه وقتي آدرس رو rewrite ميكنيم حتما بايد در همه ي شرايط آدرسها مطلق باشن؟ و ديگه از آدرس دهي نسبي استفاده نكرد؟

نه میتونید با rewritebase آدرس پایه رو مشخص کنید و بر اساس اون، نسبی بدین.

و سوال سوم اینکه اگه ممکنه در مورد Flag های [L,QSA] توضیح بدید.

L یعنی Last : بعضی وقتها ممکنه بیش از یک Rule با یک آدرس تطابق داشته باشه که در اینجا اگه توی یکی از اونها با L نگفته باشین که اون رول آخریه، همیشه آخرین Rule اعمال میشه.
NC یعنی Not Case-sensitive : اگه توی رول بنویسید test شامل Test و TEST و... هم میشه
QSA یعنی Query String Also : اگه یکی بیاد بنویسیه yoursite.com/view/5?name=reza مقدار name هم به آرایه GET_$ ارسال میشه درحالی که اگه QSA رو نگذارین، فقط action و id رو دارین و بقیه نادیده گرفته میشه.

bikran
جمعه 12 اردیبهشت 1393, 12:54 عصر
يك سوال ديگه: اگر ما داخل پوشه اصلي خودمون يك پوشه ديگه به نام suburl داشته باشيم و بخواهيم با يك تگ a بهش منتقل بشيم ، ديگه منتقل نميكنه به اون صفحه و به جاش متغير action رو مقدار دهي ميكنه
Array ( [action] => suburl/index.html )
در صورتي كه آدرسمون هم مطلق هست : http://localhost/URL/suburl/index.html

حتي وقتي يك فايل CSS رو آدرس دهي ميكنم. به صفحه اضافه نميكنه و وقتي View Page Source ميزنم و روي لينك استايلم كليك ميكنم جاي بازكردنش صفحه اصلي رو باز ميكنه.

MMSHFE
جمعه 12 اردیبهشت 1393, 13:14 عصر
این خطوط رو هم قبل از بقیه اضافه کنید:

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