آموزش htaccess، یکی از مطالب پیشرفته مجله آوای دانش پیام آوا میباشد که قرار است بسیار کاربرد و بهینه به این موضوع بپردازد. اگه در مورد این فایل اطلاعاتی دارید توصیه میکنم کمی حوصله به خرج بدید و تا آخر مطلب رو مطالعه کنید حتما چیزهایی برای اضافه شدن به دانش شما داخلش وجود دارد، و یا اگه اولین بار هست که اسم این فایل به گوش های شما میخورد نگران نباشید چون قصد داریم از ۰ تا ۱۰۰ رو برای شما به زبان خیلی ساده تشریح کنیم پس تا آخر مطلب با ما همراه باشید.
فایل htaccess چیست؟
امروزه در اکثر سیستمهای مدیریت محتوا مثل وردپرس یک فایل در شاخه اصلی هاست به اسم htaccess هست. این فایل رو در حقیقت با نام distributed configuration files میشناسند و در واقع برای کنترل آپاچی هستند که روی یک شاخه و تمام زیر شاخه های آن عمل میکنه. این فایلها برای کارکرد در کنار فایلهای معمولی HTML یا PHP قرار میگیرن، میشه گفت این فایل اسم نداره بلکه فقط از بخش پسوند تشکیل شده و به صورت .htaccess دیده میشه.
.htaccess یک فایل مخفی هست که میتونه در هر فولدری باشه و همانطور که ذکر شد عملیات های سرور مربوط به آن فولدر و زیر شاخه هایش رو تنظیم میکنه، مثلا میتوانید دسترسی یه سری فایل ها را محدود کنید تا از اون فایلها محافظت بشه، URL را تنظیم کنید یا مدریت فایلهای قابل کش و خصوصیات آنها بپردازید و…
این فایل در سرور به صورت فایل مخفی هست و برای نمایش اون کافی هست مثلا در سی پنل، هنگامی که بر file manager کلیک میکنید تیک گزینه show hide files را فعال کنید تا بعد از باز شدن پنجره مدیریت فایلها تمام فایلهای مخفی قابل رویت باشن.
آموزش htaccess، امنیت و مدیریت بهینه وردپرس با آن
تو این آموزش برای اینکه تنظیمات برای تمام فولدرهای بخش اصلی سایت اعمال بشه ،من از فایل htaccess موجود در فولدر public_html استفاده میکنم. حال اگه این فایل در پوشه public_html شما وجود نداشت کافی هست از منوی سی پنل گزینه newfile را رو انتخاب کنید و سپس .htaccess را وارد کنید، باز تاکید میکنم این فایل نام نداره و نقطه را باید در ابتدای محل درج عنوان وارد کنید و سپس عبارت htaccess رو تایپ کنید.
اگه هم این فایل از پیش موجود بود بهتره یه کپی از اون رو به عنوان بک آپ ذخیره کنید. و در صورت وجود کد داخل اون بهتره در آخر خط یک بار اینتر رو بزنید و دستورات آموزش داده شده در اینجا رو بعد اون وارد کنید. (البته بعضی وقتها لازمه یه کد در ابتدای فایل قرار بگیره که به جاش توضیح میدم)
خوب حالا نوبت این میرسه بریم ببینیم چه کارهایی رو میشه با این فایل انجام داد:
۱) محافظت از خود فایل .htaccess :
برای جلوگیری از سرقت اطلاعات خود فایل htaccess کد زیر رو در ابتدای فایل htaccess قرار بدهید:
<files ".htaccess">
order allow,deny
deny from all
</files>
۲) جلوگیری از سرقت فایلهای و فولدرهای درون هاست :
بیشتر وقتها اطلاعاتی مثل فایلهای قالب اختصاصی شما که بر روی هاست قرار دارند و یا فایلهایی که به صورت zip شده در هاست خود ذخیره کردهاید به راحتی با مرور هاست شما توسط سایرین کشف و به سرقت میره برای جلوگیری از این امر کد زیر رو در انهای فایل htaccess قرار بدید.
Options All -Indexes
۳) معرفی زبان پیشفرض (DefaultCharset) :
برای اینکه زبان پیشفرض استفاده شده رو به مرورگرها بگین بیشتر وقتها اون رو در قسمت هدر کدهای سایت قرار میدین. با دستور کوتاه زیر به آپاچی میگیم که همیشه صفحات را با زبان خاصی ارسال کن. این عمل برای سئو سایت تاثیری خوبی داره.
# pass the default character set
AddDefaultCharset utf-8
۴) تعیین صفحات سفارشی برای صفحات خطا :
با دستور زیر میتوانید برگههایی رو که برای نمایش هنگام ایجاد خطا، طراحی و در پوشه error قرار دادین رو جایگزین صفحات خطای پیشفرض سرور کنید و خطای مورد نظر خودتون رو به کاربر نشون بدین. معرفی و تعیین صفحات خطا برای سئو سایت تاثیر خوبی داره.
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
چند خطای آپاچی برای نمونه:
- خطای ۴۰۱ : دسترسی به آدرس وارد شده غیر مجاز است.
- خطای ۴۰۳: دسترسی به این آدرس ممنوع میباشد.
- خطای ۴۰۴: آدرس مورد نظر یافت نشد.
- خطای ۵۰۰: خطای داخلی سرور بوجود آمده است.
۵) بن کردن اسپمرها با .htaccess (محدودیت دسترسی از طریق آی پی) :
چون دیدگاههای اسپم واقعا روی اعصاب هستند و مخصوصا اگر سایتتان پیشرفت داشته باشه این دیدگاهها به صورت وحشیانه هجوم میارند که ما کلا میخواهیم آی پی اونها رو مسدود کنیم.
<Limit GET POST>
order allow,deny
deny from 200.49.176.139
allow from all
</Limit>
دستور “allow from all” یعنی همه آیپیها بجز آیپیهای مسدود شده دسترسی دارند. اگه بخوایم فقط به آیپیهای خاصی اجازه دسترس بدیم کافیه به این کدی به این شکل وارد کنید “allow from 188.50.38.143” و به جای آی پی درج شده آی پی مورد نظر خودتون رو وارد کنید.
با دستور “deny from 200.49.176.139” هم اجازه دسترسی این آی پی رو میگیرم که میتونید به هر تعداد که خواستین از اون زیر هم اضافه کنید. با این کد هم دیگه هیچ آی پی اجازه ورود نخواهد داشت حتی خود شما “deny from all”.
نکته : بعضی مواقق قرار دادن “<Limit GET POST>” و “</Limit>” در ابتدا و انتهای تعیین دسترسیها مشکلاتی رو ایجاد میکنه که در این صورت اونها رو از ابتدا و انتهای کدها بردارین.
۶) جلوگیری از ارسال دیدگاه اسپم در وردپرس :
افزونه اکیسمت افزونه شناخته شدهای در زمینه جلوگیری از ارسال اسپم هست که در بسته اصلی خود وردپرس هم وجود داره اما شما میتونید با استفاده از کد زیر از ارسال هرزنامه به وبسایتتان جلوگیری کنید دقت داشته باشید که در خط چهارم آدرس سایت خودتون رو وارد کنید.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
۷) حذف category از آدرس سایت وردپرسی شما :
شاید شما هم دوست داشته باشید کلمه /category/ رو از آدرس سایت وردپرسی خودتون حذف کنید. این کار علاوه بر اینکه باعث جمع و جور شدن url شما میشه تاحدودی هم در سئو سایتتون موثر هست. البته با تغییر پیوند یکتای مربوط به category هم میشه که این کار رو افزونههای سئو برای شما انجام میدن و این کد رو محض یک راه حل بیرون از چهارچوب اصولی قرار دادم .
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]
۸) تغییر عنوان و پسوند فایل پیشفرض index در هنگام بارگذاری :
حتما تا حالا متوجه شدین که در هنگام فراخوانی یک آدرس پیشفرض یکی از فایل های index.html یا index.php یا… بارگزاری میشن. حال اگه دوست داشتین این سنت رو بشکنید می تونید از کد زیر استفاده کنید. با قرار دادن اون هنگام فراخوانی به دنبال file.php میگرده و اگه نبود به دنبال file.html خواهد بود.
DirectoryIndex file.php file.html
۹) ورود به سایت با www یا بدون www :
اینکه سایت از هر دو روش امکان بارگزاری داشته باشه یعنی باید فاتحه سئو سایتتون رو بخونید چون در اینصورت روبوتهای گوگل فکر میکنن دو دامنه یک مطلب را منتشر میکنه و از ارزش هر دو کم میکنن، طبق تجربه برای سئو بهتره سایت بدون www باشه دلیلش هم کوتاه شدن دامنه هست ولی تا یادم نرفته بگم تا تو دردسر نیوفتین ، اگه تا حالا سایتتون با www بود و ایندکسهایی که تو گوگل دارین به این صورت ذخیره شدن از فکر عوض کردنش در بیاین چون نتیجهای جز از دست دادن تمام ایندکس هایی که داشتین براتون نداره جز در مواردی که برای ایجاد این تغییرات ریدایرکت ۳۰۱ در نظر گرفته بشه.
اگه میخواین بفهمین سایتون به چه صورت تو گوگل ثبت شده بهتره در جستجوی گوگل این متن رو وارد کنید (بهجای yoursite.com دامنه خودتون رو وارد کنید) “site:yoursite.com” و یک بار هم “site:www.yoursite.com” رو وارد کنید با نتیجه جستجو میتونید بفهمین گوگل از چه شکل سایتتون خوشش میاد
خوب حالا برای اینکه دامنه سایتتون بدون www قفل کنید کافیست کد زیر را در htaccess قرار دهید (البته آدرس دامنه خودتون را بجای yoursite.com در خط دوم و سوم وارد کنید):
RewriteEngine On
RewriteCond %{HTTP_HOST} !^yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://yoursite.com/$1 [R=301,L]
و برای قفل کردن دامنه فقط با www از این کد استفاده کنید:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
۱۰) بالا بردن امنیت فایل wp-config.php در htaccess :
برای جلوگیری از سرقت اطلاعات فایل حیاتی و جلوگیری از دسترسی به اطلاعات پایگاه داده سایت کد زیر رو در فایل قرار بدین (این مورد قبلا به صورت کامل از ماندگار وب توسط دوستان درج شده که می تونید برای اطلاعات بیشتر به اون سر بزنید) :
<files wp-config.php>
order allow,deny
deny from all
</files>
۱۱) مخفی کردن فرمت ها/شناساندن فرمتهای جدید (add mime type) :
یک راه امنیتی که من واقعا پیشنهاد میکنم واسه حفاظت از اسکریپتهای PHP شما این هست که آنها PHP نباشند! برای مثال: فایل PHP شما با فرمت ASP باز شود!!
AddType application/x-httpd-php .asp .jsp
یه توضیح مختصر : Addtype به ما میگوید که میخواهیم یک فرمت جدید بشناسانیم بعد نوع آن فایل های خاص با فرمت دلخواه خود میگوییم مثلا image/png یا text/css بعد میگوییم که چه فرمتی رو از این به بعد به عنوان نوعی که گفتهایم بشناس.
اما فرض کنید میخواهید از shtml/ssl در سایتتون استفاده کنید و نیاز به شناساندن این فرمتها به آپاچی دارین :
AddType text/html .shtml
AddHandler server-parsed .shtml
Options Indexes FollowSymLinks Includes
۱۲) ریدایرکت/Redirect کردن :
اونقده مردم اومدن با جاوا اسکریپت و امثال اون آدرسها رو به آدرسهای دیگهای ریدایرکت کردن آخر سر این کد به جاش به وجود اومد
Redirect /Dirold/old.html http://site.com/DirNew/new.html
۱۳) محدود کردن نوع فایلهای قابل اجرا و نمایش :
برای حفظ امنیت و اطلاعات سایتتون میتونید پسوند فایلهایی که بتوان بازشون کرد رو تعیین کنید :
Options +FollowSymlinks
RewriteEngine On
rewritecond %{REQUEST_FILENAME} !^(.+).css$
rewritecond %{REQUEST_FILENAME} !^(.+).js$
rewritecond %{REQUEST_FILENAME} !file.php$
RewriteRule ^(.+)$ /deny/ [nc]
توضیح : با کد بالا کاربر فقط اجازه باز کردن فایل هایی با پسوند css , js و php رو داره و در صورت درخواست سایر پسوندها ریدایرکت میشه به پوشه deny.
۱۴) ایجاد محدودیت در آپلود فایل :
با کد زیر حداکثر حجم فایل قابل آپلود رو ۲۰ مگابایت تنظیم کردیم.
php_value upload_max_filesize 20M
۱۵) ایجاد محدودیت در حجم پست ارسالی :
با کد زیر میشه حداکثر حجم هر پست رو ۲ مگابایت تعیین کرد.
php_value post_max_size 2M
۱۶) نمایش پیغام requast time در بازه زمانی مشخص :
requast time حداکثر زمانی درخواست فراخوانی یک صفحه هست :
php_value max_execution_time 200
۱۷) حداکثر زمان دریافت اطلاعات POST و GET :
php_value max_input_time 250
۱۸) جلوگیری از سرقت پهنای باند، فایلها و عکسها :
خیلی وقتها اتفاق میافته مدیران سایتهای دیگر آدرس عکس یا فایلهای شما رو کپی میکنن و تو سایت خودشون استفاده میکنن. با این عمل در حقیقت در هنگام درخواست برای نمایش اونها این درخواست به سرور شما ارسال میشه و در نهایت ار پهنای باند شما کاسته میشه. برای جلوگیری از این کار و ایجاد محدودیت برای نمایش فایلهاتون کد زیر رو در فایل htaccess قرار بدین:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site.com/ .*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]
۱۹) فعال کردن قابلیت Gzip :
وقتی کاربری از طریق مرورگر سایتش درخواست نمایش سایت شما رو میده این درخواست به سرور شما ارسال میشه و سرور فایلهایی که برای نمایش سایت شما لازم هست رو جمع میکنه و به مرورگر کاربر میفرسته و سایت شما نمایش داده میشه، ولی اگه از قابلیت Gzip استفاده کنید هنگام درخواست، سرور فایلهای مورد نیاز رو به صورت فشرده در میاره و این فایل فشرده رو به مرورگر ارسال میکنه و بعد از خارج شدن از حالت فشرده در سیستم کاربر سایت شما نمایش داده میشه. در حقیقت میزان حجمی که باید توسط مرورگر برای نمایش سایت شما دریافت بشه کمتر میشه و این یعنی افزایش قابل توجه سرعت بارگزاری سایت شما. برای اینکه چک کنید که هاست شما از این قابلیت پشتیبانی میکنه از این ابزار استفاده کنید. اگه پشتیبانی نمیکنه باید هاست رو عوض کنید و اگر پشتیبانی کرد کد زیر رو برای فعال شدنش روی سایت خودتون در فایل htaccess قرار بدین (این کدی هست که من برای سایت خودم استفاده میکنم شما میتونید پسوندهای مورد نظر خودتون رو با پسوندهای درج شده در اینجا تعویض کنید)
# BEGIN Compress text files
<ifModule mod_deflate.c>
<filesMatch "\.(css|js|x?html?|php|woff|ttf|png|jpg|gif)$">
SetOutputFilter DEFLATE
</filesMatch>
</ifModule>
# END Compress text files
۲۰) مدیریت Cache فایلها :
کش یعنی اینکه یه سری از فایلهای سایت شما که تغییراتی ندارن و یا در فواصل زمانی زیاد دچار تغییرات قرار میگرن مشن رو در یک محفظه به نسبت امن در مرورگر کاربر ذخیره کنیم تا در دفعات بعدی مراجعه به سایت این فایلها از خود سیستم اون بارگزاری بشن و در نهایت سرعت بارگزاری سایت خودمون رو چندین چند برابر کنیم.
کدی که در پاین قرار دادم کدی هست که من خودم دارم ازش استفاده میکنم و به مرور کامل شده و شما می تونید از هر بخش اون بنا به نیاز خودتون استفاده کنید:
# BEGIN Expire headers
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/woff "access plus 1 year"
</ifModule>
# END Expire headers
# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
<filesMatch "\.(ico|jpe?g|png|gif|swf|woff|ttf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "max-age=2592000, private"
</filesMatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</filesMatch>
</ifModule>
# END Cache-Control Headers
# BEGIN Turn ETags Off
<ifModule mod_headers.c>
Header unset ETag
</ifModule>
FileETag None
# END Turn ETags Off
# BEGIN Remove Last-Modified Header
<ifModule mod_headers.c>
Header unset Last-Modified
</ifModule>
# END Remove Last-Modified Header
۲۱) حل مشکل تعداد آیتم های فهرست وردپرس :
اگه دقت کرده باشین هنگام ساخت فهرست دستهها به صورت دستی از یه جایی به بعد دیگه هر چی اضافه میکنید بعد ذخیره میکنید، میبینید که اضافه نشده، برای حل این محدودیت کد زیر رو تو فایل htaccess قرار بدین:
<IfModule mod_php.c>
php_value suhosin.post.max_vars 7000
php_value suhosin.request.max_vars 7000
</IfModule>
۲۲) افزایش امنیت محتوای فولدر wp-includes :
کافیه کد زیر رو در htaccess قرار بدین :
# Block the include-only files.
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
نوشته ۲۲ دستور کاربردی برای بهینه سازی فایل htaccess اولین بار در طراحی سایت | طراحی وب سایت | شرکت طراحی سایت | بهترین شرکت طراحی سایت در تهران پدیدار شد.