آموزش وب مستریدیزاین و طراحی

راهنمای استفاده از htaccess برای طراحان و توسعه‌‌دهندگان وب

به این post امتیاز دهید

راه های مختلفی برای مدیریت و تنظیم کردن هر چه بیشتر سایت مطابق سلیقه خودتان وجود دارد. با استفاده از htaccess می‌توانید تنظیمات مختلفی در حوزه امنیت، محدود کردن دسترسی و غیره بدست آورید.

در میان ابزارهای موجود برای تغییر و سفارشی‌سازی سرور وب خود، فایل کانفیگ .htaccess یکی از برترین‌ها است. می‌توانید انواع مدارک، موتورهای تجزیه‌کننده و تغییر مسیرهای (URL Redirect) را همراه با بسیاری ویژگی‌های کلیدی دیگر به‎سرعت انجام دهید. ممکن است وبمسترهای تازه‌کار نخواهند فایل htaccess خود را مدیریت کنند.  به آنها توصیه می کنیم، فراگیری دستورات و نحوه ویرایش این فایل را فرا بگیرند.

هر کسی که می‌خواهد وب‌سایت خودش را روی یک سرور Apache راه‌اندازی کند، قطعا می‌خواهد مدیریت فایل .htaccess خود را بداند. این فایل امکانات سفارشی کردن بسیاری در اختیارتان قرار می‌دهد و روی همه زبان‌های نوشتاری وب از PHP گرفته تا Ruby می‌تواند کار کند.

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

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

سوال مهمی که باید کار را با پاسخ به آن شروع کنیم این است که: «فایل htaccess چیست؟» . یک فایل تنظیمات بسیار خاص است که توسط سرور وب Apache استفاده می‌شود. یک فایل .htaccess می‌تواند به وب سرور بگوید که انواع مختلف اطلاعات را چطور نمایش دهد و چگونه به سربرگ‌های متعدد درخواست‌های HTTP رسیدگی کند.

در واقع وسیله‌ای برای تمرکززدایی است تا تنظیمات سرور وب را سازماندهی کند. ممکن است یک سرور فیزیکی بیش از ۵۰ وب سایت مختلف را که هر کدام فایل .htaccess خود را دارند در خود جای داده باشد. این قدرت فراوانی به وبمسترها می‌دهد که از راهی دیگر نمی‌توانستند بدست آورند. اما چرا لازم است از این فایل استفاده کنیم؟

اصلی‌ترین دلیل، امنیت است. می‌توانید چند دایرکتوری خاص را از دسترسی خارج کنید یا برایشان رمز عبور بگذارید. این کار برای پروژه‌های خصوصی یا برای استفاده در سیستم‌های مدیریت محتوای جدید که می‌خواهید امنیت بیشتری داشته باشید بسیار عالی است. اما دستورهای رایج مانند تغییر مسیر پیام‌های خطای ۴۰۴ به یک صفحه وب خاص نیز وجود دارند. این امر تنها به اندازه یک خط کدنویسی فضا لازم دارد اما می‌تواند اثر بالایی روی بازخورد بازدیدکنندگان نسبت به صفحات گم شده داشته باشد.

حقیقتش را بخواهید چیز زیادی نمی‌توان برای متقاعد کردن افراد گفت تا باور کنند که شناخت فایل .htaccess ارزشش را دارد. وقتی عملکرد آن را ببینید، آن وقت به ارزش‌هایی که همراه با این فایل کانفیگ کوچک است پی می‌برید. امیدواریم ادامه متن بتواند چند موضوع قابل توجه به شما ارائه کند و وبمسترها را از اهمیت مدیریت تنظیمات .htaccess آگاه کند.

اجازه دادن یا مسدود کردن دسترسی

شناخت بازدیدکننده‌های مخرب احتمالی و مسدود کردن دسترسی آنها به وب‌سایت‌تان، از طریق این فایل امکانپذیر است. شاید این کار کمی سخت باشد، اما اگر می‌دانید که فرد یا گروهی از افراد مدتی است سایت شما را هدف قرار داده‌اند، چند راه پیش رو دارید. می توانید از یک ارجاع دامین (domain referral) استفاده کنید تا بازدیدکنندگان را توسط آدرس IP شان مسدود کنید:

