فایل .htaccess چیست و چه کاربردی دارد ، فایل .htaccess یکی از مهم ترین فایلهای کاربردی در سایت می باشد در ادامه به بررسی آن و معرفی کد های کاربردی در این فایل می پردازیم. در تمامی سیستم های تحت وب که عموما با زبان برنامه نویسی html و یا php نوشته شده اند و روی سرور لینوکس میزبانی می شوند، برای ایجاد پیکربندی در دایرکتوری ها و پوشه ها روی وب سرور آپاچی از فایل .htaccess کمک گرفته می شود.
این فایل در زمان عدم دسترسی به root سرور برای کنترل آپاچی بسیار مفید است.
فایل .htaccess بی نام است و صرفا با پسوند .htaccess شناسایی می شود. این فایل را با نام distributed configuration files می شناسند .
از دسترسی هایی که با استفاده از این فایل می توانید به آنها برسید :
۱.کنترل ریدایرکت
۲.کنترل دسترسی فیزیکی به فایلها و پوشه ها
۳.کنترل نمایش خطاهای Apache
۴.تنظیمات URL Rewrite
۵.مسدود کردن یک یا چند IP خاص یا یک رنج IP
۶.گذاشتن پسورد بر روی پوشه ای خاص
۷.تنظیمات کش و Expire Date آن
۸.اعمال برخی تغییرات در تنظیمات پیش فرض PHP، MySQL و Apache
۹.جلوگیری از نمایش تمامی فایلها یا یک یا چند فایل با پسوندی خاص
۱۰.انتقال صفحات به صفحه ای خاص
۱۱. معرفی یک Default Document در پوشه ای خاص
۱۲. تنظیم Default Charset
استفاده از این فایل در همه موارد پیشنهاد نمی شود چراکه در کنار قابلیت های فراوان استفاده از این فایل، با فعال کردن یک تابع احتمال هک شدن وب سایت افزایش خواهد یافت و راه نفوذ هکرها به هاست میزبان عموما از طریق توابع فعال در فایل .htaccess هموار می شود.
تنظیماتی که در فایل .htaccess قرار داده می شود بر روی پوشه جاری و زیر پوشه های آن اعمال می گردد و با قرار دادن یک فایل .htaccess دیگر در زیر پوشه ای خاص تنظیمات پوشه والد نقض می شود.
آموزش htaccess
فایل htaccess چیست؟
امروزه در اکثر سیستمهای مدیریت محتوا مثل وردپرس یا جوملا، یک فایل در شاخه اصلی هاست به اسم htaccess هست. این فایل رو در حقیقت با نام distributed configuration files میشناسند و در واقع برای کنترل آپاچی هستند که روی یک شاخه و تمام زیر شاخه های آن عمل میکند. این فایلها برای کارکرد در کنار فایلهای معمولی HTML یا PHP قرار میگیرن، می شود گفت این فایل اسم ندارد بلکه فقط از بخش پسوند تشکیل شده و به صورت .htaccess دیده میشه.
.htaccess یک فایل مخفی هست که میتواند در هر فولدری باشد و همانطور که ذکر شد عملیات های سرور مربوط به آن فولدر و زیر شاخه هایش را تنظیم میکند، مثلا می توانید دسترسی برخی فایل ها را محدود کنید تا از آن فایلها محافظت شود، URL را تنظیم کنید یا به مدیریت فایلهای قابل کش و خصوصیات آنها بپردازید و…
این فایل در سرور به صورت فایل مخفی هست و برای نمایش اون کافی هست مثلا در سی پنل، هنگامی که بر file manager کلیک میکنید تیک گزینه show hide files را فعال کنید تا بعد از باز شدن پنجره مدیریت فایلها تمام فایلهای مخفی قابل رویت باشن.
show-folder-filemanager
آموزش 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 که برای جوملا بهینه شده قرار می دهیم
##### Security Enhanced & Highly Optimized .htaccess File for Joomla! Powerd By Golchinonline
# @package Joomla
# @copyright Copyright (C) 2005 – 2018 Open Source Matters. All rights reserved.
# @license GNU General Public License version 2 or later; see LICENSE.txt
##
### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
### !! !!
### !! If you get an Internal Server Error 500 or a blank page when trying !!
### !! to access your site, remove this file and try tweaking its settings !!
### !! in the back-end of the Admin Tools component. !!
### !! !!
### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: ‘Options +FollowSymLinks’ may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that disallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url’s. If they work,
# it has been set by your server administrator and you do not need it set here.
##
## No directory listings
IndexIgnore *
## Can be commented out if causes errors, see notes above.
Options +FollowSymlinks
Options -Indexes
## Mod_rewrite in use.
RewriteEngine On
## Begin – Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End – Rewrite rules to block out some common exploits.
## Begin – Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End – Custom redirects
##
# Uncomment following line if your webserver’s URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##
# RewriteBase /
## Begin – Joomla! core SEF Section.
#
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn’t directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn’t directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End – Joomla! core SEF Section.
Header unset ETag
FileETag None
## Send ETag (selected method: )
##### Rewrite rules to block out some common exploits — BEGIN
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code\(.*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule .* index.php [F]
##### Rewrite rules to block out some common exploits — END
##### Advanced server protection rules exceptions — BEGIN
##### Advanced server protection rules exceptions — END
##### Advanced server protection — BEGIN
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault “access plus 1 month”
# Other
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 application/javascript “access plus 1 year”
# Data interchange
ExpiresByType application/json “access plus 1 week”
ExpiresByType application/xml “access plus 1 week”
ExpiresByType text/xml “access plus 1 week”
# Favicon (cannot be renamed!)
ExpiresByType image/x-icon “access plus 1 year”
# HTML components (HTCs)
ExpiresByType text/x-component “access plus 1 month”
# HTML
ExpiresByType text/html “access plus 0 seconds”
# Manifest files
ExpiresByType application/x-web-app-manifest+json “access plus 1 week”
ExpiresByType text/cache-manifest “access plus 1 week”
# Media
ExpiresByType audio/ogg “access plus 1 year”
ExpiresByType image/gif “access plus 1 month”
ExpiresByType image/jpeg “access plus 1 month”
ExpiresByType image/jpg “access plus 1 month”
ExpiresByType image/png “access plus 1 month”
ExpiresByType video/mp4 “access plus 1 year”
ExpiresByType video/ogg “access plus 1 year”
ExpiresByType video/webm “access plus 1 year”
# Web feeds
ExpiresByType application/atom+xml “access plus 1 day”
ExpiresByType application/rss+xml “access plus 1 day”
# Web fonts
ExpiresByType application/font-woff “access plus 1 month”
ExpiresByType application/vnd.ms-fontobject “access plus 1 month”
ExpiresByType application/x-font-ttf “access plus 1 month”
ExpiresByType font/opentype “access plus 1 month”
ExpiresByType image/svg+xml “access plus 1 month”
# CSS and JavaScript
ExpiresByType text/css “access plus 1 year”
ExpiresByType text/javascript “access plus 1 year”
ExpiresByType application/javascript “access plus 1 year”
</IfModule>
## EXPIRES CACHING ##
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
#disable hotlinking of images with forbidden or custom image option
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.yoursite\.com
RewriteRule (.*) http://yoursite.com/$1 [R=301,L]
<ifModule mod_headers.c>
Header set Connection keep-alive
</ifModule>
اگر روش یا راه حل بهتری برای بهینه سازی فایل htaccess دارید با ما در میان بگذارید.