.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
Основной файл располагается в корневой директории вашего web-сервера, отдельные файлы могут быть размещены в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).
Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess, но работоспособность указанных ниже правил зависит от настроек web-сервера, заданных хостером. Некоторые директивы могут быть запрещены и не работать.
При правильном использовании, конфигурационный файл .htaccess представляет собой очень мощное средство в инструментарии разработчика. Как защитить контент, как редиректить с одной страницы или домена на другой, как менять расширение с php на html и как кешировать страницы — далее в статье.
Убедитесь в том, что вы сделали резервную копию оригинального файла .htaccess для вашего сайта, прежде чем вносить какие-либо изменения!
Основные выражения для записей кодов
Выражения, которые потребуются для записей кодов:
$ — ограничение справа;
. — любой символ;
* — 0 и более символов;
[] — диапазон значений;
() — переменная;
+ — 1 и более символов;
\ — экранирование;
^ — ограничение слева.
1. Ограничение доступа к контенту
Если вам не нравится, что ваши картинки используется другими сайтами.
Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)? yourdomain.com/ [nc] RewriteRule .*.(gif|jpg|png)$ http://yourdomain.com/img/no_hotlinking.png[nc]
Не забудьте изменить domainname.com на ваше доменное имя и создать изображение no_hotlinking.png, которое будет показано вместо запрошенной картинки.
2. Ограничение доступа по 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] Order Allow,Deny Allow from all Deny from env=bad_bot
Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте List of User-Agents.
3. Ограничение доступа для всех, кроме указанных IP-адресов
Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш .htaccess-файл:
ErrorDocument 403 http:// yourdomain.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123
Не забудьте изменить domainname.com на ваше доменное имя.
4. Безопасный редирект 301
Чтобы перенаправить посетителя с одной страницы (домена) без ущерба для поисковых роботов.
Redirect 301 /d/file.html http://www.domainname.com/r/file.html
Не забудьте изменить domainname.com на ваше доменное имя, а/d/file.html и /r/file.html на соответствующие директории и страницы.
5. Перенаправление посетителя с помощью директивы RedirectMatch и регулярных выражений
Директива позволяет в качестве запрашиваемого адреса использовать регулярное выражение (пересылка не «с документа», а «со всех документов, типа …»). Редирект внешний — браузеру сообщается о необходимости загрузить другую страницу.
RedirectMatch [status] regexp URL
Значения статусов (код возврата веб-сервера) стандартные: permanent (301 — постоянный редирект), temp (302 — временный редирект, приходите ещё), seeother (303 — летим туда, там много вкусного), gone (410 — удалён навсегда).
Пример. Перенаправление со старого домена на новый без подключения RewriteEngine:
RedirectMatch 301 ^(.*)$ www.domainname.com/$1
Можно использовать не только статусы, но и другие условия:
RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png RedirectMatch (.*\.jpg)$ http://www.myanother.com$1
6. Перенос на новый домен
Перенаправляем пользователя на новый домен:
RewriteEngine On RewriteRule ^(.*)$ http://www.domainname.com/ [R=301,L]
Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строкеhttp://www.olddomainname.com — будет перенаправлен наhttp://www.domainname.com
7. Перенаправление на собственные страницы ошибок
Чтобы перенаправить посетителя на самодельную 404-страницу
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.
8. Подготовка черного списка IP адресов
Устали от спам-комментариев или определенного пользователя? Просто заблокируйте его IP с помощью следующего кода, добавляемого в .htaccess-файл.
allow from all deny from 145.186.14.122 deny from 124.15.
Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. Для WordPress, IP адреса комментаторов можно увидеть в административной панели.
9. Защита определенного файла от просмотра
В примере показано, как защитить .htaccess. При попытке просмотра посетитель попадает на страницу 403:
order allow,deny deny from all
10. Задание e-mail адреса по-умолчанию для администратора сервера
Используйте данный код, для того, чтобы установить e-mail адрес по-умолчанию для администратора сервера.
ServerSignature EMail SetEnv SERVER_ADMIN [email protected]
Не забудьте заменить [email protected] — своим e-mail адресом.
11. Кеширование
Код кеширует посещённые страницы, снижая время загрузки.
Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя, путем отправки статуса 304 для тех элементов, которые не обновлялись. Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds).
FileETag MTime SizeExpiresActive on ExpiresDefault "access plus 1 year"
12. Gzip-сжатие
При использовании Gzip, сервер будет сжимать файлы перед отправкой их пользователю, ввиду чего ваш сайт будет грузиться быстрее. Однако, включение компрессии приведет к большей нагрузке на процессор сервера.
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
13. Сжатие с помощью mod_deflate
В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно работает быстрее). Разместите следующий код в начале вашего файла .htaccess (также вы можете добавить .jpg|.gif|.png|.tiff|.ico):
#Сжимаем элементы с помощью mod_deflate SetOutputFilter DEFLATE
14. Задание срока жизни через заголовки
Данный код позволяет добавить сроки жизни в заголовки:
Header set Expires "Wed, 21 May 2010 20:00:00 GMT"
15. Установка страницы по умолчанию
Обычно страницей по умолчанию является index.html, однако с помощью этого кода вы можете настроить по
умолчанию любую другую страницу.
DirectoryIndex about.html
16. Изменение URL без имен папок в адресе
Чтобы http://yoursite.com/folder/one/ изменить на http:// yourdomain.com/one/, добавьте строчку в ваш .htaccess.
RewriteRule ^folder/(.+)$ http://www.yourdomain.com/ [R=301,L]
17. Запрет просмотра папок
Чтобы запретить просмотр папок вашего сайта , используйте код ниже. Чтобы открыть доступ, замените минус на плюс.
Options All -Indexes
18. Защита паролем папок и файлов
Вы можете включить проверку пароля для доступа в любую папку или файл на вашем сервере, используя этот код:
AuthType Basic AuthName "Prompt" AuthUserFile /pub/home/.htpasswd Require valid-user #защита паролем папки resides AuthType basic AuthName "This directory is protected" AuthUserFile /pub/home/.htpasswd AuthGroupFile /dev/null Require valid-user
Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password. Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd. В примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том числе и тому, который ввел правильную пару логин:пароль.
19. Редирект RSS-ленты WordPress на FeedBurner
Перенаправляем RSS на FeedBurner.
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/yourfeed [R=302,NC,L]
Изначально необходимо зарегистрировать ленту своего блога в сервисеFeedburner. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner.
20. Защита от спам-ботов. Запрещаем комментарии от пользователей без Referrer
Чаще всего спам-боты обращаются напрямую к файлу wp-comments-post.php, не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google).
При добавлении комментария сервер сравнивает заголовок Referer с «wp-comments-post.php». Если он не совпадает, комментарий не добавится.
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]
Не забудьте заменить yourblog.com на доменное имя вашего блога.
21. Защита сайта от изменения GLOBALS
Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS
#Включаем отслеживание сим-ссылок Options +FollowSymLinks #Запускаем url_rewriting RewriteEngine On #Блокируем все ссылки, содержащие
22. Удаление расширения файла из URL
Данный код позволяет удалить расширение файла .php (вы можете изменить его на любое другое, например — .html) из URL-адресов страниц.
RewriteRule ^(([^/]+/)*[^.]+)$ /.php [L]
23. Замена расширения файла
Меняем php на html.
Возможные ключи в квадратных скобках:
NC — no case — не различать в урлах прописные и строчные буквы
L — last — после этой директивы дальнейший анализ директив RewriteRule останавливается и прочие директивы не исполняются
RewriteEngine on RewriteBase / RewriteRule ^(.*)\.html$ $1.php [L]
24. Замена адреса страницы на человеко-понятный
Например, product.php?id=12 на product-12.html
RewriteEngine on RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1
25. Оптимизация адреса для поисковиков
Наиболее удобным для поисков будет поменять product.php?id=12 на product/ipod-nano/12.html . Данный код отображает адрес с главным ключевым словом.
RewriteEngine on RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2
26. Редирект всех возможных вариантов адресов на одну страницу.
Как сделать редирект всех возможных вариантов набора адреса страницы на одну и ту же? Например, надо, чтобы страницы http://www.site.com, http://site.com, http://www.site.com/index.html, http://site.com/index.html все перенаправлялись на одну и ту же на http://www.site.com, тогда необходимо прописать:
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^site.com RewriteRule (.*) http://www.site.com/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://www.site.com/ [R=301,L]
27. Перенаправление www-адреса на не-www-адрес
www.site.com превращаем в site.com
RewriteEngine on Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^www\.site\.com$ [NC] RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]
28. Перенаправление адреса без www на адрес с www
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
29. Включение PHP в .html файлах
Директива позволяет убрать сопоставление по умолчанию .html и .htm файлов с файлами с гипертекстовой разметкой, и добавить их обработку php-интепретатором.
RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml
Источник http://www.code-inside.com/
htaccess перенаправлять всех, кроме своего ip на другой сайт.
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule . http://www.somewhere.com/ [R,L]
где
xxx\.xxx\.xxx\.xxx — твой IP
http://www.somewhere.com/ — куда перенаправляем