order allow,deny
deny from 255.0.0.0
deny from 123.45.6.
allow from all

کدهای بالا نمونه‌ای از یک راهنمای برای استفاده از این روش هستند. دقت کنید که دومین آدرس IP، چهارمین عدد را ندارد. این کد بلاک کردن، اولین IP (یعنی ۲۵۵.۰.۰.۰) و همه IPهای داخل محدود ۱۲۳.۴۵.۶.۰-۲۵۵ را شامل می‌شود و به بقیه اجازه دسترسی می‌دهد. شاید وبمسترها از آن به اندازه دیگر تکنیک‌ها استفاده نکند اما دانستن آن مفید است.

جلوگیری از فهرست کردن دایرکتوری

گاهی رخ می‌دهد که یک دایرکتوری باز دارید که روی تنظیمات اجازه بازدید بصورت پیشفرض تنظیم شده است. این یعنی کاربران می‌توانند تمام فایل‌های فهرست شده در ساختار دایرکتوری داخلی مانند فولدر تصاویرتان را ببینند. بعضی از وبمسترها نمی‌خواهند داریکتوری‌ها فهرست شوند، خوشبختانه کد مناسب این کار را براحتی می‌توانید در یاد نگه دارید:

Options -Indexes

این راه‌حل را بارها در Stack Overflow مختلف دیده‌ایم و احتمالا یکی از ساده‌ترین قوانین در یادگیری .htaccess است.

ایجاد چند فایل .htaccess داخل هر یک از این دایرکتوری‌ها امکان پذیر است، پس شاید یکی از آنها دارای رمز باشد و بقیه نداشته باشند. همچنین می‌توانید کد Options-indexes را هم نگه دارید تا بازدیدکنندگان نتوانند محتویات فولدر website /images شما را ببینند.

رمزگذاری

رمگذاری برای دایرکتوری‌هایتان یکی از روش‌های رایج برای تامین امنیت نواحی مدیریتی و فولدرهای مهم وب‌سایت شما است. گاهی شاید فقط بخواهید به گروهی کوچکی از افراد اجازه دسترسی دهید. گاهی استفاده از رمز برای جلوگیری از هکرها و دسترسی آنها به پنل مدیریتی سایت است. در هر حال، رمزگذاری یکی از راه‌های بسیار قدرتمند برای حل بسیاری از مشکلات است.

می‌توانید از راهنماهای موجود در مورد رمزگذاری استفاده کنید تا کدهای مهم را بشناسید. لاید یک فایل رمز ایجاد کنید که اطلاعات نام کاربری/رمز عبور را در خود ذخیره می‌کند. Apache به همین روش اطلاعات ورودی کاربر را بررسی می‌کند تا تشخیص دهد اجازه دسترسی به فرد داده شود یا خیر. همچنین دقت کنید که چگونه باید یک نمونه از نام کاربری و رمز عبور خود ایجاد کنید.

برای کار ابزار htpassword generator را پیشنهاد می‌کنیم تا در وقت‌تان هم صرفه‌جویی شود. سینتکس خروجی بی نقص است و نیازی ندارید رمز عبور را خودتان تغییر دهید. یک راه بسیار خوب دیگر این است که تمام یک فهرست دایرکتوری را رمزگذاری کنید. می‌توانید نمونه ای از آن را مشاهده کنید.

AuthType Basic
AuthName "This Area is Password Protected"
AuthUserFile /full/path/to/.htpasswd
Require valid-user

امنیت در ورد پرس

برای استفاده بهینه از روش رمزگذاری، بیایید یک مثال واقعی را بررسی کنیم. این کد که کمی پیچیده‌تر است، از هر کس که به فایل wp-login.php ورد پرس دسترسی یابد می‌خواهد که هویت کاربری‌اش را احراز کند. منبع اصلی این روش را می‌توانید در Ask Apache به همراه دیگر کدهای حفاظتی ورد پرس مشاهده کنید.

