بازنویسی URLها با mod_rewrite در Apache روی Ubuntu 20.04

مقدمه

ماژول mod_rewrite یکی از قدرتمندترین و در عین حال پیچیده‌ترین ماژول‌های وب‌سرور Apache است. این ماژول به شما امکان می‌دهد آدرس‌های URL را به‌صورت پویا بازنویسی (Rewrite) کنید. به کمک mod_rewrite می‌توانید URLهای طولانی و پیچیده را به آدرس‌هایی کوتاه، خوانا و بهینه برای موتورهای جستجو تبدیل کنید.

برای مثال، به جای استفاده از آدرس زیر:

http://example.com/index.php?page=about

می‌توانید URL را به شکل زیر نمایش دهید:

http://example.com/about

در این آموزش، نحوه فعال‌سازی mod_rewrite و ایجاد قوانین بازنویسی URL در Apache روی Ubuntu 20.04 را یاد خواهید گرفت.


پیش‌نیازها

برای دنبال کردن این آموزش به موارد زیر نیاز دارید:

  • یک سرور Ubuntu 20.04
  • یک کاربر دارای دسترسی sudo
  • نصب و پیکربندی Apache

مرحله اول: فعال‌سازی ماژول mod_rewrite

ابتدا از طریق SSH به سرور متصل شوید و ماژول mod_rewrite را فعال کنید:

sudo a2enmod rewrite

پس از فعال‌سازی، Apache را ریستارت کنید:

sudo systemctl restart apache2

برای اطمینان از فعال بودن ماژول، دستور زیر را اجرا کنید:

apache2ctl -M | grep rewrite

خروجی باید مشابه زیر باشد:

rewrite_module (shared)

مرحله دوم: فعال کردن استفاده از فایل .htaccess

به صورت پیش‌فرض، Apache استفاده از فایل‌های .htaccess را غیرفعال می‌کند. برای استفاده از قوانین mod_rewrite باید این قابلیت را فعال کنید.

فایل پیکربندی Virtual Host سایت خود را باز کنید:

sudo nano /etc/apache2/sites-available/your_domain.conf

بخش زیر را پیدا کرده و مقدار AllowOverride را روی All قرار دهید:

<Directory /var/www/your_domain>
    AllowOverride All
</Directory>

فایل را ذخیره کرده و Apache را مجدداً بارگذاری کنید:

sudo systemctl reload apache2

مرحله سوم: ایجاد فایل .htaccess

به پوشه اصلی سایت بروید:

cd /var/www/your_domain

سپس فایل .htaccess را ایجاد کنید:

nano .htaccess

در ادامه قوانین بازنویسی را در این فایل قرار خواهید داد.


مرحله چهارم: ساخت یک قانون بازنویسی ساده

فرض کنید فایل about.html در سایت شما وجود دارد و می‌خواهید کاربران با وارد کردن /about به آن دسترسی داشته باشند.

محتوای زیر را در فایل .htaccess قرار دهید:

RewriteEngine On

RewriteRule ^about$ about.html [NC,L]

توضیح قوانین

RewriteEngine On

فعال‌سازی موتور بازنویسی.

RewriteRule ^about$ about.html [NC,L]
  • ^about$ : فقط مسیر /about را تطبیق می‌دهد.
  • about.html : فایل مقصد.
  • NC : حساس نبودن به حروف بزرگ و کوچک.
  • L : آخرین قانون پردازش‌شده.

اکنون هر دو آدرس زیر یک صفحه را نمایش می‌دهند:

http://your_domain/about
http://your_domain/about.html

مرحله پنجم: حذف پسوند .php از URL

یکی از کاربردهای رایج mod_rewrite حذف پسوند فایل‌ها از URL است.

فرض کنید فایل زیر وجود دارد:

contact.php

قانون زیر را به .htaccess اضافه کنید:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

اکنون کاربران می‌توانند به جای:

https://example.com/contact.php

از آدرس زیر استفاده کنند:

https://example.com/contact

مرحله ششم: ایجاد URLهای داینامیک و کاربرپسند

فرض کنید صفحه‌ای برای نمایش مقالات دارید:

article.php?id=15

می‌توانید URL را به شکل زیر تبدیل کنید:

/article/15

برای این کار قانون زیر را اضافه کنید:

RewriteEngine On

RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L,QSA]

توضیح

([0-9]+)

عدد شناسه مقاله را دریافت می‌کند.

$1

به اولین مقدار دریافت‌شده اشاره دارد.

QSA

پارامترهای Query String موجود را حفظ می‌کند.

در نتیجه:

/article/15

به:

article.php?id=15

تبدیل می‌شود.


مرحله هفتم: ریدایرکت دائمی (301 Redirect)

برای انتقال دائمی یک صفحه قدیمی به صفحه جدید:

Redirect 301 /old-page https://example.com/new-page

یا با mod_rewrite:

RewriteRule ^old-page$ https://example.com/new-page [R=301,L]

این روش برای حفظ اعتبار سئو هنگام تغییر ساختار URL بسیار مهم است.


مرحله هشتم: اجبار استفاده از HTTPS

برای هدایت تمام درخواست‌ها به HTTPS:

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

مرحله نهم: هدایت www به non-www

اگر می‌خواهید:

www.example.com

به:

example.com

هدایت شود:

RewriteEngine On

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

تست قوانین بازنویسی

پس از هر تغییر، تنظیمات Apache را بررسی کنید:

sudo apachectl configtest

در صورت مشاهده پیام زیر:

Syntax OK

تنظیمات صحیح هستند.

سپس Apache را بارگذاری مجدد کنید:

sudo systemctl reload apache2

جمع‌بندی

ماژول mod_rewrite یکی از مهم‌ترین ابزارهای Apache برای مدیریت URLها است. با استفاده از آن می‌توانید:

  • URLهای کوتاه و سئوپسند ایجاد کنید.
  • پسوند فایل‌ها را از آدرس‌ها حذف کنید.
  • ریدایرکت‌های 301 و 302 انجام دهید.
  • کاربران را به HTTPS هدایت کنید.
  • ساختار لینک‌های سایت را بهینه و حرفه‌ای کنید.

استفاده صحیح از mod_rewrite علاوه بر بهبود تجربه کاربری، تأثیر مثبتی بر سئو و نگهداری پروژه‌های وب خواهد داشت.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *