Файл htaccess что это
Теперь стоит поговорить о некоторых самых популярных параметрах настойки:
Запреты и разрешения
Запрет на все файлы в каталоге:
Доступ только с определенного IP:
Запретить доступ для определенного ip:
Запрет доступа на группу файлов по расширению (по маске):
Разрешение или запрет на чтение по расширению.
Запрет на доступ к файлам *.inc:
Запрет доступа на конкретный файл:
Запрет на чтение conf.inc.php посетителями сайта не запрещает локальным приложениям сервера читать этот файл.
Такое значение AuthName для посетителей будет выводиться во всплывающем окне. Значение AuthUserFile указывает серверу, где хранится файл с паролями для доступа. такой файл можно создать специальной утилитой htpasswd в операционной системе linux или htpasswd.exe в ОС Windows.
Пароль только на 1 файл:
Пример установки пароля на файл file.rar:
Пароль на группу файлов по расширению:
Перенаправление при запросе определенных каталогов и страниц:
Переопределение стартовой страницы
Обработка ошибок сервера
код 401 — Требуется авторизация (Authorization Required)
код 403 — Нет доступа (Forbidden)
код 404 — Не найден файл (File not found)
код 500 — Внутренняя ошибка сервера (Internal Server Error)
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
Выставить полный запрет на просмотр оглавления необходимой директории. То есть, если в каталоге dir/ нет файла Index.*, что бы он загружался автоматически, то при обращении пользователя к dir/, ему будет отказано в доступе и Apache выдаст ошибку 403.
Иногда необходимо установить кодировку по умолчанию, то есть default-кодировка. В какой кодировке сервер будет отдавать документы.
А так же установка необходимой кодировки на файлы на сервере:
.htaccess PHP
Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:
Директивы модуля Mod_rewrite
Наиболее часто используемые параметры
Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php, который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.
Редиректы в зависимости от времени
Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.
Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить(склеить) страницы вида http://ваш_домен/ и http://ваш_домен/index.php
Запрещение доступа в конкретную директорию
Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(
) в опциях директивы. Синтаксис следующий:
Определение кодировки
Определение кодировки, в которой сервер «отдает» файлы
Определение кодировки на загружаемые файлы
После окончания заведения всех логинов файл нужно загрузить на сервер.
Задаем собственные страницы ошибок
Индексация директорий и поддиректорий
Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.
Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.
Защита изображений от скачивания
Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:
Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.
Отслеживание обращений к файлу robots.txt
PHPSESSID
Для отключения добавления PHPSESSID к URL вставьте в начало index.php:
Директивы кеширования
Запрет кеширования с помощью сервера Apache
Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:
Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!
Как заставить html-страницы обрабатывать php-код?
Как разместить несколько сайтов на одном виртуальном хостинге?
Чтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле «.htaccess» прописать следующие строки:
Поиск страниц больше чем в одном каталоге
Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.
Виртуальные хосты пользователей
Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:
Повреждаются файлы при загрузке на сервер
Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.
Возможные сообщения об ошибке:
You don’t have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.
Переменные сервера
Это переменные вида %
где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:
HTTP заголовки: | соединение & запрос: | |
---|---|---|
HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT | REMOTE_ADDR REMOTE_HOST REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE | |
внутренние сервера: | системные: | специальные: |
DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE | TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME | API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ |
Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:
Главная страница без дублирования
Все страницы-дубли будут склеены редиректом с кодом 301 с главной страницей – http://www.yoursite.ru/.
Дубли страниц без слэша в конце URL
Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:
Со страниц без слэша будет установлен редирект на «слэшевые».
Сохранение(загрузка) файлов вместо открытия
Сжатие отправляемых страниц
Принудительная постановка замыкающего слеша
Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.
Междоменное использование шрифтов для FireFox
Выполнять PHP в файлах JavaScript
Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов
Переадресация по языку
Защита картинок от скачивания по ссылкам на других сайтах
Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера.
Только по сссылкам на чужих сайтах:
Блокировать пользователей с определенным рефером
Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить.
bannedurl1.com и bannedurl2.com — примеры запрещенных сайтов.
Ограничение размера файла загрузки в PHP, максимального размера запроса и максимального времени выполнения скрипта
Объем загружаемого файла:
Максимальный размер запроса для загрузки в PHP:
Время выполнения скрипта:
Время для скрипта на разбор введенных данных:
Указываем для IE режим вывода
Установка заголовка X-UA-Compatible:
Установка Vary: Accept-Encoding
Для поисковой оптимизации, и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding
Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.
Общий файл картинки для всех доменов(глобальные алиасы)
Перенаправление на безопасное соединение https
Если вы используете https и хотите, чтобы все пользователи перенаправлялись на него, то вам поможет следующий код:
Доступ если установлена cookie с помощью htaccess
По этому же принципу можно закрывать сайт на профилактические работы для всех кроме админа.
Доступ к заголовкам «If-Modified-Since» и «If-None-Match» для реализации http 304 ответа
Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр ‘private_no_expire’:
Кроме этого дополнительную информацию по теме можно почерпнуть:
Где искать и как редактировать
.htaccess — общепринятое и самое популярное название, но не обязательное (оно задается в файле httpd.conf). Несмотря на непривычное название, создавать и редактировать файл можно в любом текстовом редакторе.
Некоторые CMS дают возможность редактировать файл через административную панель. В Битриксе его легко можно найти в разделе Контент — Файлы и папки:
Синтаксис файла простой: каждая директива (команда) начинается с новой строки, после знака # можно добавлять комментарии, которые не будут учитываться сервером. Изменения на сайте вступают в силу сразу, перезагрузка сервера не требуется.
Правила задаются в том числе при помощи регулярных выражений. Для того, чтобы их прочитать, нужно понимать значение спецсимволов и переменных. Расшифруем самые часто используемые.
Основные спецсимволы:
Основные переменные:
Настраиваем редиректы для SEO
При настройке 301 редиректов помните о двух правилах:
1. Настраиваем постраничные 301 редиректы
Это потребуется в следующих случаях:
Просто удалить страницу — плохая идея, лучше не отдавать роботу ошибку 404, а перенаправить его на другой URL. В этом случае есть шанс не потерять позиции сайта в выдаче и целевой трафик. Настроить 301 редирект с одной страницы на другую можно при помощи директивы простого перенаправления:
2. Избавляемся от дублей
Каждая страница сайта должна быть доступна только по одному адресу. Для этого должны быть настроены:
Переадресация на слеш или наоборот
Настроить ли переадресацию на страницы со слешем или без, в каждом случае нужно решать индивидуально. Если у сайта уже накоплена история в поиске, анализируйте, каких страниц в индексе больше. Для новых сайтов обычно настраивают редирект на слеш. Проверить, не настроена ли переадресация по умолчанию, просто: удалите/добавьте слеш в конце URL. Если страница перезагрузится с новым адресом — мы имеем дубли, требуется настройка. Если URL подменяется — все в порядке. Проверять лучше несколько уровней вложенности.
Код 301 редиректа на слеш:
Код 301 редиректа на страницы без слеша:
3. Настраиваем главное зеркало
Редирект на HTTPS
Определять, с «www» или без будет главное зеркало, можно несколькими способами:
После того как выбор сделан, воспользуйтесь одним из двух вариантов кода.
Редирект с www на без www
Редирект с без www на www
4. Перенаправляем с одного домена на другой
Самая очевидная причина настройки этого редиректа — переадресовать роботов и пользователей на другой адрес при переезде сайта на новый домен. Также им пользуются оптимизаторы для манипуляций ссылочной массой, но дроп-домены и PBN — серые технологии продвижения, которые в рамках этого материала мы затрагивать не будем.
Воспользуйтесь одним из вариантов кода:
Не забудьте поменять в коде «mysite1» и «mysite2» на старый и новый домен соответственно.
Модуль SEO в системе Promopult: для тех, кто не хочет тонуть в рутине. Все инструменты для улучшения качества сайта и поискового продвижения, автоматизация процессов, чек-листы, подробные отчеты.
Обеспечиваем безопасность сайта
5. Запрещаем загрузку картинок с вашего сайта
Существуют технологии, при которых сторонние сайты используют контент, в том числе изображения, загружая его прямо с вашего хостинга путем хотлинков (прямых ссылок на файлы). Это не только обидно и нарушает авторские права, но и создает ненужную дополнительную нагрузку на ваш сервер.
Осадите воришек при помощи этого кода:
6. Запрещаем доступ
Для нежелательных User Agents (ботов)
Список юзер-агентов можно дополнять, сокращать или создать свой. Перечень хороших и плохих ботов можно посмотреть здесь.
Частный случай такого запрета — запрет для поисковых роботов. Если вас почему-то не устраивает правило в robots.txt, можно запретить доступ, например, роботу Google при помощи таких директив:
Для всех, кроме указанных IP
Не забываем заменить «https://mysite.com» на адрес вашего сайта и вписать IP-адреса вместо IP1, IP2 и т.д.
Для определенных IP-адресов
Для подсети
Вписываем маску сети в строку после «deny from».
Спамные IP-адреса можно вычислить в логах сервера или с помощью сервисов статистики. В административной панели WordPress отображаются IP-адреса комментаторов:
К определенному файлу
Вписываем название файла вместо «myfile.html» в примере. Пользователю будет показана ошибка 403 — «доступ запрещен».
Для сайтов на WordPress важно ограничить доступ к файлу wp-config.php, т.к. в нем содержится информация о базе данных:
Для пользователей, пришедших с определенного сайта
Вы можете заблокировать посетителей с нежелательных ресурсов (например, со взрослым или шокирующим контентом).
7. Защищаем доступ к определенному файлу или папке
Защита паролем файла
Защита паролем папки
8. Запрещаем выполнение вредоносных скриптов
Следующая группа директив защищает сайт от так называемых «скриптовых инъекций» — инструмента хакерских атак:
Все попытки причинить вред вашему ресурсу будут перенаправлены на страницу ошибки 403 «доступ запрещен».
9. Защищаем сайт от DOS-атак
Один из способов защиты — ограничить максимально допустимый размер запроса (ограничение отсутствует по умолчанию).
В примере указан размер 10 Мбайт. Если вы хотите запретить загрузку файлов, пропишите число меньше 1 Мбайт (1048576 байт).
Также можно изучить возможности директив LimitRequestFields, LimitRequestFieldSize и LimitRequestLine в официальной документации.
Настраиваем отображение сайта
10. Заменяем индексный файл
Индексный файл — тот, что открывается по умолчанию при обращении к определенному каталогу. Обычно они называются: index.html, index.htm, index.php, index.phtml, index.shtml, default.htm, default.html.
Вот как это выглядит в структуре каталога:
Вместо «hello.html» вписывайте адрес желаемого файла.
Можно задать последовательность файлов, которые будут открываться в указанном порядке, если один из них будет недоступен:
11. Добавляем или убираем html в конце URL
Сохранять или убирать расширение файлов в URL — дело вкуса каждого оптимизатора. Достоверных исследований влияния расширений в адресах на ранжирование ресурса нет, но каждый вебмастер имеет свое мнение по этому поводу.
Этими же директивами можно добавить/убрать расширение php.
12. Настраиваем кодировку
Чтобы избежать ошибок в отображении ресурса браузером, нужно сообщить ему, в какой кодировке создан сайт. Самые популярные:
Чаще всего используют UTF-8 и Windows-1251.
Пример директивы, которая задает для файла кодировку UTF-8:
А такая команда означает, что все загружаемые на сервер файлы будут преобразованы в Windows-1251:
В примерах приведены разные кодировки, но в рамках одного сайта кодировки в этих директивах должны совпадать.
13. Создаем кастомные страницы ошибок
Перед тем, как прописывать директивы, создайте в корне сайта папку error и разместите туда соответствующие файлы для страниц ошибок.
Зачем это нужно? Например, чтобы не потерять пользователя на странице 404, а дать ему возможность перейти в другие разделы сайта:
Оптимизируем работу сайта
14. Сжимаем компоненты сайта при помощи mod_gzip или mod_deflate
Синтаксис модуля Gzip более гибкий и он умеет работать с масками:
В mod_deflate вы перечисляете типы файлов, которые нужно сжать:
15. Усиливаем кэширование
Этот комплекс команд поможет быстрой загрузке сайта для тех посетителей, которые уже на нем были. Браузер не будет заново скачивать картинки и скрипты с сервера, а использует данные из кэша.
В примере срок жизни кэша ограничен одной неделей («1 week»), вы можете указать свой срок в месяцах (month), годах (year), часах (hours) и т.д.
Другой вариант кода:
Для кэширования доступны следующие типы файлов:
Еще несколько возможностей
16. Управляем настройками php
Этот комплекс настроек выполняют программисты, если нет доступа к файлу php.ini. Остановимся на выражениях php_value, которые отвечают за объем загружаемых на сайт данных и время обработки скриптов, т.к. это напрямую влияет на производительность.
В строке «upload_max_filesize» указываете максимальный размер загружаемых файлов в мегабайтах, «post_max_size» означает максимальный объем постинга, «max_execution_time» указывает время в секундах на обработку скриптов.
17. Боремся со спам-комментариями на WordPress
Вместо «mysite.com» впишите адрес вашего сайта.
18. Устанавливаем e-mail для администратора сервера
19. Предупреждаем о недоступности сайта
IP-адрес в примере (12\.345\.678\.90) замените на свой, в последней строке укажите адрес страницы вашего ресурса с информацией о характере и сроках завершения работ.
.htaccess
При изменении файла новый набор настроек сразу начинает работать и не требует перезагрузки web-сервера.
Провайдер хостинга может запретить применение определенных директив в целях безопасности или снижения нагрузки на сервер. Названия директив может меняться, в зависимости от используемой на сервере провайдера версии Apache.
Директива должна иметь вид:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
/var/www/ по необходимости нужно заменить на свою директорию сайта.
После внесения изменений не забудьте перезагрузить веб-сервер, предварительно проверив корректность конфигурации:
Если вывод будет Syntax OK, то выполните: service httpd restart.
Провайдеры по умолчанию включают эту настройку для папок с сайтами пользователей на виртуальном хостинге, а владельцам VPS/VDS и выделенных серверов нужно самостоятельно проверить у себя наличие такой конфигурации в Apache.
Каждая строка файла означает определенную команду конфигурации (директиву) Apache.
Пустые строки игнорируются.
Для этого нажмите правой кнопкой мыши на файл, чтобы открыть контекстное меню с пунктом “Просмотр/Правка”.
Filezilla использует для редактирования текстовый редактор Notepad++, который должен быть установлен на локальный компьютер.
В случае, если файла в папке сайта нет, создайте его самостоятельно.
Ниже будут рассмотрены наиболее востребованные из настроек в контексте web-хостинга.
Механизм перенаправления (редиректа) запросов
Затем следует перечень специальных команд для настройки перенаправления, в зависимости от конкретных условий.
В своей работе механизм перенаправления mod_rewrite применяет специальную технологию программирования regexp для сравнения запросов с определенным шаблоном.
Склейка разных адресов одного сайта
RewriteEngine On
RewriteCond %^www.mysite\.ru$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
Перенаправление с HTTP-версии сайта на HTTPS-версию
Поисковые системы поощряют переход сайтов на безопасный режим HTTPS и дают ресурсам с поддержкой этого протокола лучшие результаты в поисковой выдаче.
Перенаправление страницы на другой адрес (URL)
Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.html
В случае переезда сайта на новый домен, настройте переадресацию пользователей на новый доменный адрес командой:
Иногда для правильной обработки страниц поисковыми системами требуется убрать слэш (символ “/”) в конце адреса страницы.
Например, было mysite.ru/page/, стало mysite.ru/page.
Подмена страниц на сервере
Это “серая” методика, и мы рассказываем о ней, чтобы вы знали, как это делается, но мы не рекомендуем ее применять.
Если web-сервер не находит нужный файл (страницу) при запросе к сайту по определенному адресу, то он отвечает специальной ошибкой 404. Используемая по умолчанию страница с ошибкой 404 малоинформативна.
То же происходит в случае ошибок 400 (неправильный запрос), 500 (ошибка сервера) и других распространенных ошибочных состояний web-сервера.
Чтобы у пользователя было больше информации, можно настроить свои собственные страницы для обработки ошибок web-сервера с возможностью навигации по сайту. На странице может быть указано, что человек перешел по несуществующей ссылке, и предложение поискать нужную информацию на сайте, а не уйти с него.
Например, на сайте ru.hostings.info используется такая страница обработки ошибки 404.
ErrorDocument 400 http://mysite.ru/400.html
ErrorDocument 404 http://mysite.ru/404.html
ErrorDocument 500 http://mysite.ru/500.html
Если нужно указать специальную страницу для обработки ошибки 403 (“доступ запрещен”), то нужно будет указать также текстовое сообщение, которое будет показано посетителю:
ErrorDocument 403 «Access forbidden / Доступ запрещен»
Защита сайта от атак
#Включает отслеживание сим-ссылок
Options +FollowSymLinks
#Запускает url_rewriting
RewriteEngine On
#Блокирует все ссылки, содержащие