یکی از بهترین امکاناتی که اپاچی بهتون میده بهش mod_rewrite هستش که باعث میشه سایتتون خیلی تمیزتر بنظر بیاد و به عبارتی SEO بشه !!!
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد
رو در فایل تون قرار بدید
بزارید یک مثال بزنم , میخوایم تمام صفحات پی اچ پی رو تبدیل کنیم به اچ تی ام ال :
در دستور بالا ما گفتیم هر فایل که فرمتش پی اچ پی بود تبدیلش کن به .htm ولی این دلیل براین نیست که فرمت فایل عوض میشه نه!!! بلکه به هردو صورت دسترسی به فایل امکان پذیر هست برای مثال اگه یه فایل file.php داشته باشیم هم میتونیم با اسم file.htm بهش دسترسی پیدا کنیم و هم از file.php .
[nc] : این دستور یعنی No Case یا همون case-insensitive
خوب فرض کنید اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :
301 یعنی مستقیما ریدایرکت شده , دستور بالا زمانی خوبه که یه سایت قدیمی داریم حالا میخوایم update کنیم با این کار حتی موتور های جستجو خودشون اتوماتیک اپدیت میکنن لینک رو !!!
بزارید یخورده جذاب تر کنیم , به این کد نگاه کنید :
بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا اخر .
در مثال بالا برای مثال اگه ما یه فایل در مسیر
داشته باشیم این لینک از ادرس زیر هم در دسترس خواهد بود :
بزارید یه مثال دیگه از همین نوع بزارم :
حالا اگه ادرس ارشیو وبلاگ ما بصورت :
باشه تبدیل میشه به :
به همین سادگی میبینید که با کمی Regular Expression میتونید ادرس هاتون رو خیلی زیباتر کنید چند تا راهنما براتون میزارم تا راحت تر بتونید استفاده کنید :
بزارید یه مثال دیگه بزنیم
در مثال بالا ما گفتیم هر ادرسی که بعد از download.php قرار گرفت تبدیلش کنه به ادرس برای مثال
اگه ادرسمون اینجوری باشه :
تبدیل میشه به :
در مثال بعدی میخوایم دسترسی به پوشه هارو بگیریم از کاربر
تو قسمت بالا اگه کاربر بخواد به هر نحوی وارد یه پوشه بشه ریدایرکت میشه به deny.php
بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه ارور بده :
تو دستور بالا ما گفتیم فقط به فایل های سی اس اس و جی اس و فایل file.php اجازه بده که توسط کاربر فراخوانی بشه در غیر اینصورت ریدایرکت کنش به پوشه /deny/ .
بزارید تو مثال بعدی قضیه HotLinking رو بگیم :
خوب فکر نمیکنم زیاد لازم به توضیح باشه کد بالا هر درخواستی رو که برای لود کردن عکس با فرمت gif,jpg,png از یه سایت دیگه باشه عکس http://Persiandev.net/hotlink.gif نمایش داده میشه .
اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :
در واقع یه نوع ریدایرکت هستش البته از نوع peremantly moved .
ترجمه سایت :
در کد بالا در صورتی که به اخر یک لینک یا ادرس یکی از کلمات de , -fr , -pr, -it- اضافه بشه توسط گوگل میتونید ترجمه کنید .
عوض کردن نوع لینک برای مثال نوع ادرس عکس :
نویسنده : مهدی صفری
[mehdisafary<@>yahoo.com]
تو هرجایی که شما بخواید از mod_rewrite استفاده کنید نیاز دارید که کد
PHP:
Options +FollowSymlinks
RewriteEngine on
بزارید یک مثال بزنم , میخوایم تمام صفحات پی اچ پی رو تبدیل کنیم به اچ تی ام ال :
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\.htm$ $1.php [nc]
[nc] : این دستور یعنی No Case یا همون case-insensitive
خوب فرض کنید اسم دومینمون رو عوض کردیم ولی فایل هامون همون قبلی ها هستن و میخوایم هرکسی تو دومین اولی یک فایل رو فراخوانی کرد ما همون فایل رو تو دومین دوم صدا بزنیم اینجور عمل میکنیم :
PHP:
Options +FollowSymlinks
rewriteengine on
rewriterule ^(.+)\.htm$ http://persiandev.net/$1.php [r=301,nc]
بزارید یخورده جذاب تر کنیم , به این کد نگاه کنید :
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^myfiles/(.+)/(.+).zip download.php?section=$1&filename=$2 [nc]
بزارید ساده بگم اگه شما عبارت (.+) رو مساوی با 1$ فرض کنیم ( 1$=(.+) )ما میتونیم چندین بار از این عبارت استفاده کنیم به این صورت که بار اول که از (.+) استفاده میکنیم مساوی با 1$ میگیریم در دفعه دوم مساوی با 2$ میگیریم و همینطور الا اخر .
در مثال بالا برای مثال اگه ما یه فایل در مسیر
کد:
http://Persiandev.net/download.php?section=appz&filename=Mehdi
کد:
http://Persiandev.net/myfiles/appz/Mehdi.zip
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^blog/([0-9]+)-([a-z]+) http://Persiandev.net/blog/index.php?archive=$1-$2 [nc]
کد:
http://Persiandev.net/blog/index.php?archive=2006-aug
کد:
http://Persiandev.net/blog/2006-aug
PHP:
. Any single character
[chars] یکی ار کاراکترها میتونه این باشه برای مثال [A]
[^chars] هیج یک از این کاراکتر ها نباشه برای مثال [^A]
text1|text2 همون کار or رو انجام میده
Quantifiers:
? میتونه یک کاراکتر باشه و یا هیچ کاراکتری
* هرچیزی میتونه باشه حتی اگه چیزی وجود نداشته باشه
+ حداقل یک کاراکتر وجود دارد
Grouping:
(text) برای ساختن گروه بکار میره
Anchors:
^ شروع
$ پایان
Escaping:
\char برای مثال برای درنظر نگرفتن علائمی مثل [] یا . یا غیره هست در این مواقع به عنوان دستور در نظر نمیگیره
بزارید یه مثال دیگه بزنیم
PHP:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^get(.*) /public/download/download.php$1
اگه ادرسمون اینجوری باشه :
کد:
http://Persiandev.net/downloads/download.php?myfile=Mehdi.zip
کد:
http://Persaindev.net/Get?myfile=Mehdi.zip
در مثال بعدی میخوایم دسترسی به پوشه هارو بگیریم از کاربر
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)$ deny.php [nc]
بزارید در مثال بعدی کاری کنیم که فقط به فایل های خاصی دسترسی داشته باشه و بجز اون هر فایلی خواست باز کنه ارور بده :
PHP:
Options +FollowSymlinks
RewriteEngine On
rewritecond %{REQUEST_FILENAME} !^(.+)\.css$
rewritecond %{REQUEST_FILENAME} !^(.+)\.js$
rewritecond %{REQUEST_FILENAME} !file.php$
RewriteRule ^(.+)$ /deny/ [nc]
بزارید تو مثال بعدی قضیه HotLinking رو بگیم :
PHP:
Options +FollowSymlinks
# no hot-linking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?Persiandev\.net/ [nc]
RewriteRule .*\.(gif|jpg|png)$ http://Persiandev.net/hotlink.gif [nc]
اضافه کردن WWW به ادرس سایت :
این کد این کار رو براتون میکنه :
PHP:
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^www\.Persiandev\.net [nc]
rewriterule ^(.*)$ http://Persiandev.net/$1 [r=301,nc]
ترجمه سایت :
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)-fr$ http://www.google.com/translate_c?hl=fr&sl=en&u=http://Persiandev.net/$1 [r,nc]
RewriteRule ^(.*)-de$ http://www.google.com/translate_c?hl=de&sl=en&u=http://Persiandev.net/$1 [r,nc]
RewriteRule ^(.*)-es$ http://www.google.com/translate_c?hl=es&sl=en&u=http://Persiandev.net/$1 [r,nc]
RewriteRule ^(.*)-it$ http://www.google.com/translate_c?hl=it&sl=en&u=http://Persiandev.net/$1 [r,nc]
RewriteRule ^(.*)-pt$ http://www.google.com/translate_c?hl=pt&sl=en&u=http://Persiandev.net/$1 [r,nc]
عوض کردن نوع لینک برای مثال نوع ادرس عکس :
PHP:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^pictures/(.*) http://Persiandev.net/getpicture.php?$1 [r]
نویسنده : مهدی صفری
[mehdisafary<@>yahoo.com]