تعداد بازدید: 2286

Apache HTTP Server – htaccess

سرویس دهنده وب یا وب سرور یک نرم افزار است که روی سرور نصب و پیکره بندی می شود. نرم افزارهای زیادی از این نوع وجود دارد نظیر apache , nginX , LiteSpeed , … . کار این نرم افزار ها ذخیره سازی و مدیریت درخواست هایی است که از طریق یک پروتکل خاص ( مثلا Http ) به سرور ارسال می شود.

وب سرور Apache یکی از این نرم افزار هاست که روی سرور های لینوکسی نصب می شود و به وسیله آن و زبان PHP و پایگاه داده MySQL می توان وب اپلیکیشن هایی نظیر وردپرس و لاراول را پیاده سازی کرد.

Apache HTTP Server Configuration

پیکره بندی تنظیمات وبسرور Apache در فایلی به نام httpd.conf ذخیره شده است. این فایل با پسوند .conf در مسیر نصب وب سرور یا stack (xampp, mamp,wamp) موجود است.

با استفاده از فایل httpd.conf می توان تنظیمات خاصی روی سرور اعمال کرد که پس از هر تغییر برای اعمال شدن آن تغییر باید وب سرور Apache را ریستارت کرد.

در Apache ماژول های مختلفی وجود دارد (نظیر ماژول rewrite_module) که هر کدام یک امکان را در اختیار ما قرار می دهد .با استفاده از httpd.conf می توان آن ها را فعال و غیر فعال کرد.

  • دستورات httpd.conf به دو دسته تقسیم می شوند :
  • دستورات مربوط به ماژول ها

دستورات مربوط به تنظیمات وب سرور

همانند PHP در وب سرور Apache نیز برای استفاده از هر ماژول باید آن ماژول فعال باشد. به طور مثال کدهای RewriteEngine در صورتی توسط وب سرور تشخیص داده خواهد شد که ماژول متناظر آن فعال باشد.

LoadModule rewrite_module modules/mod_rewrite.so

.htaccess

برخی دستوراتی که در فایل تنظیمات وب سرور Apache وجود دارد قابل بازنویسی و تغییری در همان فایل می باشد. برای اعمال شدن این تغییرات با وب سرور را یک بار ریستارت کرد.

.htaccess یک فایل بدون نام با پسوند .htaccess است که می توان تنظیمات Apache را در داخل آن نوشت. با هر درخواست ابتدا Apache این تنظیمات را در نظر می گیرد. با استفاده از .htaccess با

انتقال فایل های پروژه تنظیمات نیز منتقل می شوند و همچنین نیاز به ریستارت کردن Apache نیست.

DirectoryIndex : با استفاده از دستور DirectoryIndex می توان اولویت اجرا را تعیین کرد:

DirectoryIndex index.php index.html index.htm

Directory : با استفاده از دستور Directory می توان تنظیماتی خاص را بر روی یک فولدر خاص اعمال کرد.

<Directory "/Applications/MAMP/Library/icons">
Allow from all
</Directory>

ErrorDocument : بنا به هر درخواست ما پاسخی برای سرور خواهیم داشت که بسته به نوع درخواست و تنظیمات مشخص شده ممکن است خطایی را به عنوان پاسخ به client بفرستیم. پاسخ به درخواستی که به سمت سرور فرستاده شده باشد در درجه اول به وب سرور Apache فرستاده می شود و در پایان نیز توسط وب سرور آپاچی پاسخ داده می شود. نمونه خطاهای 404 Not Found , 403 Forbidden , 401 Unauthorize که در وب سرور آپاچی ارسال می شود. با استفاده از نوع خطای نمایشی از وب سرور می توان نام نرم افزار وب سرور را تشخیص داد.

این خطاها به وسیله کد زیر در فایل htaccess قابل بازنویسی می باشد. پارامتر اول شماره خطا و پارامتر دوم فایل یا متن خطا می باشد.

ErrorDocument 500 "The server made a boo boo."
ErrorDocument 404 https://gnutech.ir/timer/404.html

اگر خطایی در فایل .htaccess وجود داشته باشد یا خطای Syntax در فایل  httpd.conf داشته باشیم خطای 500 را خواهیم داشت :

Request URL:http://localhost:8888/basic-rewriting/
Request method: GET
Remote address:[::1]:8888
Status code: 500 Internal Server Error
Version:HTTP/1.1
Referrer Policy:no-referrer-when-downgrade

