Redirect از طریق htaccess - دستورات پر استفاده ریدایرکت

Redirect از طریق htaccess – دستورات پرکاربرد ریدایرکت

در این مقاله شما پس از آشنایی با مفهوم ریدایرکت با انواع روش‌های Redirect از طریق htaccess آشنا خواهید شد، این آموزش شامل مواردی از جمله انتقال سایت از http به https، انتقال از non-www به www، انتقال انواع لینک با حفظ ساختار و کوئری پارامترهای لینک به دامین جدید و یا صفحه دیگر و بسیاری موارد دیگر در خصوص نحوه صحیح ریدایرکت از طریق htaccess و بدون استفاده از افزونه است.

Redirect چیست؟

ریدایرکت به معنای هدایت کردن کاربر از یک آدرس ( صفحه یا سایت ) به آدرس دیگر است. این عمل به وسیله وب سرور و با استفاده از فایل های .htaccess یا سایر تنظیمات سرور انجام می شود.

ممکن است صفحه ای که به دلایل مختلفی حذف شده باشد و در نتایج جستجو گوگل هم وجود داشته باشد. شما می توانید کاربران را به صفحه جدیدی هدایت کنید تا با خطای 404 مواجه نشوند. همچنین می توانید صفحات قدیمی را به صفحات جدیدی که محتوایی مشابه دارند، متصل کنید و به کاربران این اطمینان را بدهید که محتوای مورد نظرشان هنوز در دسترس است.

این امر در سئو نیز بسیار مهم است، زیرا با استفاده از آن، می توانید به موتورهای جستجویی اطلاع دهید که صفحاتی که در دسترس نیستند، به صفحات جدیدی هدایت شده اند. این کار قطعا موجب افزایش اعتبار نزد موتورهای جستجوگر و در نهایت به دلیل عملکرد صحیح موجب افزایش رتبه شما شود.

انواع ریدایرکت از طریق htaccess

استفاده از ریدایرکت‌ها بسته به نیاز و شرایط مختلف، متفاوت است و باید با دقت و بر اساس نیاز خاص شما انتخاب شود. معمولا دو نوع 302 و 301 بیشتر استفاده می‌شوند.

  1. دائمی (Permanent Redirect 301):

این نوع برای اعلام به موتورهای جستجو این که یک صفحه به صورت دائمی به آدرس دیگری منتقل شده است و تمام اعتبار و صلاحیت آن به مکان جدید منتقل می‌شود، استفاده می‌شود. همچنین برای انتقال رتبه صفحه قبلی به صفحه جدید هم به کار می‌رود.

  1. موقت (Temporary Redirect 302):

این نوع برای اعلام به موتورهای جستجو و کاربران این که صفحه مورد نظر به طور موقت به آدرس دیگری منتقل شده است و پس از یک مدت معین به مکان قبلی برمی‌گردد، استفاده می‌شود.

  1. بدون تغییر متغیرها (307 Temporary Redirect):

این نوع شبیه به ریدایرکت موقت (302) است، با این تفاوت که متغیرهای URL در هنگام انتقال نیز حفظ می‌شوند.

  1. مبتنی بر HTTP یا (308 Permanent Redirect):

این نوع شبیه به ریدایرکت دائمی (301) است، با این تفاوت که درخواست‌های HTTP و ورودی‌های فرم ارسالی نیز به مکان جدید انتقال پیدا می‌کنند.

  1. مبتنی بر JavaScript:

این نوع نیز با استفاده از کدهای جاوا اسکریپت انجام می‌شود که باعث انتقال صفحه به مکان جدید می‌شوندو البته به عنوان یک روش فرعی برای انجام ریدایرکت استفاده می‌شود و برای بهینه‌سازی SEO مناسب نیست.

دستورات پراستفاده در Redirect از طریق htaccess

بدون شک دستورات و راهکارهای بیشتری موجود است اما در در لیست زیر می‌توانید موارد ضروری و پراستفاده را مشاهده و با مفهوم و کاربرد هرکدام آشنا شوید.

  1. دستور Redirect

این دستور نوع ساده‌ترین نوع بوده و برای منتقل کردن کاربر از یک آدرس به آدرس دیگر استفاده می‌شود.

  1. دستور RedirectMatch