<Files wp-login.php>
Order Deny,Allow
Deny from All
Satisfy Any
AuthName "Protected By AskApache"
AuthUserFile /web/askapache.com/.htpasswda1
AuthType Basic
Require valid-user
</Files>

اگر قصد دارید از این اصول .htaccess پیروی کنید، باید برای ناحیه مدیریتی هم یک رمز بگذارید. عموما افرادی که سعی دارند به زور وارد سیستم شما شوند، بیش از هر چیز به فایل wp-login.php  حمله می‌کنند. بنابراین همین چند کدی که بالاتر مثال زدیم می‌تواند امنیت کاملی برای وب سایت ورد پرس شما فراهم کند.

قوانین بازنویسی HTTP URL

بازنویسی URLها یکی از رایج ترین کاربردهای فایل های .htaccess است. به کمک امکانات موجود پیشفرض در ورد پرس می‌توانید یک فایل .htaccess را از همان پنل مدیریت بسازید. این به شما اجازه می‌دهد URLهای قشنگی بسازید که ساختار .php?p=1 هم ندارند.

بد نیست نگاهی به نمونه‌هایی از این بازنویسی‌ها بیاندازید تا روش تبدیل خط زیرین به خط تیره را بیاموزید، چون شامل بخش زیادی از عناصر مهم هستند.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
  
RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]
  
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://d.com/$1 [R=301,L]

تقریبا همیشه می‌توان RewriteEngine و RewriteBase را مطابق این دستورها تنظیم کرد. اما باید RewriteEngine برای همه چیز روشن باشد تا کار کند. راهنماهای آنلاین متعددی در خصوص نحوه فعال کردن mod_rewrite وجود دارد.

دقت کنید که سینتکس از یک الگوی RewriteRules در بالا پیروی می‌کند. از این اصول برای هماهنگی با مواردی که بعنوان یک درخواست HTTP ارسال شده اند استفاده می‌شود. به آنها توسط یک RewriteRule پاسخ داده می‌شود که در این مثال، همه چیز را به یک دامین دیگر d.com تغییر مسیر می‌دهد. کروشه‌های انتهایی مانند [R=301,L] را پرچم‌های بازنویسی (rewrite flags) می‌نامند که اهمیت زیادی دارند اما در واقع یک امکان اضافه هستند.

سینتکس mod_rewrite کمی گیچ‌کننده است اما نترسید. قطعه‌ها در مثال‌های دیگر بسیار ساده‌تر بنظر می‌رسند.

پیشنهاد می‌کنیم حتما از این اپلیکیشن وب mod_rewrite استفاده کنید.

به کمک آن می‌توانید نمونه کدهایی با استفاده از URLهای حقیقی بسازید. این ابزار شگفت‌انگیزی است چون می‌توانید در سینتکس چندین مورد را بررسی کنید و ببینید چه عملکردی در قوانین بازنویسی دارند. این نمونه‌ای ساده از این نوع است:

RewriteRule ^dir/([0-9]+)/?$ /index.php?id=$1 [L]

سعی نکنید همه این مطالب را با هم فرا بگیرید. احتمالا ۳ الی ۴ ماه زمان خواهد برد تا واقعا با نحوه بازنویسی URL ها با [۰-۹a-zA-Z]+ و الگوهای مشابه آشنا شوید. تمرین را ادامه دهید و به شما قول می‌دهیم بعد از تمرینات کافی به راحتی موضوعات بدیهی آنها را در ذهن داشته باشید.

قطعه‌های کد برای وبمسترها

ما عاشق قطعه هایی با کاربرد آسان هستیم و می‌خواهیم مجموعه‌ای کوچک از کدهای مربوط به .htaccess را برای وبمسترها ارائه کنیم. هر یک از این ایده ها می‌تواند در کنار دیگر کدهای بلوک کردن برای فایل .htaccess شما مناسب باشد. اکثر این قطعه‌ها برای حل سریع مشکلات یا خطاهای موجود در محیط سرور وب کاربرد دارند. تصویر کنید که یک تنظیم عالی Apache برای وبمسترهای جدیدی فراهم شده است که به تازگی در فضای آنلاین شروع به کار کرده‌اند.

