تبلیغات
آموزش - مطالب لینوکس/یونیکس

راهنمای کاربردی فایل های .htaccess

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

اکنون هدف از نگارش این پست، ارائه راهنمایی هایی برای برنامه نویسان تازه کاری است که به هر نحو نیاز به تغییر و تفسیر این فایل پیکربندی را دارند. در ادامه مهم ترین و کاربردی ترین دستورات به صورت یک به یک توضیح داده می شود:
1- در نظر گرفتن صفحه پیشفرض در دایرکتوری:
DirectoryIndex index.html index.php index.htm
سیستم به صورت اتوماتیک هر کدام از فایل های موجود از بین لیست را به عنوان صفحه پیشفرض معرفی می کند. اولویت بر اساس تعریف است.

2- ایجاد ارور شخصی سازی شده:
ErrorDocument 404 errors/404.html
هنگامی که وب سرور با خطا های گوناگونی برخورد کرد، در این مثال 404، شما می توانید صفحه را به یک آدرس از پیش تعریف شده نظیر گزینه بالا منتقل کنید، همینطور طبق کد پایین امکان ایجاد وضعیت داینامیک را نیز برای اررور های گوناگون در اختیار خواهید داشت:
ErrorDocument 404 /cgi-bin/error/error?404

3- کنترل سطح دسترسی به فایل ها و دایرکتوری:
بیشترین کاربردی که فایل های .htaccess دارند، تنظیم سطح دسترسی به یک دایرکتوری، مسیر یا فایل مشخصی است؛ به عنوان مثال ممکن است دایرکتوری خاصی در صفحه فراخوانی شده باشد، اما شما نخواهید تا کاربران به صورت مستقیم به فایل های داخل آن دسترسی داشته باشند، بنابراین می توانید از دستور زیر در فایل .htaccess درون دایرکتوری استفاده نمائید:
deny from all
شما هم چنین می توانید همین تعریف را بر اساس IP ها نیز تفکیک کنید، به عنوان مثال شما دوست دارید یک رنج از IP قادر به بازدید صفحه باشند، اما سایر IP ها نتوانند به آن دسترسی بیابند که از دستور زیر طبق نیاز استفاده خواهید نمود:
order deny,allow
deny from all
allow from 192.168.0.0/24
کلمه all به همه انواع درخواست ها اشاره دارد و به جای آن می توانید همانطور که گفتیم از IP آدرس ها استفاده نمائید.
گاهی دوست دارید یک IP مشخص را از دسترسی به صفحه منع کنید، مانند روباتی که از قوانین متداول پیروی نمی کند، بنابراین از کدی شبیه به زیر استفاده می کنید:
order allow,deny
deny from 83.222.23.219
allow from all

4- اصلاح متغیر های محلی:
متغیر های محلی شامل اطلاعاتی است که توسط فراخوانی های سمت سرور و CGI مورد استفاده قرار می گیرد. ایجاد (Set) و حذف (Unset) کردن این متغیر ها از دستور SetEnv و دستور UnSetEnv امکان پذیر است. مثال:
SetEnv SITE_WEBMASTER "Hamid Yousefi"
SetEnv SITE_WEBMASTER_URI mailto:mails.Mihanblog@gmail.com
UnSetEnv REMOTE_ADDR

5- ریدایرکت نوع 301 با استفاده از .htaccess:
برای ریدایرکت از یک مستند قدیمی به یک آدرس جدید، از این کد استفاده خواهید نمود:
Redirect 301 /beta/yourpage.html http://mydom.ir/final/hello.html
برای انتقال کامل یک دایرکتوری به یک آدرس جدید نیز می توانید از کد زیر استفاده نمائید:
RedirectMatch 301 /master(.*) http://yourdomain.com/$1

6- پیاده سازی طرح کش:
ایجاد طرح کش (ذخیره سازی موقت) برای افزایش کارایی سیستم است. شما می توانید منابع استاتیک یا هر نوع داده منحصر به فردی را طبق دستورات زیر وارد طرح کش نمائید:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
   Header set Cache-Control "public"
   Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
   Header unset Last-Modified
</FilesMatch>
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
   Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>
<FilesMatch "\.(js|css)$">
   SetOutputFilter DEFLATE
   Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
</FilesMatch>

7- فشرده سازی خروجی با استفاده از GZip:
با اضافه کردن دستورات زیر شما همه منابع js و css و ... خود را با استفاده از فشرده ساز GZip به خروجی خواهید فرستاد:

<IfModule mod_gzip.c>
    mod_gzip_on         Yes
    mod_gzip_dechunk  Yes
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include handler   ^cgi-script$
    mod_gzip_item_include mime      ^text/.*
    mod_gzip_item_include mime      ^application/x-javascript.*
    mod_gzip_item_exclude mime      ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
