با استفاده از فایل .htaccess میتوانید بسیاری از جنبههای وب سرور آپاچی و انواع مختلف آن را کنترل کنید. در ادامه، درباره همه مواردی را که لازم است بدانید، از جمله راه اندازی صفحات خطای ویژه، دایرکتوری های محافظت از رمز عبور، تغییر مسیر و موارد دیگر اطلاعات کسب خواهید کرد.
htaccess چیست؟
فایل .htaccess یک فایل پیکربندی (configuration) است که نحوه پاسخگویی سرویس دهنده وب به درخواستهای مختلف را کنترل میکند. این فایل توسط چندین وب سرور پشتیبانی میشود، از جمله وب سرور محبوب Apache که توسط اکثر ارائه دهندگان میزبانی وب تجاری استفاده میشود.
فایلهای .htaccess در سطح یک دایرکتوری کار می کنند و به آنها اجازه میدهد تا تنظیمات پیکربندی جهانی دستورالعملهای .htaccess بالاتر را در درخت دایرکتوری (directory tree) نادیده بگیرند.
کاربرد های فایل htaccess چیست ؟
کاربردهای زیادی برای .htaccess وجود دارد، به عنوان مثال میتوانید از آن برای مثالهای زیر استفاده کنید:
- از سایت خود با رمز عبور محافظت کنید.
- یک صفحه خطای سفارشی ایجاد کنید.
- بازدیدکنندگان را به صفحه دیگری هدایت کنید.
- و …
مسدودسازی IPهای خاص
برای جلوگیری از دسترسی آدرس IP خاص (لیست سیاه) میتوانید از .htaccess استفاده کنید. این کار در صورتی مفید است که شما کاربرانی را که از آدرسهای IP خاص شناسایی کردهاید که مشکلاتی را در سایت شما ایجاد کرده اند.
همچنین میتوانید بر عکس این کار را نیز انجام دهید، همه افراد بجز بازدیدکنندگان از یک آدرس IP خاص (لیست سفید) را مسدود کنید. این درصورتی مفید است که در سایت شما لازم است دسترسی شما فقط به کاربران تایید شده محدود شود.
لیست سیاه IP
برای مسدود کردن آدرسهای IP خاص، به سادگی از دستورالعمل زیر با آدرسهای IP مناسب استفاده کنید:
order allow,deny
deny from 111.22.3.4
deny from 789.56.4.
allow from all
خط اول بیان میکند که دستورالعملهای مجاز (allow) قبل از دستورالعملهای رد (deny) ارزیابی میشوند. این بدان معنی است در همه شرایط، حالت پیش فرض مجاز خواهد بود و سپس فقط کسانی که با دستورالعملهای رد مطابقت دارند و مشخص شدهاند، رد میشوند.
اگر این بخش به صورت معکوس نوشته شده بود، آخرین چیزی که مورد بررسی قرار میگرفت، وضعیت مجاز بودن بود و به همه حالت وضعیت مجاز داده میشد و این دستورالعمل بر دستورالعملهای رد، غلبه میکرد.
به خط سوم توجه کنید
deny from 789.56.4.
این یک آدرس آی پی کامل نیست. این دستور تمامی آی پی هایی را که ابتدای آن را ۷۸۹.۵۶.۴ را تشکیل میدهد، را بلاک میکند.
شما میتوانید هر تعداد آدرس IP را که میخواهید، یکی در هر خط، با دستورالعمل رد ثبت کنید.
لیست سفید IP
عملکرد لیست سفید، برعکس لیست سیاه است. این لیست همه موارد را رد میکند، مگر مواردی را که به عنوان مجاز شناخته میشوند.
همانطور که حدس میزنید، دستورالعمل سفارش (order) باید معکوس شود، به طوری که ابتدا همه موراد رد میشوند، اما سپس آدرسهای خاص مجاز شناخته میشوند.
order deny,allow
deny from all
allow from 111.22.3.4
allow from 789.56.4.
جلوگیری از عمل Hotlink
Hotlinking به معنای پیوند دادن به منابع، از دامنههای دیگر به جای بارگذاری محتوا در سرور خود و سرویس دهی به آن است.
فرض کنید، شما در وب سایتی یک تصویر پیدا کرده اید که مناسب کار شما است و میخواهید از آن در سایت خود استفاده کنید. حتی اگر برای چند لحظه مشکلات مربوط به کپی رایت را نادیده بگیرید، میتوانید تصویر را دانلود کنید، آن را در وب سایت خود آپلود کنید و مانند حالت عادی آن عکس را در صفحه خود قرار دهید.
مثل:
<img src=”http://yourdomain.com/image.jpg”>
اما اگر تنبلی کنید، یا میخواهید در پهنای باند خود صرفه جویی کنید، یا نمیدانید چگونه یک فایل را آپلود کنید، میتوانید مستقیما آن را به صورت فایل اصلی جایگذاری کنید.
<img src=”http://originaldomain.com/image.jpg”>
به این کار هات لینکینگ گفته میشود. این کار در فایلهای CSS و JS نیز اتفاق میافتد، اما استفاده از تصاویر رایج ترین است.
برخی از وب سایتها و یا میزبانها انجام این کار چندان برایشان مهم نیست، شما میتوانید تصاویر را از سایت ویکی پدیا هات لینک کنید، بدون اینکه کسی ناراحت شود. برخی وبسایتها حتی این کار را مورد تشویق قرار میدهند.
به عنوان مثال، JQuery کتابخانههای JS خود را از طریق CDN (شبکه تحویل محتوا) فراهم میکند، بنابراین شما میتوانید مستقیما به آن hotlink کنید بدون اینکه لازم باشد آن را بارگذاری کرده و از سرور خود به آن سرویس دهید.
اما بسیاری از میزبانان وب، هات لینک را نوعی سرقت پهنای باند و منابع میدانند.
برای اینکه اطمینان حاصل کنید و همچنین یک سایت نسبتاً کوچک را اداره میکنید و توانایی پرداخت هزاران یا دهها هزار درخواست روزانه برای منابعی را ندارید که هیچ ارتباطی با بازدیدکنندگان واقعی سایت شما ندارند، میتوانید از هاتلینک جلوگیری کنید.
اگر با هات لینکینگ مشکلی دارید، می توانید آن را با برخی از قوانین mod_rewrite اضافه شده به فایل .htaccess غیرفعال کنید.
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www.)?example.com/.*$ [NC]
RewriteRule .(gif|jpg|jpeg|png|js|css)$ – [F]
حتما عبارت example.com را در خط سوم به نام دامنه واقعی خود تغییر دهید. با این کار هیچ درخواستی از دامنه شما وارد نمیشود مگر اینکه که بررسی شود که آیا با یکی از پسوندهای فایل مشخص شده در خط چهارم مطابقت دارد یا نه. در صورت تطابق، درخواست ناموفق خواهد بود.
اگر میخواهید پسوندهای فایل دیگری اضافه کنید، میتوانید به راحتی خط آخر را ویرایش کنید.
از اینجا بخوانید :آموزش ثبت سایت در سرچ کنسول گوگل به همراه عکس
اعمال رمز عبور برای دایرکتوری (Password Protection)
هدف اصلی از فایلهای .htaccess محدود کردن دسترسی به بعضی از دایرکتوریها به ازای هر کاربر بود. بنابراین با هم این مورد را نیز بررسی میکنیم.
.htpasswd
نامهای کاربری و رمزهای عبور برای سیستم .htaccess در یک فایل .htpasswd ذخیره میشوند.
هرکدام در یک خط با فرمت زیر ذخیره میشوند:
username:encryptedpassword
برای مثال:
johnsmith:F418zSM0k6tGI
مهم است که بدانیم یک رمز عبور ذخیره شده در فایل یک رمز عبور واقعی نیست که برای ورود به سیستم استفاده میشود.
این بدان معنی است که رمز عبور از طریق الگوریتم رمزگذاری، رمزگذاری میشود و نتیجه آن ذخیره میشود. هنگامی که یک کاربر وارد سیستم میشود، رمز عبور به صورت متن ساده وارد میشود و از طریق همان الگوریتم مجدد بررسی میشود. اگر ورودی یکسان باشد، گذرواژه ها مطابقت دارند و به کاربر اجازه دسترسی داده میشود.
ذخیره رمزهای عبور از این طریق باعث امنیت بیشتر آنها میشود، اگر کسی بخواهد به پرونده .htpasswd شما دسترسی پیدا کند، فقط رمزهای عبور هش شده را میبیند، نه نسخههای اصلی وارد شده در سایت و هیچ راهی برای بازسازی نسخههای اصلی از هش وجود ندارد، این کار یک رمزگذاری یک طرفه است.
میتوانید از چندین الگوریتم مختلف هش کردن استفاده کنید:
- الگوریتم های امن – از یکی از این موارد استفاده کنید
- bcrypt – این مورد یکی از امن ترین، در عین حال کندترین روشهای محاسبه است. این روس توسط Apache و Nginx پشتیبانی میشود.
- md5 – این الگوریتم پیش فرض هش است که توسط نسخههای فعلی Apache استفاده میشود. این مورد توسط Nginx پشتیبانی نمیشود.
- الگوریتم های ناامن – از این موارد استفاده نکنید
- crypt () – این تابع هش پیش فرض است، اما از امنیت بالایی برخوردار نیست.
- SHA و Salted SHA.
ارجاع به وب سایتهای دیگر
یکی از رایج ترین موارد استفاده از پروند های .htaccess ، هدایت و یا ارجاع URL است. وقتی URL یک داکیومنت یا منبع تغییر کردهاست باید از ریدایرکت URL استفاده شود. این امر به ویژه اگر وب سایت خود را دوباره سازماندهی کرده یا نام دامنه را تغییر داده باشید بسیار مفید خواهد بود.
ریدایرکت ۳۰۱ و ۳۰۲
از نظر مرورگر، دو نوع ریدایرکت وجود دارد، ۳۰۱ و ۳۰۲ (این اعداد به کد خطای تولید شده توسط وب سرور اشاره دارد.)
۳۰۱ به معنای «جابجایی دائمی» است، در حالی که ۳۰۲ به معنای «به طور موقت منتقل شده» است. در اکثر موارد، شما ممکن است بخواهید از ۳۰۱ استفاده کنید. این ویژگی باعث حفظ هرگونه حق امتیاز سئو در URL اصلی میشود و آن را به صفحه جدید منتقل میکند.
این همچنین باعث میشود بیشتر مرورگرها بوک مارکهای خود را به روز کنند. اکثر مرورگرها مپینگ قدیمی به جدید را نیز ذخیره میکنند، بنابراین وقتی یک لینک و یا یک کاربر سعی در دسترسی به نسخه اصلی دارد، آنها به سادگی درخواست URL جدید میکنند. اگر URL به طور دائم تغییر کرده باشد، این کارها همه با نتایج مطلوبی همراه خواهند بود.
دلایل بسیار کمی برای استفاده از ریدایرکت ۳۰۲ وجود دارد، چرا که معمولا دلیل بسیار کمی برای تغییر موقت URL وجود دارد. تغییر URL همیشه نامطلوب است، اما گاهی اوقات لازم است. تغییر موقت آن، با برنامه ریزی برای تغییر در آينده، یک ایده بد است و تقریبا همیشه قابل اجتناب و میتوان از آن جلوگیری کرد.
از اینجا بخوانید :ریدایرکت ۳۰۱ چیست و چرا برای سئو مهم است
کنترل نمایش لیست فایلهای درون یک دایرکتوری (Directory Browsing)
کنترل نمایش لیست فایلهای درون یک دایرکتوری به بازدیدکنندگان سایت شما این امکان را میدهد تا محتوای پوشههای وب سایت شما را مشاهده و مرور کنند. هر کسی در وب میتواند به طور بالقوه از دایرکتوری در سایت شما بازدید کند، ببینید چه فایلهایی در آنجا وجود دارد و آنها را به میل خود باز کند. به طور معمول، میزبان وب به دلایل امنیتی مرور فهرست را غیرفعال میکند. با این حال، هنوز میزبانهای وب زیادی وجود دارد که این انتخاب را غیرفعال نمیکنند.
به صورت اساسی، اگر مرور لیست فایلهای درون یک دایرکتوری فعال باشد و در فهرست مشخصی فایل index.html یا index.php نداشته باشید، مرورگر وب محتوای دایرکتوری را به همراه لینکی به دایرکتوری اصلی نمایش میدهد.
بدیهی است که فاش شدن کارهای داخلی وب سایت شما برای عموم میتواند هکرها را وسوسه کند یا حداقل کار آنها را آسان کند. هکرها می توانند برای یافتن سایتهایی که در آنها نمایش لیست فایلهای درون یک دایرکتوری فعال است، در گوگل جستجو کنند و سپس سایتهایی را که براساس بررسی آنها آسیب پذیری دارند را انتخاب کنند.
با ایجاد یک فولدر و اضافه کردن یک فایل اصلی متنی میتوانید بررسی کنید که آیا Directory Browsing در سایت شما فعال است یا خیر. اگر این دایرکتوری را که درست کردهاید را در مرورگر وب خود باز کنید و لینک فایل متنی را به شما نشان دهد، نمایش لیست فایلهای درون یک دایرکتوری فعال است. اگر پیام «صفحه یافت نشد» یا «ممنوع» را دریافت کردید، نمایش لیست فایلهای درون یک دایرکتوری غیرفعال است.
ساده ترین راه برای غیرفعال کردن نمایش لیست فایلهای درون یک دایرکتوری اضافه کردن یک خط به پرونده .htaccess سایت شما است. فقط توجه داشته باشید که این فقط برای سایتهایی که روی وب سرور Apache اجرا میشوند کار میکند.
بخاطر داشته باشید که ممکن است فایلهای .htaccess در چندین بخش مختلف سایت شما وجود داشته باشند، اما برای غیر فعالسازی نمایش لیست فایلهای درون یک دایرکتوری باید در فایل .htaccess که در دایرکتوری روت شما وجود دارد، تغییرات را اعمال کنید، با این کار تغییرات در تمام سایت شما اعمال میشوند.
برای اعمال این تغییرات این قدمها را دنبال کنید:
- فایل .htaccess خود را دانلود کنید و یک کپی از آن تهیه کنید. هنگام ایجاد تغییرات، همیشه باید یک کپی از پرونده .htaccess خود داشته باشید، برای مواردی که همه چیز طبق برنامه پیش نمیرود.
- این خطوط را به پرونده .htaccess خود اضافه کنید:
# Disable Directory Browsing
Options All –Indexes
- فایل .htaccess جدید را آپلود کرده و فایل موجود را بازنویسی کنید.
- اطمینان حاصل کنید که نمایش لیست فایلهای درون یک دایرکتوری غیرفعال شدهاست. میتوانید از دایرکتوری بازدید کنید که قبلاً به شما اجازه میداد محتوای دایرکتوری را مشاهده کنید و مطمئن شوید که پیام خطای «صفحه یافت نشد» یا «ممنوع» نمایش داده میشود.
جایگزینی برای فایل Index
چه اتفاقی می افتد اگر دایرکتوری پر از اسناد یا سایر منابع، فایل index.html no و صفحه راهنمای پیش فرض مشخص نشده در پرونده .htaccess وجود نداشته باشد؟
در بسیاری از موارد، نتیجه یک لیست کلی از تمام فایلهای موجود در دایرکتوری خواهد بود.
درست است. اگر فولدری در دایرکتوری میزبانی خود با تگ یا تصاویر داشته باشید و فاقد صفحه index.html باشد ، وقتی شخصی به http://yousite.com/images برود، میتواند لیستی از تمام تصاویر موجود در شما را مشاهده کند.
این حرکت رفتار پیش فرض اکثر وب سرورها است و از نظر مفهوم اصلی وب سایت به عنوان مکانی برای نگهداری و اشتراک اسناد استفاده میشود. اما این رفتار مورد نظر برای اکثر سایتها نیست.
غیرفعالسازی ایندکسها
بسیاری از حسابهای میزبانی وب به عنوان بخشی از پیکربندی (configuration) جهانی خود، این کار را غیرفعال میکنند. اما همه این کار را نمیکنند.
اگر نیاز دارید لیستهای ایجاد شده را به صورت خودکار غیرفعال کنید، انجام این کار آسان است:
Options -Indexes
فعالسازی ایندکسها
اگر وب سرور شما ایندکسها را به عنوان بخشی از پیکربندی جهانی غیرفعال کرده است، اما شما به آنها احتیاج دارد، میتوانید آنها را با برعکس دستور بالا فعال کنید.
Options +Indexes
صفحات خطای سفارشی
شما میتوانید به جای اینکه یک خطای سروری استاندارد را نمایش دهید، از .htaccess برای نمایش صفحه خطای سفارشی به بازدیدکنندگان سایتتان استفاده کنید. رایج ترین صفحه خطا، صفحات یافت نشد (۴۰۴) و ممنوع، دسترسی غیر مجاز است (۴۰۳) هستند.
کد زیر را به فایل .htaccess خود اضافه کنید:
ErrorDocument 403 http://one-example.com/forbidden.html
ErrorDocument 404 http://one-example.com/notfound.html
http://one-example.com/forbidden.html و http://one-example.com/notfound.html را جایگزین صفحات خطای سفارشی خود کنید.
عدم نمایش Directory Index
دستور Directoryindex به شما اجازه میدهد تا صفحه پیش فرض را برای نمایش هنگام دسترسی به یک فهرست مشخص کنید. به عنوان مثال، اگر بازدید کنندهای از فهرست وب سایت شما درخواستی کند، میتوانید فایل را مشخص کنید تا هنگام دسترسی به دایرکتوری دانلود شود (اگر نام فایل در درخواست اولیه مشخص نشده باشد). به عنوان مثال، به جای نمایش لیست دایرکتوری، فایل index.html نمایش داده شود و یا به جای فایل index.html ، فایل index.php نمایش داده شود.
برای راه اندازی دایرکتوری index، با دستورالعملها و راهنماییهای اصلی ، یک فایل .htaccess ایجاد کنید که شامل متن زیر است:
DirectoryIndex index.html
خطوط فوق به وب سرور آپاچی میگوید كه هر زمانی که دایرکتوری حاوی این فایل htaccess باز شد، فایل index.html نمایش داده شود.
همچنین میتوان یک دایرکتوری index را با استفاده از متن زیر در چندین فایل فراخوانی کرد:
DirectoryIndex index.html index.cgi index.php
خطوط فوق به سرور آپاچی میگوید که فایل index.html را به عنوان دایرکتوری ایندکس نمایش دهد، اگر این فایل در دسترس نیست، سپس فایل index.cgi را نمایش می دهد، و اگر این فایل موجود نیست ،index.php را نمایش دهد.
اگر این فایلهای مشخص شده موجود نباشند، وب سرور آپاچی به تنظیمات پیش فرض خود باز میگردد که میتواند یا همراه با نمایش یک پیام خطا باشد، یا لیست دایرکتوریها را نشان دهد.
تغییر مسیر WildCard از یک پوشه به یک پوشه جدید
این روش در هنگام انجام تغییر مسیرهای اصلی به کار شما میآید. به عنوان مثال، هنگام برنامه ریزی برای هدایت کل دامنه به دامنه دیگر میتوانید از این روش استفاده کنید. این امکان را به شما میدهد تا با تغییر مستقیم فایل .htaccess به صورت دستی، تغییر مسیر دهید.
تغییر مسیر فایلهای تکی
به عنوان مثال، abc.com/events.htm به abc.com/gallery.htm. در این مثال از ریدایرکت ۳۰۱ استفاده میشود:
Redirect 301 /events.htm /gallery.htm
تغییر مسیر یک فایل خاص به دامنه دیگری
به عنوان مثال ، abc.com/events.htm به abc.co/gallery.htm، در این مثال از ریدایرکت ۳۰۱ استفاده میشود:
Redirect 301 /events.htm http://abc.co/gallery.htm
تغییر مسیر دامنه قدیمی به دامنه جدید
به عنوان مثال از abc.com به abc.co. توجه داشته باشید که با این کار کل سایت شما جابجا میشود. این کدی است که باید در فایل .htaccess سایت abc.com قرار دهید:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.abc.com [NC]
RewriteRule ^(.*)$ http://abc.co/$1 [L, R=301,NC]
اجبار به استفاده از نسخه www.
موتورهای جستجو abc.com و www.abc.com را به عنوان دو سایت متفاوت در نظر خواهند گرفت. گوگل در واقع توصیه میکند که شما یکی را انتخاب کنید و از ریدایرکت ۳۰۱ به هدفی که انتخاب کردهاید استفاده کنید. کدی که برای اجبار به استفاده از نسخه www نیاز دارید:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^abc.com [NC]
RewriteRule ^(.*)$ http://www.abc.com/$1 [L, R=301,NC]
اجبار به استفاده از نسخه بدون www.
این دستور برعکس قبلی است:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.abc.com [NC]
RewriteRule ^(.*)$ http://.abc.com/$1 [L, R=301,NC]
تغییر مسیر همه فایلها با پسوند خاص
اگر می خواهید همه پروندهها را با پسوند .php تغییر مسیر دهید، به عنوان مثال abc.com/file.php به abc.com/file.htm، از کد زیر استفاده کنید:
RewriteEngine on
RewriteCond %{REQUEST_URI} .php$
RewriteRule ^(.*).php$ /$1.htm [R=301,L]
هدایت (URL Rewriting) با Joomla
اگر از یک وب سایت ثابت به جوملا منتقل شده باشید یا ساختار سایت خود را به روز کرده باشید و یا تغییراتی اعمال شده باشد، ممکن است در موقعیتی قرار بگیرید که باید برخی از قوانین mod_rewrite سفارشی را به فایل htaccess جوملا خود اضافه کنید.
بررسی کنید که آیا فایل پیکربندی آپاچی شما، htaccess را مجاز میداند یا نه. باید مطمئن شوید که لغوها یا فایل .htaccess در جوملا شما فعال هستند، یا دایرکتوری روت نادیده گرفته میشود یا خطایی ایجاد میکند. در بخش دایرکتوری یا در پرونده پیکربندی میزبان مجازی یا در پرونده پیکربندی اصلی باید چیزی شبیه به مثال زیر داشته باشید که امکان لغو را فراهم میکند:
<Directory “/home/user/public_html”>
AllowOverride All
</Directory>
<Directory “/path/to/htdocs”>
AllowOverride All Options=[an option],[an option],…
</Directory>
سپس قدمهای زیر را دنبال کنید:
- نام فایل htaccess.txt را در فایل پایه جوملا خود به.htaccess تغییر دهید.
- این مرحله ممکن است لازم نباشد. .htaccess را در یک ویرایشگر متن باز کنید. بازنویسی مجدد را بنویسید (اولین کاراکتر # را حذف کنید ). اگر جوملا در پوشه خود نصب شده است، پس از اسلش، نام پوشه جوملا را وارد کنید. به عنوان مثال
RewriteBase /yourjoomlafolder
- وارد Back-end خود شوید و پیکربندی جهانی را باز کنید.
- گزینه Use Apache mod_rewrite / URL rewriting را فعال کرده و ذخیره کنید. این گزینه از تابع mod_rewrite Apache برای از بین بردن بخش index.php از URL استفاده میکند.
- بررسی کنید آیا سایت شما به درستی کار می کند یا خیر. URL های شما اکنون باید به صورت زیر باشد:
http://www.example.com/the-news/1-latest-news/1-welcome-to-joomla