.htaccess چیست و چه کاربردهایی دارد؟

.htaccess یک فایل همه کاره!!!
اگر صاحب یک سایت باشید و کارهای فنی سایت را خود شما برعهده داشته باشید بسیار بعید هست که با فایلی به نام .htaccess آشنا نشده باشید! این فایل ساده و مخفی (بخاطر . در ابتدای نام فایل مخفی هست.) که مانند یک دفترچه دستور هست به شما کمک می کند به سرور بگویید چطور با درخواست های کاربران برخود کند. و تنظیمات و تغییراتی که مدنظر دارید را می توانید به سادگی به آن اضافه کنید.
این فایل در وب سرور های آپاچی و لایت اسپید به شکل کاملا کاربردی مورد استفاده قرار می گیرد.
با کمک این فایل شما می توانید ریدایرکت های آدرس ها ، عدم دسترسی به صفحات یا فایل های خاص ، قرار دادن کدهایی برای بازنویسی صفحات داخلی یا فورس شدن ssl ، تنظیمات مربوط به کش ، بهبود بخشیدن به عملکرد وب سایت را در کنار افزایش امنیت اعمال کنید.
اگر شما یک هاست اشتراکی داشته باشید طبیعتا شما به سرور اصلی دسترسی ندارید تا بتوانید تنظیمات وب سرور را تغییر دهید و مطابق با نیاز خود تنظیم کنید اینجا همان جایی هست که این فایل ساده کمک بسیار بزرگی را برای شما انجام خواهد داد.
گاهی شما صفحات قدیمی را می خواهید به آدرس های جدید ریدایرکت کنید.
می خواهید تمام کاربران از نسخه https استفاده کنند و به صورت فورس https وارد سایت شوند.
تمایلی ندارید بازدیدکنندگان سایت شما بتوانند پوشه ها و فایل های خاص شما را بررسی کنند.
از خطاهای ساده 404 راضی نیستید و می خواهید این خطا ها را به شکلی که دوست دارید به بازدیدکنندگان سایت نمایش دهید.
این ها بخشی از مواردی هست که شما با این فایل می توانید برای خود تنظیم کنید در دامنه به موارد بیشتر و کدهایی که برای انجام این کارها نیاز است اشاره خواهیم کرد.
چطور از .htaccess استفاده کنیم؟
همانطور که گفته شد روی هاست ها ما امکان تغییرات روی سرور را نداریم اما عموما نیاز به تغییراتی روی سایت داریم تا به شرایطی مطلوبی که مدنظر داریم برسیم!
در این شرایط ما باید از .htaccess استفاده کنیم.
فقط کافی هست یک فایل به نام .htaccess در مسیر داکیومنت روت دامنه خود بسازید و کدهای مربوطه را داخل آن قرار دهید تا روی کل سایت اعمال شود.
برای مثال اگر شما می خواهید تغییراتی روی فایل های یک پوشه خاص اعمال کنید می توانید در مسیر پوشه این فایل را بسازید یا اینکه در همان مسیر اصلی به آن مسیردهی کنید.
در استفاده از .htaccess باید چه نکاتی را در نظر بگیریم؟
این فایل اگرچه کار را بسیار ساده کرده و نیاز به تغییرات سمت سرور ندارد اما باید در استفاده از آن هم موارد احتیاطی را رعایت کرد برای مثال:
1- اگر قرار است چندین کد را در این فایل قرار دهید و تغییرات روی سایت اعمال کنید بهتر است ابتدا تک تک کد ها را قرار دهید و تست بگیرید و اگر به درستی تغییرات مدنظر شما را اعمال کرد کد های بعدی را قرار دهید! هیچ وقت تمام کد ها را همزمان قرار ندهید! ممکن است سایت شما از دسترس خارج شود و پیدا کردن این که کدام کد مشکل ساز شده بود دشوار باشد.
2- همیشه قبل از هر تغییری روی این فایل از نسخه قبلی آن پشتیبان تهیه کنید که اگر مشکلی رخ داد و در ابتدا متوجه نشدید بعدا بتوانید با نسخه پشتیبان سایت را به حالت قبل برگردانید این شیوه کمک می کند همواره خیال شما بابت در دسترس قرار گرفتن مجدد سایت راحت باشد.
3- mod_rewrite یا mod_headers ماژول های خاصی در وب سرور می باشند که .htaccess نیاز به فعال بودن آن ها دارد. اگر در هاست اشتراکی شما این ماژول ها فعال نباشد ممکن است کدهای شما کارکرد صحیح نداشته باشد و باید به شرکت هاستینگ خود در خصوص فعال کردن این ماژول ها اطلاع دهید.
چرا از .htaccess استفاده میکنیم؟
در هاستهای اشتراکی، معمولاً شما نمیتوانید به تنظیمات اصلی سرور دست بزنید. اما گاهی لازم دارید کارهایی مثل موارد زیر انجام دهید:
هدایت خودکار صفحات قدیمی به آدرسهای جدید (Redirect)
مجبور کردن کاربران به استفاده از نسخهی HTTPS سایت
جلوگیری از دیدن پوشه ها و فایل های خاص
تعریف صفحهی خطای دلخواه مثل 404
افزایش سرعت سایت با فشردهسازی یا کش (Cache)
رمزگذاری یا قفلکردن پوشه ها با نام کاربری و رمز عبور
محدود کردن دسترسی به فایل ها و پوشه های برای ای پی های خاص
بلاک کردن ای پی ها یا رنج ای پی ها در دسترسی به سایت
همهی این ها را میشود با چند خط در .htaccess انجام داد، بدون نیاز به تماس با پشتیبانی سرور یا تغییر فایل های اصلی بنابراین با این تفاسیر می توان به این نتیجه رسید تا چه اندازه این فایل مهم و کاربردی می باشد.
کاربرد های مهم .htaccess :
در این قسمت می خواهیم کدهایی مهم .htaccess که بسیار رایج هستند را خدمت شما توضیح دهیم که هر کدام چه ویژگی هایی دارند.
1- فورس کردن https:
یکی از کاربردهای خوب این فایل امکان قرار دادن کدهای زیر به منظور فورس کردن https هست به این معنا که کاربرانی که وارد سایت می شوند فقط با ssl سایت را می توانند بررسی کنند و حتی اگر به صورت http نام دامنه شما را وارد کردند به صورت اتوماتیک به https تبدیل می شود.
دقت داشته باشید اگر ssl سایت شما به هر دلیلی منقضی یا قطع شود این کد باعث می شود سایت با خطای ssl رو به رو شود بنابراین همیشه باید بررسی کنید سایت شما از نظر گواهی نامه امنیتی اعتبار داشته باشید.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
2- حل خطای 404 صفحات داخلی وردپرس:
یکی از خطا های رایجی که کاربران سایت های وردپرسی بعد از آپلود سایت خود با آن مواجه می شوند خطای 404 صفحات داخلی می باشد. این خطا که در ابتدا به این صورت به نظر می رسد که لینک ها وجود ندارند! اما با باید در مسیر پروژه در فایل .htaccess این کد را قرار دهید:
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
3- جلوگیری از لیست شدن فایل ها:
اگر در مسیر پروژه شما فایلی مانند index.php یا index.html نباشد وقتی در مرورگر اسم دامنه وارد شود تمام محتویات پروژه نمایش داده می شود و این مورد می تواند باعث شود که کاربران به تمام فایل ها و پوشه ها دسترسی پیدا کنند!
در این شرایط دو راهکار وجود دارد یا اینکه شما یک فایل خالی index.php در مسیر بسازید تا صفحه سفید نمایش داده شود یا با قرار دادن کد زیر در فایل .htaccess جلوی لیست شدن فایل ها را بگیرید.
Options -Indexes
یکی از ویژگی های بسیار خوبی که این کد در مقایسه با قرار دادن یک فایل خالی index.php یا index.html دارد این است که این فایل ها فقط جلوی لیست شدن مسیری که در آن قرار دارند را می گیرند و اگر یک پوشه داخلی انتخاب شود محتویات لیست می شود و نیاز به ساخت این فایل ها در مسیر های داخلی پوشه ها هم هست! طبیعتا این کار زمان بر می باشد و خیلی کاربردی هم نیست
با قرار دادن کد بالا در .htaccess مسیر جلوی لیست شدن فایل ها چه در مسیر اصلی و چه در تمام مسیر های داخلی گرفته خواهد شد و خیال شما از بابت لیست نشدن فایل ها و پوشه ها راحت می شود.
4- جلوگیری از دزدی تصاویر سایت شما:
در بعضی زمان ها مشاهده می شود سایت های دیگر از تصاویر سایت شما با url مستقیم شما در سایت خود یا قسمت مقالات استفاده می کنند و تصاویر سایت شما را به کاربران خود نمایش می دهند در این شرایط شما اگر بخواهید جلوی این کار را بگیرید فقط کافی هست این کد را در .htaccess خود قرار دهید
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [F,NC]
که در قسمت https?://(www\.)?example\.com نام دامنه خود را جایگزین کنید. با کدبالا تصاویر سایت شما فقط با آدرس سایت شما نمایش داده خواهند شد.
5- حفاظت از فایل .htaccess:
فایل .htaccess یکی از مهمترین فایلها برای پیکربندی و تنظیمات سرور در وبسایت است. این فایل میتواند تنظیمات امنیتی، ریدایرکتها، مدیریت دسترسیها و موارد دیگر را کنترل کند. به همین دلیل، محافظت از خود این فایل در برابر دسترسیهای غیرمجاز بسیار ضروری است.
اگر افراد غیرمجاز بتوانند به این فایل دسترسی پیدا کنند، ممکن است تنظیمات مهم سایت شما تغییر کند و یا حتی به اطلاعات حساس دسترسی پیدا کنند. برای جلوگیری از این نوع تهدیدات، میتوانید از دستورات امنیتی در خود فایل .htaccess استفاده کنید تا از دسترسی غیرمجاز به آن جلوگیری نمایید.
برای محافظت از فایل .htaccess و جلوگیری از دسترسی غیرمجاز به آن، کد زیر را در فایل .htaccess خود وارد کنید:
<files ".htaccess">
order allow,deny
deny from all
</files>
6- کش کردن داده ها در مرورگر:
با قرار دادن کد زیر در .htaccess می توانید به مرورگر بگویید داده های مربوطه را برای افزایش سرعت بارگذاری سایت به مدت زمان مشخص کش کند تا وقتی کاربر مجدد وارد سایت شما می شود فراخوانی از کش خود مرورگر اتفاق بیفتد.
Enables browser caching
ExpiresActive On
Set expiration dates for various file types
ExpiresByType image/jpg “access 1 year”
ExpiresByType image/jpeg “access 1 year”
ExpiresByType image/gif “access 1 year”
ExpiresByType image/png “access 1 year”
ExpiresByType text/css “access 1 month”
ExpiresByType application/pdf “access 1 month”
ExpiresByType text/x-javascript “access 1 month”
ExpiresByType application/x-shockwave-flash “access 1 month”
ExpiresByType image/x-icon “access 1 year”
Default expiration for other files
ExpiresDefault “access 2 days”
این کدها تاثیر بسزایی در افزایش لود سایت شما در مراجعه های بعدی کاربران شما به سایت خواهد داشت و اگر از افزونه کش استفاده نمی کنید این کدها کمک بزرگی به شما خواهند کرد. چون دیگر نیاز نیست برای این فایل ها هربار مرورگر از سمت سرور درخواست فراخوانی داشته باشد و این فایل ها را به صورت کش شده در خود نگه می دارد و هر بار که نیاز باشد از سمت مرورگر به کلاینت داده می شود!
باید این نکته را در نظر داشته باشید در صورتی که کش ها اعمال شود در بروزرسانی ها و توسعه ممکن است تغییرات را مشاهده نکنید.
7- غیرفعال کردن کش مرورگر برای تست و توسعه:
گاهی در زمانی که پروژه در حال تست و تغییرات هست کش کردن مرورگر باعث می شود تغییرات به شکل صحیح دیده نشود و هر بار باید کش مرورگر را پاک کرد! این مورد زمانی که می خواهیم روی سایت تست داشته باشیم باعث مشکل و هدر رفتن تایم زیادی می شود.
برای جلوگیری از این کش می توان با قرار دادن کدهایی داخل .htaccess جلوی کش شدن فایل های نمایشی را گرفت تا هر تغییری بعد هر رفرش کردن صفحه نمایش داده شود.
<FilesMatch "\.(html|php|css|js)$">
FileETag None
Header unset ETag
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
Header set Expires 0
</FilesMatch>
با این کد به مرورگر گفته می شود فایل های html ، php ، css و js از کش شدن استثنا باشند و این مقادیر هر بار با رفرش صفحه از ابتدا فراخوانی شود.
8- تنظیم محدودیت های php در .htacess:
یکی از بهترین روش ها برای کاهش یا افزایش محدودیت های php فایل .htaccess می باشد شما در این فایل می توانید موارد متعددی را در خصوص php تنظیم کنید که به شکل زیر می باشد.
php_value upload_max_filesize 128M
php_value post_max_size 256M
php_value memory_limit 512M
php_value max_execution_time 600
php_value max_input_time 600
php_value max_input_vars 5000
php_value session.gc_maxlifetime 3600
php_flag display_errors Off
php_value error_reporting E_ALL
با کدهای بالا شما می توانید این محدودیت ها را اعمال کنید که به صورت مختصر می توان گفت:
php_value upload_max_filesize 128M حداکثر حجمی هست که کاربر می تواند به شکل ویدیو یا عکس بارگذاری کند که این مقدار را می توانید افزایش یا کاهش دهید.
php_value post_max_size 256M حداکثر حجمی هست که کاربر می تواند به شکل پست ارسال کند اگر کاربر چندین فایل را همزمان ارسال کند نباید مجموع این فایل ها از این میزان بیشتر شود.
php_value memory_limit 512M یکی از خطا های رایجی که در سایت های php مخصوصا وردپرسی دیده می شود Allowed memory size exhausted می باشد که نشان دهنده کم بودن رم php در زمان اجرای اسکریپت ها و پردازش هایی می باشد که به رم نیاز دارد با تنظیم کد مربوط به محدودیت رم می توانید این مقدار را افزایش دهید تا این خطا برطرف شود. در نظر داشته باشید نباید این میزان را خیلی بالا در نظر بگیرید چون ممکن است باعث فشار به منابع سرور شود.
php_value max_execution_time 300 این تنظیم برای حداکثر باز بودن پردازش php از نظر زمانی می باشد در این تنظیم هر پردازش php نهایتا پنج دقیقه می تواند باز بماند وبعد آن بسته می شود. تنظیم این عدد بسته به طولانی بودن پردازش های شما دارد که عموما پنج دقیقه زمان بالایی برای یک پردازش محسوب می شود. ایمپورت داده های بزرگ و اجرای کران جاب های سنگین عموما به زمان های بالایی نیاز دارد که قابل تنظیم می باشد.
php_value max_input_time 300 حداکثر زمانی که php اجازه می دهد داده های ورودی مانند فایل های آپلودی دریافت شوند! برای مثال عدد 300 تا پنج دقیقه اجازه دریافت فایل ها را می دهد و بعد آن باعث بسته می شود حتی اگر آپلود کامل نشود! اگر فایلی که کاربران برای مثال آپلود می کنند بالاست و یا سرعت اینترنت کمی دارند بهتر است این عدد را افزایش دهید
php_value max_input_vars 5000 تعداد پارامتر هایی که php در یک درخواست می تواند بپذیرد در این پارامتر تنظیم می شود. در فرم های بزرگی مثل تنظیمات وردپرس یا ووکامرس اگر این مقدار کم باشد بخشی از تنظیمات ذخیره نمی شود گاهی هم در نصب قالب ها با کم بودن این مقدار خطا مشاهده می شود که به سادگی در فایل .htaccess می توانید تنظیم کنید.
php_value session.gc_maxlifetime 3600 این تنظیم برای زمان انقضای سشن ها می باشد یعنی برای مثال اگر یک سایت فروشگاهی دارید و کاربر یک ساعت تغییراتی روی پنل کاربری نداشته باشد سشن به اتمام می رسد و نیاز به لاگین مجدد می باشد در بعضی سایت های فروشگاهی این زمان را تا 24 ساعت هم تعیین می کنند تا سسشن زود به اتمام نرسد و کاربر مجدد لاگین نداشته باشد.
php_flag display_errors Off با تنظیم این پارامتر در فایل .htaccess نمایش خطا های php در سایت غیرفعال می باشد و کاربران نمی توانن خطا ها و مسیر خطا ها را مشاهده کنند عموما در سایت های وردپرس در فایل wp-config.php با false کردن دیباگ هم همین اتفاق رخ می دهد و خطاهای قالب و سایت نمایش داده نمی شود.
php_value error_reporting E_ALL این پارامتر به ذخیره سازی تمام خطاها و هشدای سایت کمک می کند اگر نمایش خطا غیرفعال باشد چیزی نمایش داده نمی شود ولی تمام خطاها ذخیره می شود تا سر فرصت از سمت شما
9- ریدایرکت از بدون www به با www:
اگر شخصی آدرس سایت شما را بدون www برای مثال example.com بنویسد با کد زیر می تواند به نسخه www.example.com هدایت کنید!
این کد کمک می کند تحت هر شرایطی سایت با www باز شود در نظر داشته باشید برای موتور های جستجو example.com و www.example.com دو سایت متفاوت در نظر گرفته می شود بنابراین این کار کمک می کند اعتبار سایت شما به یک دامنه منتقل شود.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]
10- ریدایرکت از با www به بدون www:
برعکس حالت قبل گفته شده با کد زیر می توانید آدرس سایت را تحت هر شرایطی به بدون www هدایت کنید. این کار برای کوتاه تر شدن دامنه می باشد و در عمل تفاوتی بین این دو نمی باشد.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
11- مسدود کردن یک ای پی خاص:
گاهی یک ربات اسپمر یا مزاحم مرتب به سایت شما سر می زند و ترافیک فیک ایجاد می کند و نیاز است ای پی ربات را مسدود کنید با قرار دادن کد زیر می توانید این کار را انجام دهید تا دسترسی برای همه بجز همین ای پی بسته باشد.
<RequireAll>
Require all granted
Require not ip 123.45.67.89
</RequireAll>
12- جلوگیری از اجرای فایل های php در پوشه upload :
در پوشه upload سایت ها فقط عکس و فایل عموما قرار می گیرد و نیاز نیست هیچ فایل php اجرا شود! فرض کنید شخصی یک فایل php را در این مسیر آپلود کند ممکن است این فایل مخرب در سرور اجرا شود و باعث بروز مشکل شود.
برای جلوگیری از این اتفاق می توانید کد زیر را با توجه به مسیر مربوط به پوشه upload خود در .htaccess قرار دهید.
<Directory "/path/to/your/site/wp-content/uploads">
<FilesMatch "\.(php|php5|phtml)$">
Require all denied
</FilesMatch>
</Directory>
با این کد می توانید برای هر پوشه ی دیگری که می خواهید فایل php اجرا نکند هم استفاده کنید فقط مسیر Directory را باید مطابق با مسیر پوشه خود تنظیم کنید.
13- فعال کردن فشرده سازی Gzip:
با دستور زیر فایل های متنی مثل HTML ، CSS و JS قبل از ارسال به مرورگر فشرده می شوند.
در نتیجه حجم صفحه ها کاهش می یابد، سایت سریع تر بارگذاری می شود و مصرف اینترنت بازدید کننده کمتر میشود.
تقریباً تمام سایتهای حرفهای این قابلیت را فعال دارند.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
14- محدود کردن دسترسی به پنل ادمین به یک ای پی خاص:
گاهی برای افزایش امنیت پنل ادمین سایت بهتر است دسترسی به پنل ادمین روی همه ای پی ها بجز ای پی ادمین بسته باشد. در این شرایط هیچکس نمی تواند وارد پنل ادمین شود بجز ای پی که در .htaccess تعریف شده است.
این قابلیت بسیار کمک می کنند تا امنیت پنل ادمین ارتقا یابد و از ورود افراد غیرمجاز تحت هر شرایطی حتی با وجود دانستن یوزر و پسورد ادمین جلوگیری شود.
<Directory "/path/to/your/site/wp-admin">
Order Deny,Allow
Deny from all
Allow from 123.45.67.89
</Directory>
15- تغییر نام فایل پیش فرض سایت:
همه می دانیم اولین فایل پیش فرضی که سایت ها اجرا می شوند index.php و index.html می باشند اما گاهی نام فایل پیش فرض سایت ما برای مثال home.php هست در این شرایط مرورگر نمی تواند سایت را باز کند وقتی دامنه سایت در مرورگر وارد شود محتویات پوشه لیست می شود چون فایلی به نام index وجود ندارد.
برای اینکه فایل home.php ما اجرا شود می توانیم خیلی ساده کد زیر را در .htaccess قرار دهیم.
DirectoryIndex home.php
نتیجه گیری:
فایل .htaccess یک فایل کوچک و کم حجم ولی با قدرت بسیار زیاد می باشد که در اختیار شما قرار می گیرد تا هر تغییراتی که مدنظر دارید را روی سایت خود اعمال کنید همانطور که در ابتدای آموزش هم خدمت شما عرض شد گاهی کدهایی که در این فایل قرار می دهید ممکن است باعث بروز مشکل و ریدایرکت های اشتباه شود همیشه از فایل اصلی و بدون مشکل خود یک بک آپ داشته باشید.
با این فایل با چند خط ساده می توانید:
مسیرها را تغییر دهید
امنیت را بالا ببرید
سرعت سایت را بهبود دهید
خطاهای کاربر را به شکلی زیبا نمایش دهید
اما همیشه به یاد داشته باشید: دقت در نوشتن مهمترین اصلی هست که باید رعایت کنید.
یک خط اشتباه می تواند کل سایت را از کار بیندازد، ولی یک کد درست نوشته شده و اصولی می تواند سایت شما را حرفهای، امن و سریع تر کند.