UrlRewriting

مدیریت لینک درخواست و تجزیه آن در مرحله درخواست اولیه به وب سرور یکی دیگر از کارهای وب سرور Apache می باشد. این کار توسط ماژول rewrite_module انجام می پذیرد.
با استفاده از سه دستور کلیدی از این ماژول می توان درخواست ها را تجزیه و به PHP فرستاد :

RewriteEngine : با استفاده از این دستور می توان عملیات Rewrite را فعال یا غیر فعال کرد.

RewriteCond :‌ با استفاده از این دستور می توان شرط برای درخواست تعیین کرد.

RewriteRule : تعریف فرمول Rewriting بر اساس عبارات منظم.

نوع اول (ریدایرکت ساده) : فرض کنید یک فایل index.php , home.php داریم. DirectoryIndex پیش فرض بر اساس index.php می باشد. با استفاده از کد زیر هر درخواست به ریشه پروژه را به home.php ارسال می کنیم.

RewriteEngine on
RewriteRule ^(.*)$ home.php

نوع دوم (ریدایرکت به همراه پارامتر) : فرض کنید می خواهیم قالبی برای دریافت شناسه پست در htaccess تعریف کنیم. مطابق این قالب لینک را با ساختار example.com/post/{ID}/ ارسال می کنیم. ما این درخواست را تجزیه و تحلیل و در قالب پارامتر GET به فایل index.php ارسال می کنیم.

RewriteEngine on
RewriteRule ^post/([0-9]+)$ index.php?post_id=$1

در کد بالا عبارت منظم با ساختار عددی که در داخل پرانتز نوشته شده است همان عددی است که باید در لینک با عبارت منظم مطابقت کند. $1 مقدار همان عبارت است که به صورت پارامتر GET به index.php ارسال می شود.

نوع سوم (ریدایرکت به همراه چند پارامتر) : فرض کنید چند پارامتر داریم که با استفاده از آن ها می توان ساختار خروجی را تعیین کرد. کاربر باید با یک ساختار خاص لینک را درخواست بدهد تا ما با استفاده از نگاشت لینک درخواست و عبارت منظم موجود در قسمت RewriteRule بتوانیم خروجی را تعیین کنیم.

RewriteEngine on
RewriteRule ^post/([0-9]+)/category/([0-9]+)$ index.php?post_id=$1&category_id=$2

فرض کنید لینک درخواست برابر با example.com/post/21/category/34 باشد. در لینک پارامتر post_id =21 و category_id = 34 می باشد. در عبارت منظم نمایش داده شده پرانتز اول برابر با $1 می باشد (اولین عبارت match شده در عبارت منظم) و پرانتز دوم (دومین عبارت match شده در عبارت منظم) برابر با $2 می باشد.

نوع چهارم (ارسال url و تجزیه و تحلیل در اپلیکیشن – ساختار MVC) : در این روش ما لینک درخواست شده را به طور کامل به سمت سرور ارسال می کنیم . در آن سمت درخواست را تجزیه و تحلیل می کنیم و پاسخ مناسب را می فرستیم.

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

قسمت اول RewriteEngin را on می کند و در قسمت دوم شرط را چک می کند که اگر درخواست مستقیم به فایل یا دایرکتوری داشت RewriteRule اجرا نگردد. و در قیمت سوم هم اگر شروط قسمت دوم برقرار نبود درخواست را تحت پارامتر url به فایل index.php ارسال می کند.

مطالب مشابه

ftp-protocol-in-php

کار با پروتکل FTP در PHP

یکی دیگر قوانین حاکم بر دنیای وب ( از پروتکل های اینترنت لایه application ) پروتکل ftp است که با استفاده از آن می...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Rest API در وردپرس

سرور ها می توانند پاسخ مناسب به درخواست ها بدهند. درخواست ها و پاسخ یک سری ویژگی ها و داده همراه خود دارند. کدی که در...

هدر های Http در درخواست و پاسخ

Http Headers (قسمت سوم)

Http Request و Http Response درخواست و پاسخ بر اساس پروتکل Http می باشند و می توان از این ها برای ارتباط میان نرم افزار...

هدر های Http در درخواست و پاسخ

Http Headers (قسمت دوم)

http headers حاوی اطلاعاتی در رابطه با نوع درخواست ما می باشند. همچنین یک نوع رابط میان درخواست کلاینت و پاسخ سرور در...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Apache HTTP Server – htaccess

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

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