PDA

View Full Version : سوال : مفهوم mod_rewrite چیست؟



davoodi
دوشنبه 25 دی 1391, 10:32 صبح
سلام.
تاپیک های مربوط به pretty urls رو خوندم اما یه مقدار گیج شدم.
مبحث mod_rewrite واقعا چکار میکنه ؟
آیا فقط آدرس های مارو تبدیل میکنه به آدرس های خوانا ؟
یا علاوه بر این کار ما باید کل سایت رو براساس اون بازنویسی کنیم؟

اجازه بدید بیشتر توضیح بدم.
من یک سایت دارم که با php نوشته شده.
ارسال پارامتر ها هم بصورت معمولی انجام شده.
(آدرس ها به صورت روبرو است : http://mysite.com/index.php?user=1&page=6&date=1391 (http://mysite.com/index.php?user1&page=6&date=1391) )
حالا میخوام با استفاده از mod_rewrite آدرس های سایت رو حرفه ای تر کنم که هم برای seo سایت خوب باشه هم ظاهر ساده تری داشته باشه.
اما نمیدونم بعد از تبدیل ادرس ها چطور باید با پارامتر $_get کار کنم. چونکه همه این پارامتر ها غیرفعال میشن و دیگه سایت کار نمیکنه!!!

اگر امکان داره بنده رو راهنمایی فرمایید.

بسیار ممنونم.
موفق تر باشد.

davoodi
دوشنبه 25 دی 1391, 15:01 عصر
از اساتید محترم لطفا یکی کمک کنه مشکل من هم حل بشه انشالله.

Unique
دوشنبه 25 دی 1391, 17:28 عصر
دوست عزیز mod_rewrite از اسمش معلومه چیکار میکنه ! میاد و آدرس هایی که کاربر درخواست کرده را rewrite یا دوباره نویسی میکنه تا برنامه شما همون مقادیر get را از آدرس بخونه یا مسیرش اصلاح بشه :

مثلا آدرس زیر که قابل تفسیر نیست ! یعنی همچین مسیر دهی وجود نداره :
http://mysite.com/1/6/1391

mod_rewrite میاد و بر اساس reqular expression های شما توی htaccess که در قالب rule ها اعمال میشوند این آدرس را شناسایی میکنه و تبدیلش میکنه به :
http://mysite.com/index.php?user=1&page=6&date=1391

حالا برای برنامه شما معنی داره !

arashgolzadi
چهارشنبه 27 دی 1391, 00:25 صبح
سلام
من میخوام آدرس request_uri ایجاد کنم
این کار رو از طریق کد زیر در فایل htaccess انجام دادم

--------------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php [L]
</IfModule>
--------------------------------------------------------------------

اما مشکل بزرگی که دارم اینه که،
آدرس دایرکتوری داخلی فایلهایی که فراخوان میشن عوض میشه

برای مثال هر صفحه در سایت من یک فایل هست،
که هر کدوم css و js مربوط به خودش رو داره
اما وقتی آدرس سایت من مثلا از

www.my-site.com

به

www.my-site.com/category/post

تغییر میکنه (که در واقع این url به request_uri مبدل شده و بجای get ازش استفاده میکنم)
برنامه، بدنبال این فایلها در مسیر جدید میگرده

اما من میخوام حتی اگه request_uri در آدرس بار باشه،
مسیر اصلی برنامه همون www.my-site.com باشه که این مشکل برام ایجاد نشه.
در واقع فایل های css و js من دیگه فراخوان نمیشه و صفحه ناقص لود میشه

امیدوارم تونسته باشم منظورم رو برسونم

سپاسگزار میشم اگه بنده رو راهنمایی بفرمایید

با تشکر و سپاس فراوان از شما گرانقدران

Unique
چهارشنبه 27 دی 1391, 15:42 عصر
دوست عزیز معمولا در زمان mod_rewrite میان و js و css ها را مستقیم صدا میزنند و نه نسبی ، مگه اینکه بشینین و برای اونها هم condition تعریف کنید و rule بنویسین که ارزشش را به نظر من نداره و بهتره مستقیم آدرس دهی بشه یعنی relative نباشه و absolute باشه !

arashgolzadi
جمعه 29 دی 1391, 11:32 صبح
مشکل فقط js و css نیست
سایت من بصورت آژاکس کار میکنه و تا کنون نمی شد برای دسترسی به صفحاتش از لینک مستقیم اون صفحه استفاده کرد
در سیستم جدید این کار رو دارم انجام میدم اما نمیخوامم از GET استفاده کنم
برای همین از request_uri استفاده میکنم که هم زیبا تره و هم برای seo بهتره
اما این مشکل بوجود اومده
مخصوصا وقتی uri ها به دو یا چند تا بیشتر میرسه
اونوقت مشکلات خیلی زیادی در آدرس دهی بوجود میاد
میخواستم تنظیماتی که در htaccess هست و میتونه این مشکل رو با ثابت نگه داشتن آدرس اصلی حل میکنه رو بدونم
سپاس فراوان

Unique
جمعه 29 دی 1391, 12:09 عصر
ببینید همونطور که گفتم باید آدرس هایی که ربطی به mod_rewrite نداره را مستقیم بدین نه نسبی بقیه را هم با rewrite_mod انجام بدیم ! همون آدرس های ajax با get که url را توی address bar میزنید فرقی نداره ، اگه باز هم مشکل دارین مثال عملی بزنید دقیقا اشاره کنید مشکل چیه.

rezaonline.net
جمعه 29 دی 1391, 14:48 عصر
اینجا رو بخونید
http://rezaonline.net/blog/post/21