17 Полезных советов .htaccess

23-11-2013

Некоторые прогеры не могут представить себе всю мощь .htaccess. Ниже рассмотрено 17 примеров применения .htaccess, которые могут принести существенную пользу вашему сайту.

1. Установить часовой пояс

Иногда, когда вы используете date или mktime в php. Вы можете получить смешное сообщение о часовом поясе. Один из способов решить эту проблему прописать часовой пояс для вашего сервера в .htaccess. Список поддерживаемых часовых поясов можно посмотреть здесь.

SetEnv TZ Australia/Melbourne

2. SEO дружественный 301 редирект

Почему SEO дружественный? Современные поисковые системы обладают возможностью определять 301 редирект и обновлять запись.

Redirect 301 http://www.queness.com/home http://www.queness.com/

3. Пропуск диалога для скачивания

Обычно когда вы пытаетесь скачать у вас открывается окно спрашивающее хотите ли вы открыть файл или сохранить и тд. Чтобы избежать этого окна можете использовать следующий код в .htaccess

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

4. Убрать www

По правилам SEO, должна быть всего одна ссылка указывающая на ваш сайт, либо с www. либо без. Чтобы убрать www в начале адреса, можно воспользоваться следующим кодом

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.queness.com [NC]
RewriteRule ^(.*)$ http://queness.com/$1 [L,R=301]

5. Страницы ошибок

Можно создавать страницы для ошибок с любым кодом

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

6. Сжатие файлов

Увеличьте скорость загрузки вашего сайта благодаря сжатию файлов

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

7. Кэширование файлов

Кэширование фалов еще один популярный способ увеличения скорости загрузки страницы

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

8. Отключение кеширования для файлов определенного типа

# отключение кеширования для скриптов и других динамических файлов
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

Безопасность

Следующие куски htaccess кода способствуют увеличению уровня безопасности сайта.

1. Защита от Хотлинкинга

Если вам не нравится когда другие сайты ссылаются на файлы расположенные на вашем сайте картинки и т.д., тем самым повышаю нагрузку на ваш сервер. Можете использовать следующий код для предотвращения этого.

RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?queness.com/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. Предотвращение взломов

Если хотите увеличить безопасность вашего сайта, можете вставить эти несколько строк кода в ваш .htaccess файл это позволит предотвратить взломы по нескольким основным моделям взлома через URL.

RewriteEngine On

# proc/self/environ? no way!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]

# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]

# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%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})

# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]

3. Закрыть доступ к вашему htaccess файлу

Следующий код позволит закрыть доступ к .htaccess файлу. Также можете закрыть доступ к любым другим файлам, даже файла по какой то маске

# secure htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>

# prevent viewing of a specific file
<Files secretfile.jpg>
 order allow,deny
 deny from all
</Files>

# multiple file types
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

4. Переименовать .htaccess файл

Вы можете переименовать htaccess файл для закрытия доступа к нему

AccessFileName htacc.ess

5. Отключение возможности просмотра содержимого папок на сервере

Избежание сервером выдачи содержимого папки или наоборот

# disable directory browsing
Options All -Indexes

# enable directory browsing
Options All +Indexes

6. Изменение индексного файла

Можно поменять название индексного файла по умолчанию index.html index.php или index.htm на что нибудь другое

DirectoryIndex business.html

7. Блокировка нежеланных посетителей с определенного домена

# block visitors referred from indicated domains
<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
 RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
 RewriteRule .* - [F]
 
</ifModule>

8. Блокировка посетителей по User-Agent’у в заголовках

Этот метод позволит заблокировать некоторых ботов посещающих ваш сайт

# block visitors referred from indicated domains
<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>

9. Отключить выполнение скриптов в определенной папке

# secure directory by disabling script execution
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI