مقدمه
ماژول 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 علاوه بر بهبود تجربه کاربری، تأثیر مثبتی بر سئو و نگهداری پروژههای وب خواهد داشت.
نظرات کاربران