در این درس با مفهومی به نام Permalinks آشنا میشوید و یاد میگیرید چگونه از آنها برای بازنویسی URLهای داینامیک در یک سایت وردپرسی استفاده میشود.

مقدمه
در درس Web Servers یاد گرفتید که بیشتر برنامههای مبتنی بر PHP، از جمله وردپرس، یک فایل Directory Index دارند.
این فایلی است که زمانی اجرا میشود که کاربر آدرس URL سایت را در مرورگر باز میکند.
با این حال، در سایتی که با WordPress ساخته شده است، امکان دارد انواع مختلفی از محتوا مانند:
- نوشتهها (Posts)
- برگهها (Pages)
- محصولات (Products)
همگی از طریق همان فایل Directory Index نمایش داده شوند.
کلید اصلی این قابلیت، ویژگیای به نام Permalinks است.
متغیرهای Query String
قبل از اینکه وارد بحث Permalinks شویم، بهتر است مفهومی به نام Query String را درک کنیم.
بیایید یک مثال از یک نصب آزمایشی وردپرس را ببینیم:
https://wordpress.test/?p=1
در این مثال:
- URL برابر است با
https://wordpress.test/
- و Query String برابر است با
?p=1
Query String روشی برای ارسال داده به وبسرور است. در اینجا، Query String مقدار 1 را به متغیر p ارسال میکند.
در PHP میتوان مقدار متغیر p را با استفاده از سوپرگلوبال $_GET دریافت کرد.
<?php
$p = $_GET['p'];
سپس کد PHP میتواند از این مقدار برای انجام یک جستجوی داده استفاده کند، برای مثال بازیابی یک نوشته از پایگاه داده که شناسه آن 1 است.
Permalinks
Permalinks که با نام Clean URLs نیز شناخته میشوند، روشی برای خواناتر کردن URLها برای انسان هستند.
به جای استفاده از Query String، Permalinks از ساختار URL مبتنی بر محتوای درخواستشده استفاده میکنند.
در ادامه همان مثال قبلی را با استفاده از Permalink مشاهده میکنید:
https://wordpress.test/1/
در این مثال:
- URL برابر است با
https://wordpress.test/1/
- هیچ Query String وجود ندارد
- URL برای انسان بسیار خواناتر است
اما سؤال اینجاست که وبسرور چگونه تشخیص میدهد چه محتوایی باید نمایش داده شود؟
بر اساس ساختار مورد انتظار URL، وبسرور میتواند طوری پیکربندی شود که نگاشت URL (URL Mapping) انجام دهد. این کار با استفاده از قابلیتی در وبسرور به نام URL Rewriting انجام میشود.
وبسرور میتواند طوری تنظیم شود که یک ساختار مشخص برای URLها را انتظار داشته باشد و دادههای موجود در آن URL را به برنامه وب ارسال کند. سپس برنامه وب بر اساس دادهای که دریافت کرده است اطلاعات مرتبط را بازیابی و نمایش میدهد.
وردپرس و Permalinks
وردپرس قابلیتی به نام Permalinks دارد که به شما اجازه میدهد ساختار URL سایت وردپرسی خود را پیکربندی کنید.
این قابلیت را میتوانید در داشبورد وردپرس در مسیر زیر پیدا کنید:
Settings > Permalinks
ساختار پیشفرض Permalink برابر Plain است. این یعنی هیچ Permalinkی استفاده نمیشود و URLها به صورت Query String ساده هستند.
گزینههای دیگر به شما اجازه میدهند که:
- یکی از ساختارهای رایج URL را انتخاب کنید
- یا ساختار سفارشی (Custom Structure) خود را تعریف کنید
وقتی یکی از گزینهها غیر از Plain را انتخاب میکنید:
- سرور طوری پیکربندی میشود که ساختار URL تمیز (Clean URL) مطابق ساختاری که تعریف کردهاید را انتظار داشته باشد.
- در همان زمان، وردپرس ساختار انتخابشده را در پایگاه داده ذخیره میکند.
وقتی درخواستی با ساختار مطابق ارسال شود، وردپرس از این دو منبع داده استفاده میکند تا:
- ساختار URL را به اطلاعات مورد نیاز نگاشت کند
- آن اطلاعات را از پایگاه داده دریافت کند
- و آنها را در صفحه نمایش دهد
Apache و Permalinks
در وبسرور Apache این کار معمولاً در فایل .htaccess انجام میشود.
برای مثال، اگر ساختار Permalink را به گزینهای غیر از Plain تغییر دهید، کد زیر به فایل .htaccess اضافه میشود:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
این کد بررسی میکند که آیا ماژول rewrite در Apache فعال است یا نه و سپس قوانین بازنویسی URL را تنظیم میکند تا ساختار Clean URL مورد انتظار باشد.
Nginx و Permalinks
در وبسرور Nginx این تنظیمات معمولاً در فایل پیکربندی server block انجام میشود.
از آنجا که Nginx از فایل .htaccess در سطح هر نصب وردپرس پشتیبانی نمیکند، این پیکربندی معمولاً به صورت پیشفرض در server block و داخل یک location directive قرار میگیرد.
نمونه پیکربندی:
location / {
try_files $uri $uri/ /index.php?$args;
}
تولید خودکار لینکها در وردپرس
هر زمان که یک ساختار Permalink تنظیم شود، اگر شما لینکهایی به محتوای داخلی سایت مانند:
- نوشتهها
- برگهها
اضافه کنید، وردپرس به طور خودکار URL صحیح را بر اساس ساختار Permalink تنظیمشده تولید میکند.
سوال 1
Permalink در وردپرس به چه معناست؟
A) آدرس موقت صفحه
✅B) لینک دائمی و خوانای محتوا
C) فایل دیتابیس وردپرس
سوال 2
Query String معمولاً در URL با چه علامتی شروع میشود؟
A) #
B) ?✅
C) /
سوال 3
در مثال ?p=1 مقدار 1 به چه چیزی ارسال شده است؟
✅A) پارامتر p
B) فایل wp-config.php
C) قالب single.php
سوال 4
کدام مسیر در وردپرس برای تنظیم Permalinkها استفاده میشود؟
A) Settings > Media
B) Settings > Permalinks✅
C) Tools > Permalinks
سوال 5
حالت پیشفرض Permalink در وردپرس چیست؟
A) Pretty
B) Plain✅
C) Custom
سوال 6
هدف اصلی URL Rewriting چیست؟
A) تغییر زبان سایت
✅B) تبدیل URL خوانا به مسیر قابل فهم برای برنامه
C) حذف دیتابیس
سوال 7
در Apache تنظیمات بازنویسی URL معمولاً در کدام فایل انجام میشود؟
A) wp-config.php
B) .htaccess✅
C) functions.php
سوال 8
کدام دستور در Nginx برای بررسی فایل/پوشه و هدایت به index.php استفاده میشود؟
A) alias
B) try_files✅
C) rewrite_base
سوال 9
چرا Permalinks برای سئو بهتر از Query String هستند؟
✅A) چون URLها خواناتر و قابل فهمتر هستند
B) چون دیتابیس را حذف میکنند
C) چون PHP را اجرا نمیکنند
سوال 10
اگر فایل یا پوشه واقعی برای یک URL در Apache وجود نداشته باشد، معمولاً چه اتفاقی میافتد؟
✅A) درخواست به index.php میرود
B) سرور خاموش میشود
C) فایل .css اجرا میشود
سوال 11
وردپرس بعد از تنظیم Permalinkها، لینکهای داخلی را چگونه تولید میکند؟
A) به صورت دستی توسط کاربر
✅B) بهصورت خودکار بر اساس ساختار انتخابشده
C) فقط با فایل .htaccess
سوال 12
کدام مورد یک نمونه از Permalink است؟
A) /?p=12
B) /about-us/✅
C) #about-us
سوال 13
کدام فایل یا بخش مسئول ذخیره ساختار Permalink در وردپرس است؟
✅A) پایگاه داده وردپرس و تنظیمات داخلی آن
B) index.php فقط
C) wp-login.php
سوال 14
در Nginx، درخواستهای ناموجود معمولاً به کدام فایل هدایت میشوند؟
A) index.php✅
B) style.css
C) archive.php
سوال 15
کدام گزینه درباره Query String درست است؟
A) فقط برای CSS استفاده میشود
✅B) روشی برای ارسال داده در URL است
C) جایگزین دیتابیس است
