در این مقاله به ادامه آموزش ریدایرکت آدرس های urlسایت از طریق فایل htaccess در هاست میپردازیم.
بخش بعدی نیز مهم می باشد، زیرا ریدایرکت 301 برای ما به طور خودکار می باشد: [L,R=301]
L بدین معنی می باشد که آخرین (Last) قانون (Rule) در این اجرا می باشد. بعد از این rewrite، وب سرور نتیجه را باز خواهد گرداند. R=301 بدین معنی می باشد که وب سرور انتقال دائمی 301 را به مرورگر درخواست دهنده یا موتور جستجوی درخواست دهنده باز می گرداند.
ریدایرکت بازدید کنندگان به سایت جدید:
فرض کنید وب سایتی از قبل دارید که با دامنه ی oldexample.com در دسترس می باشد و وب سایت جدیدی نیز دارید که با دامنه ی newexample.com در دسترس می باشد. در مرحله ی اول باید محتوای وب سایت قبلی خود را به وب سایت جدید کپی کنید. اما آنچه بعد از آن باید انجام شود چیست؟ شما باید ریدایرکت دائمی انتقال 301 از دامنه ی قبلی به دامنه ی جدید انجام دهید که ساده و دارای مزایای زیر می باشد:
کاربران به صورت خودکار به دامنه ی جدید منتقل می شوند که دیگر نیازی نیست به آن ها اطلاع داده شود.
موتور های جستجو به صورت خودکار به دامنه ی جدید هدایت می شوند و تمامی اطلاعات مرتبط به دامنه ی جدید منتقل خواهد شد. اما این کار ممکن است مدت زمانی به طول انجامد.
Google’s PageRank â„¢نیز به دامنه ی جدید منتقل خواهد شد. همچنین موقعیت صفحات سایر اطلاعات داخلی که در حال استفاده می باشند در نتایج موتور های جستجو تنظیم می گردد. مثل TrustRank .
ایجاد ریدایرکت 301 برای تمامی درخواست های http که روی دامنه ی قدیم می باشند:
مثال 1 – انتقال از com به www.newexample.com:
1 2 3 |
RewriteEngine On RewriteCond %{HTTP_HOST} !oldexample.com$ [NC] RewriteRule ^(.*)$ http://www.newexample.com/$1 [L,R=301] |
کد فوق در مواقعی مفید می باشد که شما از www.newexample.com بعنوان دامنه ی جدید استفاده کنید (که قبلا توضیح داده شد امکان تعریف دامنه با www یا بدون www وجود دارد) – اگر بیاد نیارید، مثال 2 را مشاهده کنید.
مثال 2 – ریدایرکت از com به newexample.com :
1 2 3 4 |
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !oldexample.com$ [NC] RewriteRule ^(.*)$ http://newexample.com/$1 [L,R=301] |
نحوه افزودن علامت اسلش “/” :
برخی از موتور های جستجو کاراکتر اسلش را از آدرس هایی مثل دایرکتوری ها حذف می کنند. مثل موتور جستجوی yahoo. در هر حال این میتونه منجر به ایجاد مشکلات محتوای تکراری در اثر دسترسی به اطلاعات از طریق چندین URLشود. Apache در قسمت Apache server FAQ اطلاعات بیشتری در این خصوص ارائه کرده است.
اجازه دهید نگاهی به مثال زیر داشته باشیم:
Example.com/google/
در گوگل به صورت example.com/google ایندکس شده است – که نتیجه می تواند در دو آدرس با محتوای مشابه باشد.
راه حل ایجاد یک .htaccess rewrite rule می باشد که یک علامت اسلش به url ها اضافه می کند. مثال – ریدایرکت تمامی آدرس هایی که علامت / ندارند با آدرس هایی که با یک علامت / به اتمام می رسند:
1 2 3 4 5 |
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !example.php RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301] |
توضیح کد فوق در مورد افزودن علامت / با رول .htaccess rewrite :
خط اول به آپاچی فرمان می دهد که این کد برای rewrite engine از ماژول mod-rewrite آپاچی می باشد. خط دوم دایرکتوری فعلی را بعنوان صفحه ی root ست می کند . اما بخش جالب توجه:
1 |
RewriteCond %{REQUEST_FILENAME} !-f |
اطمینان از اینکه فایل های موجود بدون علامت / باشند. شما نمی توانید همین کار را با دایرکتوری ها بکنید زیرا این کار می تواند عملیات rewrite را برای دایرکتوری های موجود حذف کند. در خط بعدی
1 |
RewriteCond %{REQUEST_URI} !example.php |
این کد یک url نمونه را از این عمل مستثنی می کند که نباید rewrite شود. این فقط یک مثال است. اگر شما فایل یا آدرسی ندارید که نباید rewrite شود این خط را می توانید حذف کنید. و شرط:
1 |
RewriteCond %{REQUEST_URI} !(.*)/$ |
در آخر زمانیکه آدرسی شامل علامت / نباشد این دستور اجرا خواهد شد. هم اکنون نیاز داریم که آدرس های بدون / را به آدرس های با علامت / ریدایرکت کنیم:
1 |
RewriteRule ^(.*)$ http://example.com/$1/ [L,R=301] |
ریدایرکت 301 همراه با علامت / در انتها برای تمامی url ها انجام می شود. شما باید بجای example.com نام دامنه ی خود را در تمامی مثال های فوق جایگزین کنید.