منبع اصلی نوشتار زیر در این لینک قرار دارد

کار با الفبای htaccess در آپاچی (پارت1)

سلام

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

مقدمه ای بر .htaccess

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

فایل .htaccess چیست؟

اگر بخواهیم مختصر بگوییم، این فایل یک فایل متنی ساده است که میتوان در آن رهنودها ( directives) وب سرور را قرار داد. رهنمودهای سرور که در فایل .htaccess قرار میگیرند تنها بر روی وب سایتی که این فایل در ریشه آن قرار دارد اعمال میگردند و دیگر مثل فایلهای php.ini یا httpd.conf نیست که بر روی کلیه وب سایتهای روی یک وب سرور تاثیر بگذارد.

نکته: شما متیوانید در هر پوشه از وب سایتتان یک فایل .htaccess داشته باشید و بنابراین میتوانید برای بخشهای مختلف سایت خود تنظمیات جداگانه ای داشته باشید. بنابراین ممکن است که در یک وب سایت چندین فایل .htacces وجود داشته باشد.

دقت کنید که در صورتی که تنظیمات .htaccess همپوشانی داشته باشد، تنظمیاتی که در فایل .htaccess سطح پاییت است ارجحیت دارد. مثلا شما میتوانید در فایل .htaccess که در ریشه وب سایت شما قرار دارد (و ما از این به بعد این فایل را .htaccess اصلی خواهیم نامید) میتوانید اجازه دهید که ایندکس گذاری در سراسر وب سایت فعال باشد اما در یک پوشه بخصوص این امکان را غیرفعال کنید.

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

چه کارهایی را میتوان با فایل .htaccess انجام داد؟

 اغلب تنظمیات و رهنمودهایی که میتوان در فایل httpd.conf قرار داد را نیز میتوان درون فایل .htaccess نیز قرار داد. اما عمده موارد استفاده از این فایل به شرح زیر است :

 کنترل دسترسی :

 در فایل .htaccess میتوان دسترسی به فایلها و پوشه های وب سایت را محدود یا غیرمحدود ساخت. مثالی از این کنترل میتواند این باشد که شما درون سایت خود پوشه ای به نام includes دارید که میخواهید در آن اسکریپت هایی را قرار دهید که دیگر اسکریپت های سایت آنها را ضمیمه خود کنند. اما نمیخواهید کسی بتواند به طور مستقیم به این اسکریپتها دسترسی پیدا کند. برای انجام چنین کاری شما کافی است تا تنها یک فایل .htaccess به پوشه includes خود اضافه کنید و در آن این کد را اضافه نمایید:

deny from all

که این کار باعث میشود همه دسترسی های مستقیم به این پوشه و فایلهای داخل آن محدود گردد. البته شما کارهای بسیار بیشتری میتوانید در این خصوص انجام دهید. مثلا دسترسی را به یک آدرس IP بخصوص محدود نمایید یا
مثلا به این کد دقت نمایید

order deny,allow
deny from all
# Allow access just for local LAN
allow from 192.168.0.0/24

این کار باعث میشود تا فایلهای درون پوشه فقط توسط آدرس IP ذکر شده به صورت مستقیم قابل دسترسی باشند. که در این مثال آدرس IP مربوطه آدرس شبکه محلی است که وب سرور در آن قرار دارد.
نکته: خطوطی که با # آغاز میگردند بعنوان توضیح تلقی شده و توسط وب سرور نادیده گرفته میشوند.
چنانچه بخواهید یک آدرس IP بخصوص را محدود نمایید میتوانید از کدی شبیه به این استفاده کنید

# someone else giving the ruskies a bad name..
order allow,deny
deny from 85.200.123.59
allow from all

زمانی که شما به این شکل یک آدرس IP را محدود کنید، چنانچه فردی بخواهد با استفاده از آن آدرس IP وب سایت را مشاهده کند با خطای 403 یا همان access denied مواجه خواهد شد.
البته این روش هرچند در بسیاری از مواقع راهگشاست اما در ادامه مقاله به بررسی مواردی خواهیم پرداخت که میتوان به کمک آنها این موارد را به طریق دیگری انجام داد

