htaccess. (خلاصه شده “hypertext access”) یک فایل بدون نام و تنها با پسوند در پنل هاست است. این فایل توانایی کنترل بسیاری از بخشهای وبسرور “آپاچی و لایت اسپید” را دارد. همچنین این فایل اگر در هر دایرکتوریای قرار داشته باشد، میتواند بخشهای مختلف مربوط به آن دایرکتوری را از طریق آن کنترل کرد. در این بخش قصد داریم دستورات مفید در htaccess را به شما آموزش دهیم. با ما همراه باشید.
آنچه در این مقاله میخوانید
htaccess. چیست؟
htaccess یک فایل مخصوص پیکربندی است که نحوه پاسخگویی وبسرور به درخواستهای مختلف را کنترل میکند. این فایل توسط برخی وبسرورها از جمله Apache و LiteSpeed Enterprise پشتیبانی میشود. توجه داشته باشید که فایل داخل وبسرور Nginx پشتیبانی نمیشود. بنابراین لازم است تا قبل از ایجاد این فایل، از وبسرور هاست خود مطمئن شوید.
توجه داشته باشید که این فایل، داخل تمامی سرویسهای نت افراز بجز هاست دانلود (که وبسرور آن انجینکس است) قابل ایجاد و استفاده است.
htaccess. در کجا قرار دارد؟
معمولا پس از نصب CMSهایی مثل WordPress، فایل htaccess. در شاخه public_html یا www هاست شما قرار میگیرد. در صورت عدم وجود این فایل میتوانید آن را بسازید. همچنین در دایرکتوریهای دیگر وبسایت نیز امکان ساخت htaccess وجود دارد.
البته توجه داشته باشید که اگر پنل مدیریت هاست شما Cpanel باشد، این فایل (و البته تمامی فایلهایی که با نقطه شروع میشوند)، به صورت پیشفرض مخفی است. بنابراین نه میتوانید آن را مشاهده کنید و نه میتوانید یک فایل جدید ایجاد کنید. برای مشاهده این فایل داخل Cpanel، لازم است تا با اعمال تنظیماتی، امکان مشاهده فایلهای مخفی را فراهم کنید.
شما میتوانید پس از ورود به بخش “مدیریت فایل” در سی پنل، از بخش “settings”، گزینهی “Show Hidden Files (dotfiles)” را انتخاب و سپس بر روی “Save” کلیک کنید.
با ذخیره تغییرات، فایل .htaccess و تمامی فایلهایی که با نقطه شروع میشوند به شما نمایش داده خواهد شد.
چگونه یک فایل htaccess. بسازم؟
پس از ورود به دایرکت ادمین، از بخش مدیریت فایل، وارد شاخهی public_html شوید. سپس شاخهای را که میخواهید در آن فایل htaccess. را ایجاد کنید انتخاب کنید. توجه داشته باشید که متداولترین شاخهای که برای ساخت فایل htaccess.، ایجاد میشود، شاخه public_html است.
سپس راست کلیک کرده و بر روی New File کلیک کنید.
سپس نام فایل را htaccess. بنویسید و بر روی Ok کلیک کنید.
فایل شما با موفقیت ساخته شد. توجه داشته باشید که برای اعمال تغییرات با کلیک بر روی فایل htaccess. میتوانید کدها را در آن قرار دهید. همچنین توجه به قرار دادن نقطه (.) قبل از htaccess برای نامگذاری فایل، داشته باشید.
کاربردها و دستورات مفید htaccess.
در این قسمت به برخی دستورات مفید htaccess. اشاره میکنیم.
نمایش لیست فایلهای موجود در یک دایرکتوری
قبل از هرچیز، توجه داشته باشید که این بخش برای هاست دانلود (چون با وبسرور انجینکس است) قابل اجرا نیست!
همچنین، در برخی موارد ممکن است که این دستور از طرف مدیرسرور شرکت ارائه دهنده خدمات هاستینگ غیرفعال باشد که البته در نت افراز هیچ مسئلهای در استفاده از این کد وجود ندارد.
در برخی وبسایتها، برای سهولت کاربران برای دانلود، تمامی فایلها را در یک پوشه قرار داده و آدرس آن بخش را به کاربران میدهند. همانند تصویر زیر:
در این مثال ما یک دایرکتوری جدید به نام Download در public_html ایجاد کردیم و در آن یک فایل به نام htaccess. ایجاد کردیم.
برای مشاهده لیست فایلهای موجود در یک دایرکتوری، کد زیر را درون فایل htaccess. فایل مورد نظر قرار دهید. سپس بر روی Save کلیک کنید.
Options +Indexes
توجه داشته باشید که فاصله بین حروف را به درستی رعایت کنید.
لیست سیاه و لیست سفید IP
در برخی موارد، افرادی قصد آسیب زدن به وبسایت شما را دارند. شما میتوانید با شناسایی آیپی شخص مورد نظر، با استفاده از لیست سیاه آیپی، از ورود افراد جلوگیری کنید.
کافیست کد زیر را در فایل htaccess. وارد کنید.
order allow,deny deny from 111.22.3.4 allow from all
در این مثال، ما از آیپی 111.22.3.4 جلوگیری و بقیه آیپیها را مجاز کردیم.
اگر بخواهیم فقط آیپی خاصی را مجاز و بقیه آیپیها را بلاک کنید، کافیست دستور زیر را وارد کنید.
order deny,allow deny from all allow from 111.22.3.4
که در این دستور، تمامی آیپیها بلاک و فقط آیپی 111.22.3.4 اجازه ورود به وبسایت را دارد. البته میتوانید آیپیهای دیگر را نیز با یک خط دستوری allow from اضافه کنید.
در صورتی که کد دستوری به درستی اعمال شده باشد، آیپیهای غیرمجاز با پیغام زیر مواجه خواهند شد.
ریدایرکت کردن لینکها
ریدایرکت در اصل به معنای تغییر مسیر یک لینک به لینک دیگر است. برای مثال اگر لینک example.com به domain.com تغییر مسیر داده شده باشد، پس از وارد کردن exmaple.com وارد domain.com میشویم. البته از سمت وبسرور دو نوع ریدایرکت 301 و 302 صادر میشود.
تفاوت ریدایرکت 301 و 302 چیست؟
ریدایرکت 301 به معنای تغییر مسیر “دائمی” و تغییر مسیر 302 به معنای تغییر مسیر “موقت” است. اگر میخواهید یک لینک را تغییر مسیر بدهید و میخواهید برای سئوی آن مشکلی پیش نیاید، از ریدایرکت 301 استفاده کنید.
همچنین اگر بخشی از سایت خود را حذف کنید و این بخش توسط موتور جستجوگر گوگل شناخته شده باشد، این صفحه با ارور 404 مواجه خواهد شد. این ارور ممکن است باعث افت وضعیت SEO وبسایت شما شود. به همین دلیل بهتر است تا لینک صفحه مربوطه را به یک صفحه دیگر که مرتبط است ریدایرکت کنید.
دستور اصلی ریدایرکت 301
در این مثال، ما فایل relative-url.html/ از وبسایت خود را به لینک http://example.com/full-url.html تغییر مسیر دادهایم. البته توجه داشته باشید که لازم است فایل یا پوشه مربوطه در همان پوشهای که htaccess است، وجود داشته باشد.
همچنین میتوانیم این دستور را برای تغییر مسیر دایرکتوری نیز استفاده کنیم.
تمامی دستورات htaccess. برای همان دایرکتوری و دایرکتوریهای داخلی اعمال میشود. برای مثال اگر دستوری در public_html وارد شود، آن دستور بر روی آن دایرکتوری و تمامی دایرکتوریهای زیرمجموعه آن نیز اعمال میشود. اما اگر دستورات در دایرکتوری دیگری مانند Download وارد شود، دستورات فقط بر روی دایرکتوری Download و تمامی دایرکتوریهای داخل آن اعمال میشود.
تغییر مسیر کل وبسایت به یک لینک دیگر
برای تغییر مسیر کل وبسایت خود به یک وبسایت دیگر از دستور زیر استفاده کنید.
Redirect 301 / http://newurl.com
البته در این بخش، کل اطلاعات موجود در شاخهای که که در آن htaccess. ساخته شده است تغییر مسیر داده میشود.
فراخوانی وبسایت با www یا بدون www
گاهی اوقات ممکن است که وبسایت شما با www فراخوانی شده باشد، (مانند www.google.com) و شما تمایل داشته باشید که بدون www این وبسایت را فراخوانی کنید. (مانند google.com)
با یک دستور ساده داخل .htaccess به آسانی میتوانید این کار را انجام دهید:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
و اگر وبسایت شما بدون www فراخوانی میشود و قصد دارید آن را با www فراخوانی کنید میتوانید از دستور زیر استفاده کنید:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
البته توجه داشته باشید که اگر از DNS های کلادفلر استفاده میکنید، لازم است تا کش مربوط به آن پاک شده تا این تغییرات اعمال شود.
مواجهه با ارور Internal Server Error
در صورتیکه خطایی در دستورات ذخیره شده در htaccess. وجود داشته باشد، با فراخوانی آن بخش، با این پیغام مواجه خواهید شد. اما راه حل چیست؟
هر دفعه یک کد را اعمال کنید!
این مهمترین نکتهای است که باید قبل از وارد کرد دستورات htaccess. در نظر بگیرید. اگر هر دستور را به صورت جداگانه اعمال کنید، در صورت برخورد با این ارور، میتوانید دستور مربوطه را برداشته و یا اصلاح کنید.
قبل از وارد کردن دستورات از هاست خود بکآپ بگیرید
پیشگیری بهتر از درمان است. اگر قبل از وارد کردن دستورات htaccess. از هاست خود بکآپ بگیرید، در صورت وجود مشکل میتوانید هاست خود را به حالت قبلی برگردانید.
دلایل دیگر وجود این خطا:
البته مشاهده این خطا ممکن است دلایل دیگری از جمله:
- وجود خطا و مشکل از سمت هاست
- تنظیم نبودن صحیح سطوح دسترسی (Permissions) به فایلها یا دایرکتوریهای هاست
- و…
نیز داشته باشد. اما اگر پس از ویرایش .htaccess به این خطا برخورد کردید، به احتمال بسیار زیاد مشکل از سمت دستور اشتباه بوده است.
کلام آخر
در این آموزش سعی کردیم تا کاربردیترین دستورات موجود در htaccess. را به شما آموزش بدهیم. البته که بسیاری از دستورات دیگر نیز در این زمینه وجود دارد که ممکن است تخصصیتر باشد.
همچنین این دستورات بر تمامی سرویسهای نتافراز کاملا تست شده و قابلیت استفاده دارند. همچنین در صورت بروز هرگونه مشکل میتوانید با پشتیبانی نتافراز در تماس باشید.
شاد و پیروز باشید.
سلام، ممنون از مطلب خوبتون.
سوالی داشتم: آیا این فایل بر ساب فولدرها و ساب دامنهها هم اثر میگذارد و چطور میتوان این تاثیر را قطع کرد؟
با سلام و درود
تمامی دستورات htaccess. برای همان فولدر و ساب فولدرها اعمال میشود. برای مثال اگر دستوری در public_html وارد شود، آن دستور بر روی آن دایرکتوری و تمامی دایرکتوریهای زیرمجموعه آن نیز اعمال میشود.
اما برای سابدامینهای این قضیه صادق نیست
اگر که میخواید یک دستور خاصی، داخل ساب دایرکتوری خوانده نشود، یک فایل .htaccess جداگانه برای آن ساب دایرکتوری ایجاد کنید
سپس دستور زیر را قبل از دستور مورد نظر وارد کنید:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/subdirectory/
آن دستور، با این دستور خنثی میشود.
همچنین اگر مخالف دستور htaccess. را وارد کنید این دستور خنثی میشود.
با تشکر
سلام برای ریدایرکت یه کلمه از کل آدرس چه کدی باید بنویسیم مثلا اگر بخواهیم /http://site.ir/jpg/photo را به /http://site.ir/photo ریدایرکت کنیم به چه صورت هست. ممنون میشم سوالم رو جواب بدید.
سلام و درود
شما میتوانید از این دستور:
Redirect 301 /jpg/photo/ /photo/
برای موردی که فرمودید استفاده کنید
البته سوال شما، دقیق نبود
برای بررسی بهتر، لطفا دقیقتر مورد را توضیح دهید تا بتوانیم به صورت بهتری راهنمایی کنیم.
با تشکر