Реклама ООО Таймвэб
Реклама ООО Таймвэб
Реклама ООО Таймвэб

Шпаргалка по .htaccess

7 комментариев

Шпаргалка по .htaccess

Это не мануал, здесь собраны наиболее часто используемые настройки .htaccess, своего рода сборник подсказок.

Для чего нужен .htaccess

.htaccess позволяет создать собственную конфигурацию управлением сервера Апач в директориях или настройках хостинга.

Правила .htaccess распространяются на все директории, где расположен файл, кроме директорий, где расположен собственный .htaccess.

Файл .htaccess считывается сервером Апач при каждом обращении, поэтому все изменения входят в силу сразу, после изменения.

Глобальные настройки сервера Апач могут содержать запрет на исполнение некоторых команд, обычно это вызывает ошибку 500. Также подобную ошибку может вызывать неправильный синтаксис или ошибка, например пропуск пробела.

Запрет доступа для определенных IP-адресов или диапазонов IP-адресов

Запрет доступа с IP-адреса 123.123.123.123.

Order Deny,Allow
Deny from 123.123.123.123

Если не указывать последние цифры адреса, то запрет будет распространяться на весь диапазон 123.123.123.0 - 123.123.123.255.

Order Deny,Allow
Deny from 123.123.123

Разрешаем доступ только с определенных IP-адресов

Order Deny,Allow
Deny from all
Allow from 123.123.123.123

Принудительное задание кодировки

AddDefaultCharset UTF-8

Иногда требуется очистка кэша браузера.

Отмена перекодировки сервером

CharsetDisable On

Создание собственных страниц с сообщениями об ошибках

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

ErrorDocument 404 http://site.ru/error/404.html
ErrorDocument 403 http:// site ru/error/403.html
ErrorDocument 401 http:// site.ru/error/401.html
ErrorDocument 500 http:// site.ru/error/500.html

Строка ErrorDocument 404 http://site.ru/error/404.html указывает, что при ошибке 404 будет показан файл 404.html, который должен находиться в корне директории сайта. Если файл расположен в другой директории, измените путь к файлу или ссылке.

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться

Редиректы

Редирект на .html

Пример, редирект с c site.ru/blog на site.ru/blog.html.

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Редирект на страницу без слеша в конце адреса

Пример, редирект с c site.ru/blog/ на site.ru/blog.

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

Редирект на страницу со слешем в конце адреса

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1/ [R=301,L]

Редирект на страницу без index.php в адресе

RewriteRule ^index.php/(.*)$ http://mysite.ru/$1 [R=permanent,L]

Редирект на страницу без index.php в конце адреса

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]

Редирект с www на без www

RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Редирект без www на www

RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

Склейка доменов

Пример, у вас несколько доменов, но посетитель должен переправляться на один.

RewriteCond %{HTTP_HOST} !^site.ru$
RewriteRule ^(.*) http://site.ru/$1 [R=301,L]

Редирект со старых статических url на новые

Пример редирект со страницы http://site.com.ru/id=21.

RewriteCond %{QUERY_STRING} ^id=21$
RewriteRule ^/page.php$ http://site.ru/news.html [L,R=301]

Защита от хотлинка

Если вы хотите запретить вставку изображений с сайта по прямой ссылке.

Вместо site.ru укажите адрес сайта, jpg|jpeg|png|gif - расширение запрещенных изображений, images.jpg – изображение которое будет показываться, если картинка находится не в корне сайта, укажите полный путь.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.ru [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ images.jpg [NC,R,L]

Защита от брутофорса

Разрешаем доступ к директории administrator только по протоколу HTTP, что отсеет некоторых ботов. Для каждой CMS нужно указать свой адрес, например wp-login, wp-admin и так далее.

RewriteCond %{REQUEST_URI} ^/administrator\.php$
RewriteCond %{THE_REQUEST} HTTP/1\.0
RewriteRule ^(.*)$ - [F,L]

Бытует легенда, что происхождения названия сервера Апач происходит не от названия индейского племени. Когда сервер был еще в самом начале пути, группа энтузиастов небольшие дополнения к коду, патчи (англ – patch), и «a patchy server» превратилось в Апач, а знаменитое перо на логотипе появилось позже.

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

Статья писалась эпизодическими «набегами», так что если увидите ошибку, поправьте.

Мой аккаунт на Marketplace - https://timeweb.com/ru/community/marketplace/bashkov-vladislav, обращайтесь

echo -e "Все про серверы, сети, хостинг и еще раз серверы" >/dev/pts/0

Комментарии

Денис Картинкин 0
26 мая в 2021
День добрый. Интересно и полезно. А как написать идеальный файл .htaccess? Начав с главного зеркала, а потом уже к сложному.
Вот тут:
RewriteCond %{HTTP_HOST} !^site.ru$
RewriteRule ^(.*) http://site.ru/$1 [R=301,L]
Везде пишется протокол http, а если сайт на https? То везде писать https?
Ivan 0
08 окт в 2021
Здравствуйте! Подскажите как написать 301 редирект с site.ru/blog.html на site.ru/blog
Свернуть ответы
Андрей +92
10 окт в 2021
Добавить в ваш .htaccess
Redirect 301 /blog.html https://site.ru/blog
Remizov Anton 0
02 июня в 2022
подскажите пожалуйста как сделать перенаправление с папки на поддомен с сохранением параметров урла после /папка/?
Написал:
RewriteBase /
RewriteCond %{HTTP_HOST} ^en.site.ru$
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/en(?:/|$)
RewriteRule ^(.*)$ en/$1 [L,QSA]
И всё бы ничего, но site.ru/en/smth в урле нормально отдается (как en.site.ru/smth), но по факту информацию не выдает
Михаил Пушкарев 0
20 сен в 2022
Подскажите, а как сделать чтобы при открытии sub.site.ru по этому адресу открывался site.ru/sub, но чтобы при этом при открытии sub.site.ru/something/something2 так же открывалось site.ru/sub/something/... при этом адрес в строке оставался более красивый?
Свернуть ответы
Михаил Пушкарев 0
20 сен в 2022
В общем чтобы был скрытый редирект, открывалась директория по тому адресу (и все папки и файлы в ней), а ссылка оставалась с поддоменом и короткая. Пробовал делать подобным образом:
RewriteCond %{HTTP_HOST} ^sub\site\.ru$
RewriteCond %{REQUEST_URI} !/subdomains/sub/
RewriteRule ^(.*)$ /subdomains/sub/$1 [L]
При открытии sub.site.ru/file или просто самого адреса всё работает правильно, но если открывать sub.site.ru/something/.../file всё превращается в франкенштейна sub.site.ru/subdomains/sub/something/.../file и этим всё портит
Dementr Andronov 0
24 ноя в 2022
Пробую через |or перечислить IP, не понимает

Пример:
RewriteCond %{REMOTE_ADDR} !=1.1.1.1|2.2.2.2

Указываю две кондиции тоже не хочет
пример:
RewriteCond %{REMOTE_ADDR} !=1.1.1.1
RewriteCond %{REMOTE_ADDR} !=2.2.2.2

Если кондиция одна с одним IP то все работает
пример:
RewriteCond %{REMOTE_ADDR} !=1.1.1.1

Ip из разных сетей их надо прописать персонально. Куда копать?
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
С помощью соцсетей
У меня уже есть аккаунт Войти
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта
Ваш баланс 10 ТК
1 ТК = 1 ₽
О том, как заработать и потратить Таймкарму, читайте в этой статье
Чтобы потратить Таймкарму, зарегистрируйтесь на нашем сайте