صفحات خطای سفارشی

 .htaccess فایلی است که اغلب برنامه نویسان و طراحان وب از آن بهره میبرند تا در هنگامی که کاربران در مشاهده سایت با خطایی ( از جمله یافت نشدن صفحه، عدم دسترسی و ..) مواجه شدند، به جای مشاهده صفحات خطای پیش فرض، بیک صفحه خطای دیگر که توسط خود آن برنامه نویسان طراحی شده و دارای ظاهر زیباتر و همچنین پیغام خطای مفهوم تر و کاربرپسندتری است به نمایش درآید

کار جالبی که میتوان در این زمینه انجام داد این است که در ریشه وب سایت پوشه ای به نام err داشته باشیم و با توجه به کد خطا، صفحه ای متناسب با آن طراحی و به همان نام در پوشه err ذخیره کنیم. مثلا برای خطای عدم پیدا شدن صفحه درخواستی که کد آن 404 است، صفحه ای به نام 404.php باید ایجاد شود. سپس در فایل .htaccess تنظیمات زیر را وارد کنیم:

# custom error documents
ErrorDocument 401 /err/401.php
ErrorDocument 403 /err/403.php
ErrorDocument 404 /err/404.php
ErrorDocument 500 /err/500.php

البته شما میتوانید صفحات خارج از وب سایت را نیز بعنوان صفحات خطای سفارشی معرفی کنید که البته انجام این کار توصیه نمیشود.

جالب اینجاست که شما میتوانید مستقیما از کدهای HTML نیز استفاده نمایید به شرطی که تمام کدهای HTML خود را در یک صفحه بنویسید. توجه داشته باشید که کد را با یک ” آغاز کنید اما در خاتمه از ” استفاده ننمایید

# quick custom error "document"..
ErrorDocument 404 "<html><head><title>NO!</title></head><body><h2><tt>There is nothing here.. go away quickly!</tt></h2></body></html>

 پوشه های محافظت شده رمزدار (password protected directories)

 در برخی شرایط این نیاز احساس میشود که به محتویات برخی پوشه ها، تنها برخی کاربران خاص یا برخی دسترسی داشته باشند. برای انجام چنین کاری میتوانید از کدی شبیه به کد زیر استفاده نمایید

AuthType Basic
AuthName "restricted area"
AuthUserFile /usr/local/var/www/html/.htpasses
require valid-user

شما متیوانید از همین مکانیسم برای احراز هویت برخی انواع خاص از درخواستها ( requests ) نیز استفاده نمایید. مثلا در کد زیر تنظمیاتی صورت گرفته است که همه بتوانند از متدهای GET و PUT استفاده نمایند اما تنها دسته بخصوصی از کاربران بتوانند POST انجام دهند

AuthType Basic
AuthName "restricted area"
AuthUserFile /usr/local/var/www/html/.htpasses
<Limit POST>
require valid-user
</Limit>

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

htpasswd -c /usr/local/var/www/html/.htpasses mohammad

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

htpasswd -c c:/unix/usr/local/Apache2/conf/.htpasses mohammad

دقت کنید که فایلی که در این مرحله ایجاد شده و کلمات عبور در آن نگهداری میشوند در این مثال .htpasses نام دارد. نکته ای که بد نیست مد نظر داشته باشید این است که وب سرور آپاچی فایلهایی که با نام .ht شروع میشوند را مخفی کرده و از آنها محافظت میکند. بنابراین این ایده خوبی است که شما فایلهای مهم و حساس خود را با نامهای اینچنینی آغاز نمایید. اگر چه اینکار الزامی نیست و شما هر نامی که بخواهید میتوانید به فایل مورد نظر انتساب دهید

htpasswd -c ../conf/.htpasses mohammad

زمانی که کاربران در سایت لاگین کردند شما میتوانید به متغیر محلی remote_user دسترسی داشته باشید تا به کمک آن عملیات مورد نظر خود را انجام دهید. مثلا کد زیر که در مورد آن بعدا توضیح خواهیم داد :

the remote_user variable is now available..
RewriteEngine on
RewriteCond %{remote_user} !^$ [nc]
RewriteRule ^(.*)$ /users/%{remote_user}/$1

خوب توی پارت بعدی سعی میکنم به صورت جامع و کامل مبحث مربوط به htaccess رو جمع بندی کنم.

پیروز باشید.

 



برچسب ها : , , ,