منبع اصلی نوشتار زیر در این لینک قرار دارد

نحوه ری‌دایرکت کردن فیدهای قدیمی

خوب، گفتم شاید بد نباشه که در مورد نحوه فوروارد کردن فید‌های قبلی وبلاگ به این آدرس‌های جدید مطلبی بنویسم. شاید به درد یکی دیگه که بخواد از یه سیستمی به یه سیستم دیگه مهاجرت بکنه بخوره. در واقع این آموزش قدم به قدم mod-rewrite نیست و برای کسی خوبه که آشنایی کلی دارن با این داستان.

فید قبلی وبلاگ این بود:

http://freemind.ir/index.php?/feeds/index.rss2

و فید جدید به این شکل:

http://feeds.feedburner.com/iiriix/FreeMind

آدرس فید قبلی رو نگاه کنید. برای کار مربوط به ما از ۳ بخش تشکیل شده. یکی http://freemind.ir که آدرس دامین رو نشون میده. بخش دوم /index.php که فایل درخواستی روی این دامین رو نشون میده. به تمام عبارت بعد از ? هم متغیرهای درخواست یا Query String گفته میشه که خوب فکر کنم همه می‌دونیم کاربردش چیه. صفحه اصلی با این متغیرها می‌تونه رفتار متفاوتی نشون بده و محتوای مناسب رو به مرورگرمون برگردونه.

من از ماژول mod-rewrite آپاچی برای این کار استفاده کردم. در واقع یه شرط و یه قانون (rule) توی فایل htaccess. نوشتم به این شکل:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^/feeds/index\\.rss2$ [NC]
RewriteRule ^index\\.php$ http://feeds.feedburner.com/iiriix/FreeMind [NC,R=301,L]
</IfModule>

خوب،‌ حالا یه نگاه جزئی‌تر بندازیم به اینها. مهم‌ترین قسمت‌هاش خطوط ۴ و ۵ هستن. بقیه‌اش داستان اضافی و لوس‌بازی هست. :)

  • خط اول: اون تگ IfModule که کد اصلی داخل اون قرار داده شده برای اینه که اگر ماژول mod-rewrite روی آپاچی نصب نیست این تیکه رو کلا نادیده بگیره.

 

  • خط دوم: که مشخص هست و موتور این ماژول رو روشن می‌کنه.

 

  • خط سوم: مشخص می‌کنه که مسیر پیش‌فرضتون برای پیاده‌سازی این دستور کجاست. کاربردش اینه که مثلا اگر بخواهید تو یه سری زیرشاخه این قوانین رو اجرا کنید.

 

  • خط چهارم: این تعریف شرطمون هست. یعنی فقط اگر این شرط درست باشه خط بعدی که خود دستور هست انجام میشه. چی نوشته؟ نوشته که اگر متغیرهای درخواست صفحه دقیقا /feeds/index.rss2 بود دستور پایین رو اجرا کن. این متغیر به فرمت Regular Expression سازگار با پرل نوشته میشه.

 

  • خط پنجم: تو این خط خود دستور قرار داره. تیکه اول که هیچ، میگه من یک دستورم. تیکه دوم خود فایل درخواستی رو معرفی می‌کنه. تو اینجا من نوشتم /index.php به این معنی که اگر اون متغیرها فقط به این صفحه ارسال شدن،‌ قسمت سوم رو در مورد درخواست اجرا کن. مثلا اگر متغیرهای بالا که تو خط چهارم نوشتیم به صفحه mypage.php ارسال بشن دیگه این قاعده در موردش صدق نمی‌کنه. این قسمت هم به شکل همون regex باید نوشته باشه که خوب برای من ساده بود، چون فقط نیاز بود اسم این صفحه رو بنویسم. تیکه سوم خط خود قاعده رو نشون میده. برای من که می‌خوام درخواست فوروارد بشه به آدرس جدید، کافیه آدرس جدید رو اینجا بنویسم. قسمت چهارم هم پرچم‌ها یا flagها رو مشخص می‌کنن. مثلا NC به معنی اینه که تو این قاعده تفاوتی بین حروف بزرگ و کوچیک قائل نشه. R=301 به معنی اینه که من می‌خوام درخواست رو به این صفحه که آدرسش رو دادم فوروارد کنم به شکلی که آدرس جدید تو نوار آدرس مرورگر دیده بشه. اون L هم به معنی این هست که اگر ین قاعده رو روی این درخواست انجام دادی دیگه کار رو ادامه نده و سراغ قاعده‌های بعدی نرو.

این ماژول بسیار قدرتمند هست و اینجا فقط یه کار ساده باهاش انجام دادیم. اگر خواستید mod-rewrite رو یاد بگیرید من این راهنمای خیلی خوب و ساده رو توصیه می‌کنم. به نظرم خیلی ساده و شیوا گفته نحوه کار این ماژول رو. برای کارهای پیشرفته هم که خود مستندات آپاچی رو بخونید.



برچسب ها : , , , , , ,