کد بالا تنها زمانی کارایی خواهد داشت (همانطور که در دستور IfModule مشخص است) که ماژول mod_gzip بر روی وب سرور فعال باشد. در صورتی که وب سرور شما از ماژول mod_deflate پشتیبانی می کند، می توانید از کد زیر استفاده کنید:

<Location>
    SetOutputFilter DEFLATE
      SetEnvIfNoCase Request_URI  \
        \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI  \
        \.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
</Location>
در صورتی که وب سرور شما از mod_deflate هم پشتیبانی نمی کند، از دستورات زیر استفاده کنید:
<FilesMatch "\.(txt|html|htm|php)">
    php_value output_handler ob_gzhandler
</FilesMatch>
در وضعیت عادی، وب سرور ها این دستور را اجرا خواهند نمود.

8- ریدایرکت مرورگر به https:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

9- بازنویسی (ReWrite) آدرس ها (URL) با استفاده از .htaccess
برای دسترسی به آدرس index.php?do=contact از طریق آدرس contact.html می توانید از کد زیر استفاده نمائید:
RewriteEngine on
RewriteRule ^contact\.html$ index.php?do=contact
برای بازنویسی حالاتی نظیر همانند سازی دسترسی products/32.html به index.php?do=products&id=32 دستور زیر می تواند مفید باشد:
RewriteEngine on
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

10- بازنویسی آدرس های بدون پیشوند www به آدرس های دارای www از همان آدرس:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^Mihanblog\.com$
RewriteRule (.*) http://www.Mihanblog.com/$1 [R=301,L]
بازنویسی آدرس yoursite.com/xyz به index.php?username=xyz
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

11- بازنویسی دامنه اصلی به ساب دامنه یا دایرکتوری زیر شاخه public_html:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^Mihanblog\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.Mihanblog\.com$
RewriteCond %{REQUEST_URI} !^/beta/
RewriteRule (.*) /beta/$1

12- کنترل دسترسی به یک فایل:
در اغلب اوقات فایل .htaccess سطوح دسترسی به کل دایرکتوری را تنظیم می کند، اما امکان تعیین سطح دسترسی به یک فایل منحصر به فرد را نیز داریم. می توان برای این کار از کد زیر استفاده نمود:
<Files quiz.html>
   order deny,allow
   deny from all
   AuthType Basic
   AuthName "Characterology Student Authcate"
   AuthLDAP on
   AuthLDAPServer ldap://directory.characterology.com/
   AuthLDAPBase "ou=Student, o=Characterology University, c=au"
   require valid-user
   satisfy any
</Files>
این ها همه آن چیزی نیست که از فایل .htaccess برای باز تنظیم آن می توان استفاده کرد، اما عملا مهم ترین آن ها هست.


مشکلات ارتباط راه دور شبکه را حل کنید

مام توصیه‌ها و مطالبی که در این مقاله ذکر می‌شود با در نظر گرفتن این که شبکه شما در حال اجرا است بیان می‌گردد. همچنین فرض ما این است که شما به اینترنت متصل هستید

 قبل از ادامه، شما باید بدانید چگونه پنجره‌ی CLI را باز کنید. در ویندوز XP، برروی Start کلیک کنید، Run را انتخاب نمائید، CMD را در فیلد Open تایپ کنید و Enter را فشار دهید. در ویندوز ویستا یا ویندوز 7، برروی دکمه‌ی Start کلیک و CMD را در داخل فیلد Start Search تایپ کنید و سپس برروی آیکون CMD که در نتایج ظاهر می‌شود کلیک نمائید.

شبکه را Ping کنید

کلیه‌ی میزبان‌های اینترنت یا شبکه،کامپیوترها، مسیریاب‌ها و تمام ابزاری که قابلیت استفاده از اینترنت را دارند به منظور شناساندن منحصر به فرد و متفاوت خود از یک آدرس IP (که رشته‌ای متشکل از چهار گروه اعداد است که با نقطه از هم جدا شده‌اند؛ مثل 233.122.0.2) استفاده می‌کنند. شما ممکن است از این اعداد برای دسترسی به لاگ‌این شبکه استفاده کرده باشید. این آدرس همچنین می‌تواند یک آدرس وب (که host name یا اسم میزبان نام دارد) یا نام DNS برای دسترسی به یک Login باشد. آدرس‌های IP و اسامی DNS را می‌توان به جای هم به کار برد. با استفاده از هر یک از این‌ها، یک فرمان ping می‌تواند مشخص کند که آیا کامپیوتر و شبکه می‌توانند داده‌های اساسی را مبادله کنند یا خیر.
 از پنجره‌ی خط فرمان، ping را با یک فضای خالی و آدرس IP یا اسم DNS تایپ کنید (مثلا ping 167.154.16.27 یا ping www.corporatenetwork.com) و دکمه Enter را فشار دهید. اگر یک پیام time-out مشاهده کردید، چند ثانیه صبر کنید. یک هشدار time-out در صورتی که پاسخ بیش از یک ثانیه به طول بینجامد ظاهر می‌شود.
