ریدایرکت آدرس های سایت از طریق فایل htaccess

1 1 1 1 1 1 1 1 1 1 Rating 0.00 (0 Votes)

امتیاز کاربران

ستاره فعالستاره فعالستاره فعالستاره فعالستاره فعال
 

به طور پیش فرض وب سایت شما با www و بدون www در دسترس است. یعنی با هر دو آدرس www.domain.com و domain.com . حال از آنجایی که محتوای کپی در وب سایت ها توسط گوگل جریمه میشود، بنابراین باید اقدامی صورت گیرد تا وب سایت تنها با یکی از این دو آدرس در دسترس باشد. البته ممکن است که هر دو آدرس شما توسط موتورهای جستجو ایندکس شده باشد ولی بهتر است که اقدام کرده و از طریق فایل htaccess داخل هاست خود تعیین نمایید که آدرس وب سایت شما به چه صورتی در دسترس باشد. فایل htaccess از طریق file manager هاست لینوکس در دایرکتوری public_html قابل دسترس خواهد بود.

 

  • ریدایرکت تمام لینک های سایت www.domain.com به domain.com

با استفاده از ریدایرکت 301 میتوانید به صورت دائمی آدرس های یک وب سایت را به آدرس دیگری هدایت نمایید .

در این مثال آدرس وب سایت به هر صورتیکه وارد شود ، به www.domain.com ریدایرکت خواهد شد :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

در مثال زیر تمامی درخواست های http وب سایت  www.domian.com به سایت domain.com هدایت خواهد شد :

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteRule ^/?$ "http\:\/\/domain\.com\/" [R=301,L]

حال به تشریح عملکرد این کدها میپردازیم :

در مثال اول ریدایرکت به وب سایت www.domain.com میباشد که خط اول به apache فرمان می دهد ماژول rewrite  را Start کند.

RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]

مشخص میکند که خط بعدی در صورتی اجرا شود که درخواست های http به وب سایت به صورت www.domian.com نباشد. علامت $ بدین معنی است که آدرس وب سایت با www.domain.com به پایان برسد. در نتیجه rewrite rule تمامی صفحاتی که www.domain.com نباشد ، به این وب سایت ریدایرکت خواهد شد. 

[NC] مشخص میکند که HTTP_HOST به حروف غیر حساس یا Case insensitive  باشد.کاراکتر نقطه در نظر گرفته نمیشود زیرا کاراکتر ناشناخته میباشد. 

کد خط دوم عملیاتی است که باید انجام شود :

RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

بخش http://www.domain.com/$1 هدف rewrite url را مشخص میکند. این آخرین استفاده ی ما از نام دامنه می باشد که 1$ شامل محتوای (*.) می باشد. بخش بعدی نیز مهم می باشد، زیرا ریدایرکت 301 برای ما به طور خودکار می باشد: [L,R=301]

L بدین معنی می باشد که آخرین (Last) قانون (Rule) در این اجرا می باشد. بعد از این rewrite، وب سرور نتیجه را باز خواهد گرداند. R=301 بدین معنی می باشد که وب سرور انتقال دائمی 301 را به مرورگر درخواست دهنده یا موتور جستجوی درخواست دهنده باز می گرداند.

  • ریدایرکت به com/index.php

فرض کنید وب سایتی به نام domain.com دارید و میخواهید که تمامی آدرسهای دریافتی را به عنوان مثال به domain.com/index.php ریدایرکت نمایید.از طریق قرار دادن کد زیر در htaccess میتوانید این کار را انجام دهید :

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^$ http://domain.com/domain.php [L,R=301]

مانند مثال یک بدین صورت است که کد خط بعدی تنها در صورتی اجرا شود که درخواست های http به صورت domain.com نباشد.

 

  • ریدایرکت کاربران سایت به وب سایت جدید

شما وب سایتی با نام olddomain.com دارید که در دسترس است و حال وب سایت جدیدی با نام newdomain.com راه اندازی کرده اید.حال باید محتوای وب سایت قبلی خود را به وب سایت جدید کپی نمایید.این کار از طریق انتقال دامنه قدیمی به دامنه جدید با استفاده از ریدایرکت 301 که به صورت دائمی میباشد قابل انجام است. این کار دارای مزیت های زیر میباشد:

کاربران به طور خودکار به وب سایت جدید هدایت میشوند و دیگر نیازی نیست که آدرس وب سایت جدید را به آنها اعلام نمایید.

با این کار به موتورهای جستجو اعلام میکنید که دامنه قدیمی به دامنه جدید منتقل شده و باید وب سایت جدید را ایندکس کند که این کار مدت زمانی به طول می انجامد.

Google’s PageRank نیز به دامنه جدید منتقل خواهد شد.همچنین موقعیت صفحات داخلی نیز در نتایج موتورهای جستجو تنظیم خواهد شد.

 

  • ایجاد ریدایرکت 301 برای تمامی درخواست های http از روی دامنه قدیم به دامنه جدید

توسط این کد سایت از olddomain.com به وب سایت www.newdomain.com ریدایرکت میشود :

RewriteEngine On
RewriteCond %{HTTP_HOST} !olddomain.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [L,R=301]

توسط کد خط زیر میتوانید سایت olddomain.com را به newdomain.com ریدایرکت نمایید:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !olddomain.com$ [NC]
RewriteRule ^(.*)$ http://newdomain.com/$1 [L,R=301]

 

  • افزودن علامت " / " به انتهای آدرس های وب سایت

برخی از موتور های جستجو کاراکتر اسلش را از آدرس هایی مثل دایرکتوری ها حذف می کنند. مثل موتور جستجوی yahoo . این حالت میتواند منجر به ایجاد مشکلات محتوای تکراری در اثر دسترسی به اطلاعات از طریق چندین  URLشود.Apache  در قسمت Apache server FAQ  اطلاعات بیشتری در این خصوص ارائه کرده است. به مثال زیر توجه نمایید :

/domain.com/google

این آدرس در گوگل به صورت domain.com/google ایندکس شده است.  که در نتیجه منجر به ایجاد دو آدرس با محتوای یکسان خواهد شد.

با قرار دادن کد زیر در فایل htaccess میتوان از این حالت جلوگیری کرد:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !domain.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

این کد یک علامت اسلش به آدرس ها اضافه میکند.این کد تمامی آدرس هایی که علامت / ندارند را به آدرس هایی با علامت / ریدایرکت میکند.

کد خط اول به آپاچی فرمان می دهد که این کد برای rewrite engine از ماژول mod-rewrite آپاچی می باشد. خط دوم دایرکتوری فعلی را بعنوان صفحه ی root ست می کند .

RewriteCond %{REQUEST_FILENAME} !-f

اطمینان از اینکه فایل های موجود بدون علامت / باشند. شما نمی توانید همین کار را با دایرکتوری ها بکنید زیرا این کار می تواند عملیات rewrite را برای دایرکتوری های موجود از بین ببرد.

RewriteCond %{REQUEST_URI} !domain.php

این کد یک url را که نباید rewrite شود مشخص میکند. اگر شما فایل یا آدرسی ندارید که نباید rewrite شود این خط را می توانید حذف کنید.

RewriteCond %{REQUEST_URI} !(.*)/$

زمانیکه آدرسی شامل علامت / نباشد این دستور اجرا خواهد شد. تمامی آدرس های بدون / به آدرس های با علامت / ریدایرکت خواهد شد:

RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

ریدایرکت 301 همراه با علامت / در انتها برای تمامی url ها انجام می شود.