دستور RedirectMatch برای ریدایرکت یک یا چند صفحه یا پوشه بر اساس الگوی قالب مشخص، استفاده می‌شود. این دستور بر اساس عبارت با قائده یا الگویی ( RegEx ) که به صورت یک رشته قرار داده می‌شود، مسیری جدید برای صفحات مورد نظر ایجاد می‌کند.

  1. دستور RewriteRule

دستور RewriteRule هم از RegEx پشتیبانی می‌کنند. با استفاده از این دستور می‌توان به‌طور پویا به محتوا یا ساختار یک وب‌سایت دسترسی پیدا کرد.

مفهوم 20 عبارت مهم در دستورات Redirect از طریق htaccess

  1. /: اشاره به صفحه اصلی یا آدرس اصلی دامین مثال https://domain.com
  2. /page/sub: اشاره به آدرس زیرمجموعه مثال https://domain.com/page/sub
  3. RewriteEngine: فعال کردن ماژول Rewrite در Apache.
  4. RewriteBase: تعیین پایه برای لینک‌های جدید بعد از انتقال.
  5. RewriteCond: تعیین شرایط برای اعمال قواعد RewriteRule.
  6. RewriteRule: تعیین قواعد جدید برای انتقال و یا تغییر لینک.
  7. ?: این علامت به منظور تمام کردن URL مورد نظر استفاده می‌شود.
  8. ^: بررسی شروع عبارت مورد نظر در آدرس URL.
  9. !^: بررسی شروع نشدن عبارت مورد نظر در آدرس URL.
  10. $: نشان دهنده پایان یک رشته است.
  11. !^www\: بررسی “www” در شروع آدرس URL ( در اینجا به معنی اگر نداشت ).
  12. %{HTTP_HOST}: نمایش نام هاست (مثلاً www.domain.com).
  13. %{HTTP_HOST} !^www\.(.*)$ : اگر هاست با www شروع نشود مثال domain.com
  14. %{HTTPS}: بررسی استفاده از HTTPS.
  15. %{REQUEST_URI}: بررسی بخش درخواست شده از آدرس URL (بدون نام هاست یا بدون www.domain.com ).
  16. (.*): هر رشته‌ای که داخل پرانتز استفاده شده باشد، با توجه به شرایط قبلی مطابقت خواهد داشت.
  17. (.*)$: هر رشته‌ای که داخل پرانتز و در پایان رشته باشد، با توجه به شرایط قبلی مطابقت خواهد داشت.
  18. (.*).html$: هر رشته‌ای با .html ختم شده باشد، با توجه به شرایط قبلی مطابقت خواهد داشت.
  19. $1: جایگزین کردن رشته‌ی مطابق با شرط داخل پرانتز اول در قواعد RewriteRule.
  20. [R=301,L]: اعمال ریدایرکت 301 و خاتمه دادن به بررسی همه‌ی قواعد بعد از این قانون.

حتما قبل از ایجاد تغییر در فایل htaccess یک نسخه پشتیبان از این فایل تهیه کنید، می‌توانید به ساگی این فایل را دانلود و یا تغییر نام دهید و یک فایل جدید به نام .htaccess ایجاد کنید و کدهای پیشفرض را در آن قرار دهید.

ریدایرکت با استفاده از دستور Redirect

این دستور برای انتقال از یک URL به URL دیگر استفاده می شود، و به مرورگرها اعلام می‌کند که از آدرس جدید استفاده کنند. همچنین از این دستور برای انتقال کاربر از یک دایرکتوری به یک دایرکتوری دیگر نیز می توان استفاده کرد. دستور Redirect از عبارات RegEx ( Regular expression ) پشتیبانی نمی‌کند.

ریدایرکت یک صفحه مشخص به URL جدید

ساده‌ترین نوع، انتقال یک صفحه مشخص به یک آدرس جدید است. برای مثال قصد دارید اگر کاربری وارد صفحه https://domain.com/page1 به آدرس https://domain.com/page2 منتقل شود. برای انجام کافیست کد زیر را در فایل .htaccess قرار دهید.

# https://domain.com/page1 >> https://domain.com/page2
Redirect 301 https://domain.com/page1 https://domain.com/page2

توجه داشته باشید تفاوتی نخواهد داشت که page1 و page2 پوشه ( sub-folder ) باشند و یا یک آدرس قلاب شده به یک فایل index، عملکرد در هر دو حالت یکسان است. و همچنین میتوانید این کد را کوتاه‌تر کنید:

# https://domain.com/page1 >> https://domain.com/page2
Redirect 301 /page1 /page2