اگر پاسخ نشان‌دهنده‌ی این باشد که بسته‌های دیتا ارسال و دریافت شده‌اند پس کامپیوتر شما در حال مبادله‌ی داده‌ها با آدرس شبکه است. شما می‌توانید برای ست‌آپ یک اتصال اختصاصی و تنظیمات ستینگ به بخش "متصل شوید"  این مقاله مراجعه کنید. اگر از طریق یک آدررس وب به سایت دسترسی پیدا کرده‌اید قبل از مراجعه به بخش "متصل شوید" به بخش Look It Up بروید.
اگر پاسخی دریافت کردید که در بر دارنده‌ی چیزی مربوط به یک دامنه‌ی غیرموجود بود، به احتمال زیاد برای لاگ‌این از آدرس IP یا نام DNS نادرست استفاده کرده‌اید. یک بار دیگر آدرس را چک و سعی کنید به طور عادی متصل شوید. (اگر با یک آدرس IP لاگ‌این می‌کنید برای چک کردن سریع اعتبار آن به مرحله‌ی Look It Up بروید). 
اگر یک پیام خطای مبادله دریافت کردید، داده‌های ping شده از PC شما بیرون نخواهند رفت. احتمالا دیواره آتش از دسترسی شما به شبکه جلوگیری به عمل می‌آورد. در نتیجه شما باید این سایت را به عنوان یک سایت مجاز به دیواره‌ی آتش خود اضافه کنید (برای آگاهی از چگونگی انجام این کار به مستندات دیواره‌ی آتش خود مراجعه کنید).
اگر پس از گذشت چندین time-out پاسخ دریافت کردید، ممکن است پاسخ شبکه به اتصال شما کُند باشد و یوتیلیتی دسترسی به شبکه یا مرورگر قبل از اتصال متوقف شده باشد. مدت زمان پاسخ‌گویی را با اضافه کردن سوئیچ –t (ping –t و به دنبال آن آدرس IP یا نام DNS) افزایش دهید. این کار، آدرس را به طور نسبی ping می‌کند. پس از انجام چند Ping، برای مشاهده‌ی بسته‌های دیتا دکمه‌های CTRL-Break را فشار دهید. اگر هنوز هم پاسخی دریافت نکردید، کار را کمی ادامه دهید و سپس CTRL-C را فشار دهید. اگر هرگز پاسخی دریافت نکردید یا تعداد Pingها از حد معقولی بیش‌تر شد برای کمک، به بخش "مسیر را ردیابی کنید" همین مقاله بروید.
اگر پیامی دریافت کردید که نشان می‌داد درخواست ping قادر به یافتن میزبان نیست و یا پاسخ دریافتی نشان‌گر این بود که تعداد بسته‌های ارسالی  صفر است شبکه قادر نیست به ping شما پاسخ دهد. تغییراتی که برروی شبکه یا پیکره‌بندی آن اعمال شده ممکن است باعث جلوگیری از دسترسی شما شده باشد. بنابراین باید برای کمک با مدیر شبکه تماس بگیرید.

به دنبال شبکه بگردید

شما می‌توانید از یک نام DNS به یک آدرس IP مراجعه کنید و بالعکس. از پنجره‌ی خط فرمان، nslookup را با یک فاصله و به دنبال آن اسم DNS یا آدرس  IP را وارد کنید و Enter را فشار دهید.
اسم DNS و اعدادی را که در خطوطی که با Name: و Address: آغاز می‌شوند یادداشت کنید. اگر یک آدرس IP‌ را چک می‌کنید نام DNS باید به تائید آن کمک کند. اگر نتوانستید چیزی را تشخیص دهید برای تائید آدرس IP با مدیر شبکه تماس بگیرید.
اگر از یک نام DNS‌ استفاده می‌کنید، ممکن است ویندوز با نمایش و بازشناسی DNS name مشکل داشته باشد (برگردان اسم DNS به یک آدرس IP). از همان پنجره‌ی خط فرمان دو ping انجام دهید؛ اولی را با استفاده از نام DNSی که یادداشت کرده بودید و دومی را با استفاده از آدرس IP. زمان‌های دسترسی این دو و همچنین بسته‌های ارسالی و دریافتی را با هم مقایسه کنید. اگر در رفتار ping آدرس IP در مقابل نام DNS تفاوت فاحش و عمده‌ای مشاهده کردید به بخش متصل شوید این مقاله بروید.

