Что такое .htaccess?
Файл .htaccess (англ. hypertext access)
используется для простой и удобной настройки веб-сервера на котором
хранится сайт пользователя. Соответственно меняя настройку веб-сервера,
мы сможем поменять работу сайта. Как правило, файл .htaccess находится в
корневом каталоге, а его действие распространяется на весь сайт и на
все подкаталоги. Если же в другом каталоге содержится свой .htaccess, то
он будет действовать только на свой каталог и подкаталоги.
Важно! Изменяя файл .htaccess можно
очень нарушить работу сайта, а также необдуманные действия с ним могут
не иметь видимых последствий, но повлечь за собой снижение позиций в
поисковых системах, либо полную их потерю. Поэтому мы рекомендуем перед
любыми изменениями файла сохранять его копию, чтобы иметь возможность
вернуть прежние настройки.
Где находиться файл .htaccess?
Обычно он располагается в коневом
каталоге сайта. Иногда, в различных CMS может находится файл
htaccess.txt, который никак не воспринимается сервером и ни на что не
влияет. Чтобы он начал работать нужно его переименовать в .htaccess.
Если это не получится сделать на вашем компьютере, то зайдите на свой
сервер через FTP-клиент, и переименуйте файл прямо сервере.
Редактировать файл на компьютере можно с
помощью любого текстового редактора, но чтобы избежать возможных
проблем с кодировкой мы рекомендуем использовать для этого Notepad++.
Как проверить работает ли .htaccess?
Все просто, напишите в первой строчке
этого файла любое слово (например YAROBOT), сохраните файл и замените им
находящийся на сервере. Если сайт продолжит работать, то .htaccess в
данный момент не работает. Если же появится ошибка 500 Internal Server
Error, то это значит, что веб-сервер не смог понять команду (YAROBOT) и
выдал ошибку. Этот факт подтвердит, что работа .htaccess на сервере
поддерживается и включена в данный момент. Чтобы вернуть сайту
работоспособность удалите строчку с YAROBOT.
Далее мы поговорим о всем полезном, что можно сделать с помощью данного файла.
- Редирект между страницами или сайтами + изменение URL
- Обработка ошибок
- Настройка безопасности сайта
- Кодировка страниц сайта
- Оптимизация работы сайта
- Настройка PHP
Правильный 301 редирект через файл .htaccess
Важно! Если вы хотите, чтобы ваш редирект работал, нужно перед строками, которые рекомендуются ниже по тексту, обязательно прописать
RewriteEngine On
301 Редирект с одной страницы на другую (или сайт)
Для этого в файл .htaccess вносим следующие строки:
Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.html
или
RedirectPermanent /старая-страница.html http://сайт.рф/новая-страница.html
301 Редирект с www-сайта на сайт без www
Например перенаправление с http://www.site.com на http://site.com. Это очень полезная вещь, часто используется в СЕО
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Обратный редирект с домена без www на домен с www
Перенаправление с http://site.com на http://www.site.com (не советуем использовать)
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
Редирект всех посетителей со старого сайта на новый
Redirect 301 / http://newsite.com/
Как добавить .html в конце URL?
Чтобы при вводе site.com/page или site.com/page/ происходило перенаправление на site.com/page.html пишем в .htaccess следующее:
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]
Как убрать .html в конце URL?
Обратный редирект с site.com/page.html на site.com/page
RewriteBase /
RewriteRule (.*)\.html$ $1 [R=301,L]
Как убрать слэш в конце URL?
Например было site.com/page/, стало site.com/page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
301 Редирект с одного раздела на другой?
Перенаправление всех страниц одного
раздела site.com/razdel-1/razdel-2/page на на страницы другого раздела
site.com/razdel-1/page
RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1 [R=permanent,L]
301 Редирект при переезде со старого домена на новый
Следующее правило корректно перенаправит
посетителей с каждой конкретной страницы старого сайта на такую же
страницу на новом сайте. Например со страницы oldsite.com/page на
newsite.com/page
RewriteCond %{HTTP_HOST} ^www.oldsite.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^test.oldsite.com$ [NC]
RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]
Правильное изменение страниц ошибок через .htaccess
Когда пользователь хочет увидеть сайт
(отправляет запрос на сервер хостера), то сервер возвращает ему ответ с
кодом. Коды 1-399 свидетельствуют о нормальной работе сервера, а коды
400-599 сообщают об ошибке сервера (коды всех ошибок смотрите в спец. статье).
Например, если сервер с вашим сайтом перегружен, или у него происходит
перезагрузка, то пользователь увидит непонятный ему текст (например, 500
Internal Server Error), подумает, что сайт больше не будет работать и
больше никогда на него не вернется. Чтобы вместо стандартной страницы
ошибки (непонятно для пользователя) показать ему вашу отдельную
страницу, на которой будет например, сообщение о том, что сайт временно
не работает, но позже восстановит свою работу и на него обязательно
стоит вернуться (сайт КиноПоиск при перегрузки серверов выдает сообщение
"Матрица перезагружается..." и соответствующую картинку). Наиболее
распространенным решением является составление собственной страницы
вместо стандартной 404-ошибки. Эта ошибка показывается пользователю,
если введен адрес несуществующей страницы. Думающие вебмастеры, создают
свою страницу вместо непонятной стандартной, на которой пишут, что
человек перешел по несуществующей ссылке и предлагают поискать нужную
информацию на сайте, а не уйти с него. Пример нашей 404-страницы можно
увидеть здесь.
Чтобы показывать пользователям свою страницу ошибки вместо стандартной,
нужно создать отдельную страницу (например
http://yoursite.com/404.html) и добавить соответствующий код в файл
.htaccess Вот примеры кода, который нужно добавить:
ErrorDocument 400 http://yoursite.com/400.html
ErrorDocument 404 http://yoursite.com/404.html
ErrorDocument 500 http://yoursite.com/500.html
Если вы хотите подставить другую
страницу вместо ошибки 403, то нужно указывать еще текстовое сообщение,
которое будет показано, например:
ErrorDocument 403 "Sorry can't allow you access today, see you later alligator :)"
Настройки безопасности сайта через файл .htaccess
Файл .htaccess дает большие возможности для улучшения безопасности сайта. Наиболее популярные мы сейчас перечислим:
Защита сайта от скриптовых инъекций
#Включает отслеживание сим-ссылок
Options +FollowSymLinks
#Запускает url_rewriting
RewriteEngine On
#Блокирует все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокирует все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокирует все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляет все подобные попытки на страницу с ошибкой 403 - запрещено
RewriteRule ^(.*)$ index.php [F,L]
Как защитить сайт от кражи картинок
Часто вебмастеры-умельцы узнают путь к
картинке на вашем сайте и вставляют его в код своей странички. В итоге
основная страничка загружается с его сервера, а картинка - с вашего. Это
позволяет ему экономить свой трафик, и использовать ваш.
Options +FollowSymlinks
#Запрещает кражу картинок
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://yoursite.com/images/stop_stealing.gif[nc]
yoursite.com - адрес вашего сайта
http://yoursite.com/images/stop_stealing.gif - путь к картинке, которую вы сами должны создать. На ней обычно пишут "не крадите картинки с чужих сайтов" или что-то подобное.
http://yoursite.com/images/stop_stealing.gif - путь к картинке, которую вы сами должны создать. На ней обычно пишут "не крадите картинки с чужих сайтов" или что-то подобное.
Как заблокировать доступ к сайту для пользователя по IP?
Применяется против спамеров и прочих неадекватов, изредка для предотвращения хакерских атак.
#Вносим сюда нежелательные IP адреса
allow from all
deny from 164.186.15.116
deny from 124.153.34.144
Как заблокировать доступ к сайту для всех IP кроме проверенных?
Чтобы заблокировать доступ для всех, кроме конкретных IP-адресов, добавляем такой код:
#Запрещает доступ для всех, кроме указанных IP-адресов
ErrorDocument 403 http://www.yoursite.com
Order deny,allow
Deny from all
Allow from 164.186.15.116
Allow from 124.153.34.144
Как запретить просмотр содержимого конкретной папки
#Запрещает просмотр содержимого папки
Options All -Indexes
Запрет доступа к конкретному файлу
#Защищает файл myfile.txt
<files myfile.txt>
order allow,deny
deny from all
</files>
Запрет доступа ко всем файлам с конкретным расширением
Например чтобы запретить доступ ко всем файлам .txt пишем так:
<Files "\.(txt)$">
Order Deny,Allow
Deny from all
</Files>
Блокируем ненужных User Agent-ов
Часто у пользователя в браузере
установлено очень много расширений, которые передают серверу (на котором
расположен ваш сайт) информацию о себе и другую лишнюю информацию.
Такую же информацию посылают на сервер клиентские приложения
установленные на компьютере пользователя, а также различные роботы и
пауки. Информацию о большинстве актуальных на сегодня "Юзер Агентах"
можно найти здесь.
#Блокирует нижеперечисленных User Agent-ов
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]
<limit get="" post="" head="">
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</limit>
Изменение кодировки сайта через .htaccess
Бывает такое, что один пользователь
заходит к вам на сайт и видит его нормальным, а другой видит абракадбру
вместо букв. Это происходит из-за кодировки сайта. Чтобы браузер
пользователя правильно ее распознал, сайт делается в одной из популярных
кодировок:
UTF-8 - универсальная двухбайтовая кодировка
Windows-1251 - Кириллица (Windows)
KOI8-r - Кириллица (КОИ8-Р)
cp866 - Кириллица (DOS)
Windows-1250 - Центральная Европа (Windows)
Windows-1252 - Западная Европа (Windows)
Windows-1251 - Кириллица (Windows)
KOI8-r - Кириллица (КОИ8-Р)
cp866 - Кириллица (DOS)
Windows-1250 - Центральная Европа (Windows)
Windows-1252 - Западная Европа (Windows)
Также кодировку нужно указывать в мета-теге каждой страницы сайта, это сообщает браузеру в какой кодировке сделан сайт.
<meta http-equiv="content-type" content="text/html; charset=Windows-1251">
Если данный мета-тег не указан, то можно сообщить браузеру, какая у вас кодировка, с помощью файла .htaccess:
AddDefaultCharset WINDOWS-1251
Если работают оба варианта (и мета-тег, и файл .htaccess), то очень важно, чтобы кодировка в них совпадала.
Также есть возможность, чтобы сервер автоматически перекодировал все файлы, которые на него загружаются:
CharsetSourceEnc WINDOWS-1251
Чтобы выключить перекодировку сервера нужно вписать:
CharsetDisable on
Оптимизация работы сайта через .htaccess
Ускорение работы сайта через Gzip
. Включение данной функции позволяет
серверу сжать информацию, перед тем, как он отправит ее пользователю. В
итоге скорость работы сайта возрастет, но это немного увеличит нагрузку
на сервер (на котором хранится ваш сайт), т.к. ему придется выполнять
операцию сжатия налету. Чтобы включить Gzip-сжатие в файл .htaccess
нужно добавить следующие строки (попробуйте поочередно добавить 3
варианта кода, проверяя скорость здесь, и оставьте тот вариант, который дает наибольшее ускорение):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
<ifmodule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$ </ifmodule>
</IfModule>
или
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>
или
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
Как улучшить кэширование сайта на сервере?
Улучшенное кэширование позволяет не
загружать второй раз данные (картинки, основные элементы дизайна и
т.д.), которые уже были загружены пользователем в момент первого
просмотра сайта. Таким образом для конкретно взятого пользователя,
вторая и последующие просмотренные страницы загрузятся гораздо быстрее, а
нагрузка на ваш сервер существенно снизится. Улучшить кэширование сайта
можно с помощью следующего кода (пробуйте по очереди два варианта, и
оставляйте наиболее быстрый, скорость проверяем здесь):
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
</IfModule>
или
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
</filesmatch>
</ifmodule>
В выражении "access plus ..." установите
срок хранения файлов на компьютере пользователя. По истечении этого
срока, при запросе к сайту файлы будут единоразово загружены с сервера.
Оптимальным будет от 7 дней до месяца, хотя иногда устанавливается и
год.
Изменение главной (индексной) страницы сайта
Как правило при заходе на сайт сначала
загружается страница index.html или index.php. Чтобы изменить это
правило (в начале станет загружаться mypage.php) добавляем в .htaccess
такой код:
DirectoryIndex about.html
Настройка PHP-параметров через файл .htaccess
Обычно за настройки PHP отвечает файл
php.ini, но часть этих настроек можно задать через .htaccess. Для этого
используются два выражения: php_value - для логических значений
(например включить\выключить), и php_flag для числовых значений. Вот
правила написания этих выражений:
php_flag директива1 ЗНАЧЕНИЕ1
php_value директива2 ЗНАЧЕНИЕ2
где ЗНАЧЕНИЕ1 может быть on, off, 1 или 0 (1 и on - означает включить, а 0 и off - выключить);
ЗНАЧЕНИЕ2 - любое числовое или буквенное значение, которое подходит под конкретную директиву;
директива1 (используется только с php_flag) может иметь значения:
magic_quotes_gpc - вкл\выкл функцию magic_quotes_gpc
ЗНАЧЕНИЕ2 - любое числовое или буквенное значение, которое подходит под конкретную директиву;
директива1 (используется только с php_flag) может иметь значения:
magic_quotes_gpc - вкл\выкл функцию magic_quotes_gpc
php_flag magic_quotes_gpc on
display_startup_errors - вкл\выкл показ ошибок, которые происходят при работе PHP
php_flag display_startup_errors 1
display_errors - вкл\выкл показ ошибки в браузер
php_flag display_errors 1
output_buffering - вкл\выкл буферизацию вывода данных
>php_flag output_buffering on
register_globals - вкл\выкл глобальные переменные
php_flag register_globals on
engine - вкл\выкл исполнение PHP в папке в которой находится .htaccess и во всех вложенных
php_flag engine off
директива2 (используется только с php_value) может иметь такие значения:
upload_max_filesize - устанавливает максимальный размер загружаемого файла
php_value upload_max_filesize 10M
user_agent - задает значение строки user_agent, которую передает сервер
php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”
post_max_size - задает максимальный размер пересылаемой почты
php_value post_max_size 10M
mysql.default_user - задает имя пользователя базы данных
php_value mysql.default_user databaseuser
mysql.default_password - задает пароль для пользователя БД
php_value mysql.default_password jk323jh4g
mysql.default_host - задает имя хоста БД (обычно это localhost)
php_value mysql.default_host localhost
sendmail_from - задает имейл для отправки почты с помощью PHP
php_value sendmail_from
auto_prepend_file - задает файл, который будет добавлен в начало каждого PHP-скрипта
php_value auto_prepend_file /www/publiс_html/myfile.php
auto_append_file - задает файл, который будет добавлен в конец каждого PHP-скрипта
php_value auto_append_file /www/publiс_html/myfile.php
Комментариев нет:
Отправить комментарий