تنظیم فهرست دایرکتوری

دستور مربوط به فهرست دایرکتوری 0DirectoryIndex) معمولا در یک خط استفاده می‌شود. می‌توانید به Apache بگویید با کدام فایل‌ها همانند فایل‌های «اصلی» برخورد کند. بطور پیشفرض فایل‌هایی مانند index.html، index.php، index.asp و دیگر فایل‌های فهرستی را انتخاب می‌کند. اما با استفاده از این قطعه کد که در زیر می‌بینید، می‌توانید این مدرک اصلی را به هر چه می‌خواهید تبدیل کنید:

DirectoryIndex index.html index.cgi index.php

ترتیب مدارک باید از مهم‌ترین مدرک شروع شود و به سمت مدارک با اهمیت کمتر ادامه پیدا کند. در نتیجه اگر یک فایل  HTML یا CGI نداشتیم، در بازگشت به index.php بر می‌گردد. حتی می‌توانید نام این فایل‌ها را همانند home.php یا someotherfile.php که همگی سینتکس‌های شناخته شده‌ای هستند انتخاب کنید.

قرار دادن دامین با www یا بدون www

اگر بین www.domain.co  و یا فقط domain.com انتخاب نکرده باشید، گوگل می‌تواند با هر دو نسخه از دامین وب‌سایت شما کار کند. اما تجربه نشان داده است که بهتر است یکی از آنها را انتخاب کرده و بکمک .htaccess بعنوان تنها گزینه موجود مشخص کنید. به این ترتیب گوگل URLهای مختلفی را که برخی به دامین فرعی www اشاره دارند اما برخی ندارند فهرست نخواهد کرد.

# Force WWW Subdomain
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
 
# No Subdomain
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

این قطعه‌های کد از یک مجموعه CSS-Tricks گرفته شده است و راه‌حلی بسیار کاربردی ارائه می‌کند. بهتر است دامین خود را به هر شکلی که برای سایت‌تان بهتر است تغییر دهید. در غیر این صورت مشکلاتی بوجود خواهد آمد که بلافاصله متوجه‌شان می‌شوید. اما باز هم اکیدا توصیه می‌کنیم تنها یکی از این دو گزینه را انتخاب کنید و آن را در اولویت اول بعد از راه‌اندازی یک وب‌سایت می‌دانیم.

دانلود اجباری فایل‌های چند رسانه‌ای

برخی دیگر از قطعه کدهای مهم، به برخی انواع فایل های چندرسانه‌ای بجای اینکه فقط در مرورگر نمایش داده شوند،اجازه دانلود اجباری را می‌دهند. اولین مثالی که به ذهن می‌رسد فایل‌های PDF و فایل‌های صوتی MP3 است که با قابلیت دانلود نمایش داده می‌شوند، اما چطور مطمئن شویم قابل دانلود هستند؟ برای این موضوع توانستیم قطعه کد زیر را بدست آوریم:

AddType application/octet-stream .zip .mp3 .mp4

می‌توانید در صورت دلخواه انواع فایل‌های دیگری را هم به انتهای این کد اضافه کنید. همه فایل‌های چند رسانه‌ای که از نوع octet-stream MIME استفاده می‌کنند، قبل دانلود خواهند بود. اجبار این کار از طریق فایل .htaccess راهی مستقیم برای اطمینان از این است که مردم قادر به مشاهده این فایل‌ها روی مرورگر نباشند.

مدارک خطای سفارشی

آخرین نکته‌ای که می‌خواهیم اضافه کنیم، یک قالب کامل از مدارک خطای سفارشی است. معمولا این کدهای عددی تنها در سمت سرور دیده می‌شوند. اما مدارک خطای فراونی هستند که بهتر است با آنها آشنا باشید. چند نمونه از آنها را می‌توان خطاهای ۴۰۳/۴۰۴ و تغییر مسیر ۳۰۱ نام برد.