مسیر را ردیابی کنید

ردیابی مسیر بسته‌هایی که وارد شبکه می‌شوند به مشخص کردن مشکلات کمک می‌کند. از پنجره‌ی خط فرمان، tracert را با یک فاصله و به دنبال آن نام DNS یا آدرس IP‌ را تایپ کنید و Enter را فشار دهید. خط‌هایی با زمان‌های دسترسی و آدرس‌های IP‌ ظاهر خواهد شد. چند خط آخر باید نام دامنه را نشان بدهد (آخرین خط، شبکه شما است). این، نشان‌گر مسیر و مدت زمانی که سفر بین دو گره موجود برروی اینترنت به طول می‌انجامد است.
اگر یک hop اولیه بیش از حد طول کشید یا باعث hang شدن ردیابی شد با ISP خود تماس بگیرید. چنان‌چه قبل از این که کارها خراب شود با تعداد زیادی hop مواجه شدید ممکن است مشکل به یک درگاه یا مسیریاب که در نزدیکی محل شبکه راه دور قرار گرفته است مربوط باشد. برای دریافت کمک با مدیر شبکه تماس بگیرید.

متصل شوید

ست‌آپ یک اتصال VPN‌مستقیم، یک اینترفیس لاگ‌این اختصاصی در اختیار شما قرار می‌دهد و به شما اجازه می‌دهد مسائل مربوط به DNS را حل کنید. 
به منظور ست‌آپ اتصال در ویندوز XP، Control Panel را در منوی Start انتخاب کنید. برروی Network and Internet Connections کلیک کنید و سپس Create A Connection To The Network At Your Workplace را انتخاب کنید. در ویندوز 7 / ویستا، برروی Control Panel در منوی Start و سپس Network And Internet‌(در نمای Category) و پس از آن Network And Sharing Center کلیک کنید. در ویندوز ویستا برروی Set Up A Connection Or Network یا در ویندوز 7 تحت Change Your Network Settings برروی Set Up A New Connection Or Network کلیک کنید. گزینه‌ی Connect To A Workplace و سپس Use My Internet Connection را انتخاب کنید. (ویندوز ویستا و 7 smart card را به عنوان یک گزینه‌ی اتصال ارائه می کنند اما در این‌ مقاله به آن نمی‌پردازیم). 
Virtual Private Network Connection را انتخاب کنید، اسمی برای آن این اتصال برگزینید و نام DNS یا آدرس IP را وارد نمائید. اگر از شما سوال شد آیا می‌خواهید یک اتصال را شماره‌گیری کنید گزینه‌ی No را انتخاب کنید (مگر این که فقط به اینترنت dial-up دسترسی داشته باشید) و برروی Finish (ویندوز XP) یا Connect (ویندوز ویستا / 7) کلیک کنید. سیستم عامل کوشش می‌کند بدون پیکره‌بندی تنظیمات، ارتباط شما را برقرار کند. اگر این راه‌حل جواب نداد، یا اگر از ویندوز XP استفاده می‌کنید دستورالعمل‌های زیر را دنبال کنید.
در ویندوز XP به پنجره‌ی Network Connections و در ویندوز ویستا / 7 به Sharing Center برگردید و برای مدیریت اتصال‌های شبکه برروی گزینه‌ی مورد نظر کلیک کنید. برروی آیکون شبکه‌ی VPN خود کلیک راست کنید و Properties را انتخاب نمائید. سپس، برروی برگه‌ی Networking, Internet Protocol و سپس Properties کلیک کنید (در ویندوز ویستا / 7، شما باید این کار را برای TCP/IP V4 و TCP/IP V6 انجام دهید). پیکره‌بندی اتوماتیک را لغو کنید و آدرس دقیق IP و نام‌های DNS را برای شبکه وارد کنید. از اینترفیس Properties خارج شوید، برروی آیکون VPN کلیک راست کنید و برروی Connect کلیک کنید و زمانی که از شما سوال شد، اطلاعات Login خود را وارد نمائید.
اگر نمی‌توانید متصل شوید، ویندوز می‌تواند به شما کمک کند اما ممکن است به اطلاعات پیکره‌بندی پیشرفته‌تری نیاز داشته باشید. برای کسب اطلاعات بیش‌تر باید با مدیر شبکه تماس بگیرید.



آموزش با نگرشی نوین

گروه آموزش

مترجم سایت


آخرین پست ها


آمار وبلاگ

  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
  • رتبه وبلاگ در یاهو و گوگل:

    Yahoo bot last visit powered by  Ybotvisit.com

    رتبه وبلاگ در گوگل

  • SEO Stats powered by MyPagerank.Net

  • افراد آنلاین :

    web stats

  • IP free counters