دستورات کاربردی htaccess
فایل htaccess چیست؟
همانطور که در مقاله htaccess چیست توضیح داده شد، .htaccess فایل های htaccess. جهت تغییر پیکربندی نرم افزار سرور آپاچی وب استفاده می شود که امکان فعال سازی و یا غیر فعال سازی قابلیت های اضافی و ویژگی های وب سرور آپاچی را فراهم می کند.
آموزش htaccess، ایت و مدیریت بهینه وردپرس با آن
در صورتیکه تمایل دارید تنظیمات روی تمام فولدرهای سایت اعمال شود ، از فایل htaccess موجود در فولدر public_html استفاده کنید. فایل htaccess ، در سرور به صورت فایل مخفی (Hidden) هست.
-محافظت از فایل .htaccess :
برای جلوگیری از سرقت اطلاعات خود فایل htaccess کد زیر را در ابتدای فایل htaccess قرار دهید:
<files ".htaccess">
order allow,deny
deny from all
</files>
-جلوگیری از سرقت فایلهای و فولدرهای دران هاست :
بیشتر وقتها اطلاعاتی مثل فایلهای قالب اختصاصی که بر روی هاست قرار دارند و یا فایلهایی که به صورت zip شده در هاست خود ذخیره کردهاید به راحتی کشف و به سرقت می رود. برای جلوگیری از این امر کد زیر را در انتهای فایل htaccess قرار دهید.
Options All -Indexes
-معرفی زبان پیشفرض (DefaultCharset) :
جهت تعیین زبان پیشفرض استفاده شده در مرورگرها، کدهای زیر را در قسمت هدر سایت قرار دهید. این عمل تاثیر خوبی روی سئو (SEO) سایت نیز دارد.
# 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
نمونه ای از چند خطای آپاچی ( Apache):
- خطای 401 : دسترسی به آدرس وارد شده غیر مجاز است.
- خطای 403: دسترسی به آدرس ممنوع میباشد.
- خطای 404: آدرس مورد نظر یافت نشد.
- خطای 500: خطای داخلی سرور بوجود آمده است.
-فیلترینگ (banned) اسپمرها با .htaccess (محدودیت دسترسی از طریق IP)
با توجه به بالا بودن میزان دیدگاههای اسپم مخصوصا روی سایت های پربازدید، بهتر است ترجیحا آی پی آنها را مسدود نمایید.
<Limit GET POST>
order allow,deny
deny from 200.49.176.139
allow from all
</Limit>
دستور “allow from all” بدین معناست که همه آیپیها بجز آیپیهای مسدود شده دسترسی دارند. اگه بخواهید فقط به IPهای خاصی اجازه دسترس دهید کافی است به کدی نظیر “allow from IP” را نوشته و به جای IP ، آی پی مورد نظر خود را وارد کنید.
با دستور “deny from IP” هم اجازه دسترسی آن آی پی را محدود می نمایید. همچنین می توانید هر تعداد IP زیرهم اضافه کنید. با این کد هیچ آی پی دسترسی نخواهد داشت.
نکته: از دیدگاه برخی از برنامه نویسان قرار دادن “<Limit GET POST>” و “</Limit>” در ابتدا و انتهای تعیین دسترسیها مشکلاتی را ایجاد میکند که شما می توانید آنها از ابتدا و انتهای کدها بردارید.
-جلوگیری از ارسال دیدگاه اسپم در وردپرس :
افزونه اکیسمت افزونه شناخته شدهای در زمینه جلوگیری از ارسال اسپم هست که در بسته اصلی خود وردپرس هم وجود دارد، اما می توانید با استفاده از کد زیر از ارسال هرزنامه به وبسایتتان جلوگیری کنید. دقت داشته باشید که در خط چهارم بجای yourblog.com آدرس سایت خود را وارد کنید.
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 می شود تاحدودی هم در سئو سایت موثر هست.
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 استفاده می کنید ، این کار تاثیر منفی روی سئو داشته و اعتبار سایت شما در موتور های جستجو بشدت کاهش می یابد.
جهت استفاده از سایت بدون www، می توانید از خطوط زیر استفاده نمایید:
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:
جهت جلوگیری از سرقت اطلاعات حیاتی و جلوگیری از دسترسی به اطلاعات پایگاه داده سایت (Database) کد زیر را در فایل 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
فرض کنید میخواهید از 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]