این قالب کدهای خطا از شماره ۱۰۰ شروع شده و تا خطای ۵۰۰ ادامه پیدا می کند. لطفا توجه داشته باشید که لزوما به همه آنها احتیاجی ندارید. فقط رایج‌ترین آنها را باید بشناسید و احتمالا بد نیست در صورت نیاز چند قطعه که برایتان مبهم است را هم بررسی کنید.

اگر نتوانستید کد خاصی را بشناسید کافی است آن را در Wikipedia جستجو کنید.

ErrorDocument 100 /100_CONTINUE
ErrorDocument 101 /101_SWITCHING_PROTOCOLS
ErrorDocument 102 /102_PROCESSING
ErrorDocument 200 /200_OK
ErrorDocument 201 /201_CREATED
ErrorDocument 202 /202_ACCEPTED
ErrorDocument 203 /203_NON_AUTHORITATIVE
ErrorDocument 204 /204_NO_CONTENT
ErrorDocument 205 /205_RESET_CONTENT
ErrorDocument 206 /206_PARTIAL_CONTENT
ErrorDocument 207 /207_MULTI_STATUS
ErrorDocument 300 /300_MULTIPLE_CHOICES
ErrorDocument 301 /301_MOVED_PERMANENTLY
ErrorDocument 302 /302_MOVED_TEMPORARILY
ErrorDocument 303 /303_SEE_OTHER
ErrorDocument 304 /304_NOT_MODIFIED
ErrorDocument 305 /305_USE_PROXY
ErrorDocument 307 /307_TEMPORARY_REDIRECT
ErrorDocument 400 /400_BAD_REQUEST
ErrorDocument 401 /401_UNAUTHORIZED
ErrorDocument 402 /402_PAYMENT_REQUIRED
ErrorDocument 403 /403_FORBIDDEN
ErrorDocument 404 /404_NOT_FOUND
  
ErrorDocument 405 /405_METHOD_NOT_ALLOWED
ErrorDocument 406 /406_NOT_ACCEPTABLE
ErrorDocument 407 /407_PROXY_AUTHENTICATION_REQUIRED
ErrorDocument 408 /408_REQUEST_TIME_OUT
ErrorDocument 409 /409_CONFLICT
ErrorDocument 410 /410_GONE
ErrorDocument 411 /411_LENGTH_REQUIRED
ErrorDocument 412 /412_PRECONDITION_FAILED
ErrorDocument 413 /413_REQUEST_ENTITY_TOO_LARGE
ErrorDocument 414 /414_REQUEST_URI_TOO_LARGE
ErrorDocument 415 /415_UNSUPPORTED_MEDIA_TYPE
ErrorDocument 416 /416_RANGE_NOT_SATISFIABLE
ErrorDocument 417 /417_EXPECTATION_FAILED
ErrorDocument 422 /422_UNPROCESSABLE_ENTITY
ErrorDocument 423 /423_LOCKED
ErrorDocument 424 /424_FAILED_DEPENDENCY
ErrorDocument 426 /426_UPGRADE_REQUIRED
ErrorDocument 500 /500_INTERNAL_SERVER_ERROR
ErrorDocument 501 /501_NOT_IMPLEMENTED
ErrorDocument 502 /502_BAD_GATEWAY
ErrorDocument 503 /503_SERVICE_UNAVAILABLE
ErrorDocument 504 /504_GATEWAY_TIME_OUT
ErrorDocument 505 /505_VERSION_NOT_SUPPORTED
ErrorDocument 506 /506_VARIANT_ALSO_VARIES
ErrorDocument 507 /507_INSUFFICIENT_STORAGE
ErrorDocument 510 /510_NOT_EXTENDED

ابزارهای آنلاین برای استفاده از htaccess

نوشته های مشابه

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

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

  +  84  =  92

دکمه بازگشت به بالا