همچنین شما میتوانید یک آدرس با پسوند مشخص را انتقال دهید برای مثال:

# https://domain.com/page.php >> https://domain.com/page.php
Redirect 301 /page.html /page.php

ریدایرکت یک سایت یا یک صفحه به سایت دیگر

شرایط مطابق قبل است، در واقع بخش دوم می‌تواند هر آدرسی که مدنظر شما است، باشد. آدرس دوم می‌تواند صفحه‌ای در دامین مبدا و یا دامین جدید باشد. در مثال زیر صفحه اصلی سایت به آدرس جدید منتقل می‌شود:

آموزش خصوصی طراحی سایت و وردپرس به صورت آنلاین

جهت مشاوره و کسب اطلاعات بیشتر از طریق واتساپ با شماره ۰۹۹۹۹۹-۱۵۸-۱۱ در تماس باشید.

پروژه محور - ارتباط مستقیم با مدرس

# https://domain.com >> https://new-domain.com
Redirect 301 / https://new-domain.com

اگر بخواهید آدرس مشخصی به صفحه‌ای در دامین جدید منتقل شود نیز کد به شک زیر خواهد بود:

# https://domain.com/page1 >> https://new-domain.com/page2
Redirect 301 /page1 https://new-domain.com/page2

اگر بخواهید یک آدرس با پسوند مشخص را انتقال دهید:

# https://domain.com/page.php >> https://new-domain.com/page.php
Redirect 301 /page.html https://new-domain.com/page.php

ریدایرکت با استفاده از دستور RedirectMatch

این دستور نیز برای انتقال از یک URL به URL دیگر استفاده می شود، با این تفاوت که این دستور از عبارت با قائده (RegEx) پشتیبانی می کند و به شما این امکان را می دهد که روش های مختلفی را برای redirect کردن URL ها استفاده کنید. به عنوان مثال، قصد دارید همه فایل‌هایی را که دارای پسوند .html هستند به آدرسی با پسوند .php منتقل کنید.

با استفاده از دستور قبلی هم می‌توانستیم اینکار را انجام دهیم، اما تمامی آدرس‌ها می‌بایست به طور دقیق مشخص میشدند، حال با دستور RedirectMatch و با استفاده از RegEx می‌توان این ریدایرکت را با یک خط کد اعمال کرد. برای مثال کد زیر هر فایلی با پسوند .html را به به همان نام و آدرس اما با پسوند .php منتقل می‌کند.

توجه داشته باشید که فرقی نمی‌کند که فایل html در روت باشد یا هر پوشه دیگری با کد فوق فایل به همان آدرس اما با پسوند php ریدایرکت میشود.

# https://domain.com/page1.html >> https://domain.com/page1.php
# https://domain.com/page2.html >> https://domain.com/page2.php
# https://domain.com/page3.html >> https://domain.com/page3.php
RedirectMatch 301 (.*)\.html$ $1.php

اگر قصد داشته باشید انتقال به دامین جدیدی باشد می‌توانید کد را به شکل زیر تغییر دهید:

# https://domain.com/page1.html >> https://new-domain.com/page1.php
# https://domain.com/page2.html >> https://new-domain.com/page2.php
# https://domain.com/page3.html >> https://new-domain.com/page3.php
RedirectMatch 301 (.*)\.html$ http://new-domain.com$1.php

ریدایرکت با استفاده از دستورات Rewriting

تفاوت این دستورات بازنویسی (Rewriting) با Redirect و RedirectMatch این است که به شما این امکان را می دهد تا پارامتر ها و آدرس‌هایی را که به عنوان query string در URL ها قرار دارند را نیز حفظ کنید. این دستور نیز از عبارات Regex پشتیبانی می کند

انتقال سایت از دامنه قدیمی به دامنه یا دامین جدید:

انتقال یا ریدایرکت آدرس‌های سایت قدیمی به سایت جدید، این شاید یکی از پراستفاده‌ترین دستورات redirect باشد. شاید برای شما هم پیش آمده باشد که دامین خود را تغییر داده باشید. در این حالت شما باید تمامی آدرس‌های قدیمی را به آدرس جدید منتقل کنید، در غیر این صورت شما با انبوهی از خطاهای 404 مواجه خواهید شد و سایت شما قطعا با افت رتبه شدیدی مواجه خواهد شد.

قطعه کد زیر تمامی درخواست‌ها به سایت یا دامین قبلی را به همان شکل به دامین جدید منتقل میکند، برای مثال شما قصد دارید اگر کسی آدرس https://domain.com/page-id/page-name به آدرس https://new-domain.com/page-id/page-name منتقل شود.

# https://old.com/page-id >> https://new.com/page-id
# https://domain.com/132 >> https://new-domain.com/132
RewriteEngine on 
RewriteBase / 
RewriteRule (.*) https://new.com/$1 [R=301,L]

البته که ممکن است شما بخواهید تمامی درخواست‌ها فقط به یک آدرس منتقل شوند در این حالت کد شما به این شکل تغییر می‌کند:

# https://domain.com/132/ >> https://new-domain.com
RewriteEngine on 
RewriteBase / 
RewriteRule (.*) https://new-domain.com [R=301,L]

ریدایرکت سایت از http به https

بسیاری از کاربران دوست دارند که سایتشان فقط با https باز شود، که البته استفاده از پروتکل https حتما تاثیر مثبتی روی سئو و امنیت سایت شما خواهد داشت. اغلب کاربران از افزونه‌هایی چون Really Simple SSL استفاده می‌کنند اما شما برای Redirect سایت از http به https می‌توانید این قطعه کد به فایل htaccess اضافه کنید.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

به جای off می‌توانید از مواردی چون !on و !=on هم استفاده کنید، عملکرد در تمامی موارد یکسان است.

ریدایرکت سایت از https به http

ممکن است سایت شما نخواهید دیگر سایتتان با https باز شود، برای Redirect سایت از https به http نیز می‌توانید از کد زیر استفاده کنید:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

اضافه کردن www به سایت

شاید بخواهید که سایت شما حتما با www باز شود، یعنی به جای domain.com به آدرس https://www.domain.com منتقل شود، برای Redirect سایت به www از کد زیر استفاده کنید. این کد مناسب وب‌سایت‌هایی است که از پروتکل http استفاده می‌کنند.

# http://domain.com >> http://www.domain.com
# http://old.com/132/ >> http://www.new.com/132/
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

اگر وب‌سایت شما از پروتکل https استفاده می‌کند از کد زیر استفاده کنید

# https://domain.com >> https://www.domain.com
# https://old.com/132 >> https://www.new.com/132
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

انتقال سایت از http و non-www به https و www

در صورتی که سایت شما با http باز می‌شود و شما قصد دارید وب‌سایت شما فقط با https و www باز شود می‌توانید از کد زیر استفاده کنید:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

انتقال URLهای دارای Query Parameters ( پارامترهای پرس و جو )

همونطور که در ابتدا هم به این مورد اشاره کردیم، یکی از تفاوت‌های دستورات Rewrite پشتیبانی از RegEx و Query های موجود در url است. فرض کنید می‌خواهید آدرس https://domain.com/shop/index.php?order=name&min-price=1000 به آدرس https://domain.com/products/index.php?order=name&min-price=1000 منتقل شود.

# from https://domain.com/shop/index.php?order=name&min-price=1000
# to   https://domain.com/products/index.php?order=name&min-price=1000
RewriteEngine on
RewriteRule ^shop/index.php?$ $1/products/index.php$2 [L,R=301]

انتقال URLهای دارای Query Parameters به دامین دیگر

با استفاده از کد زیر هر آدرسی با هر پارامتری به دامین جدید منتقل می‌شود

# from http://domain.com/index.php?category=wordpress
# to   https://www.domain-new.com/index.php?category=wordpress
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain-new.com/$1 [R=301,L]

جمع بندی

در پایان امیدواریم که این مقاله برای شما مفید واقع شود، در این مقاله سعی شد ضروری‌ترین اطلاعات را در خصوص دستورات، انواع، نحوه استفاده، تفاوت‌ها و هر آنچه که برای منتقل کردن یک آدرس به آدرس دیگر مورد نیاز است انتقال دهیم، توجه داشته باشید با که تمامی کدهای بالا چندین بار بررسی و تست شده‌اند و اما بهتر است قبل از استفاده حتما از فایل htaccess خود یک نسخه پشتیبان گرفته و پس از انجام تغییرات نیز توصیه می‌کنیم آدرس سایت خود را با incognito یا Private Browser بررسی کنید.

خدمات طراحی سایت

طراحی سایت مطابق با استانداردهای روز برنامه‌نویسی، به همراه آموزش استفاده و ۶ ماه پشتیبانی رایگان