Apache — .htaccess, как изменить название дериктории


Содержание

Подробное руководство по .htaccess файлам

категория
Веб технологии
дата 17.07.2009
автор poizon
голосов 21

[Disclaimer: Данная статья была переведена в рамках «Конкурса на лучший перевод статьи» на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

Введение

В интернете можно найти бесчисленное множество статей по .htaccess файлам, но ни одна из них не дает ответа на вопрос «Как эти файлы работают?». Статьи представляют собой просто коллекцию популярных заметок и хитростей с одинаковыми фрагментами кода. Это все конечно хорошо, но вот аргумент:

“Дай человеку рыбу, и он съест ее за один день. Научи человека ловить рыбу и он будет есть ее на протяжении всей жизни.” — Конфуций

В данной статье мы попытаемся не только показать Вам примеры полезных .htaccess директив, но и ответить на вопрос «Как эти файлы работают?». Внимание будет уделяться Apache 2, однако большая часть может быть применена к Apache 1.3, и мы попытаемся указать на их различия.

Что такое .htaccess?

.htaccess файлы (или «распределенные конфигурационные файлы») позволяют задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т. д, без изменения главного конфигурационного файла.

Директивы

«Директивы» — понятие, которое Apache использует в командах файла конфигурации Apache. Это сравнительно короткие команды, обычно пары ключ => значение, которые меняют поведение Apache. .htaccess файл позволяет разработчикам исполнять связку директив, не имея доступа к основному файлу конфигурации сервера Apache (обычно httpd.conf). Файл httpd.conf обычно называют «основной файл конфигурации», поэтому я буду ссылаться на него по этому названию, или его короткому эквиваленту httpd.conf.

Эта особенность идеальна для большинства хостинг-компаний предоставляющих общий хостинг. Хостинг-компании не дают своим клиентам доступа к основному файлу конфигурации, который имеет отношение ко всем клиентам размещенным на этом сервере. Поэтому, включая .htaccess, они дают своим клиентам возможность устанавливать и исполнять свои собственные директивы Apache на свои директории и их поддиректории.

Отметим, что все что может быть выполнено с помощью .htaccess файла может быть выполнено в httpd.conf. Однако, не все что может быть выполнено в httpd.conf может быть выполнено в .htaccess.

Включение поддержки .htaccess

Обычно, использование .htaccess включено по умолчанию. Отношения между глобальным файлом доступа и пользовательскими файлами .htaccess контролируется директивой AllowOverride в файле httpd.conf. Она может быть размещена только внутри блока . Значением по умолчанию является конечно «All». Таким образом использование .htaccess файлов включено по умолчанию. Альтернативным значением может быть «None», это значит что они полностью выключены. Есть множество других значений, которые ограничивают конфигурацию только определенным контекстом. Например, такие как:

  • AuthConfig — Разрешает использование директив разрешения, необходимых для защиты каталогов паролями, т.е. разрешает установку авторизации по имени пользователя и паролю (базовая аутентификация ).
  • FileInfo — Разрешает использование директив, управляющих типами документа (Headers, Error Documents, Cookies, URL Rewriting и т.д.).
  • Indexes — Показывать посетителю список файлов, если в выбранном каталоге нет файла index.html или его аналога
  • Limit — Допускает использование основных директив управления доступом (allow, deny и order), директив сакционирования Limit, т.е., например, ограничивает доступ к файлам в зависимости от адреса клиентского компьютера.
  • Options — Позволяет управлять тем, какие функции сервера доступны для использования в каталоге, указанном в секции . Может принимать значения ExecCGI, FollowSymLinks, MultiViews, Includes и другие.

Полное использование .htaccess

Я покажу несколько примеров без надлежащего блока . В этом примере включается возможность использования .htaccess в полном объеме:

# Даем .htaccess файлам полную силу

Ограниченное использование .htaccess

А в данном примере, включаем только аутентификацию и индексы :

# Здесь говорим, что .htaccess ограничен только AuthConfig Indexes

AllowOverride AuthConfig Indexes

Комментарии

Первые строчки, выше приведенных примеров, это комментарии Apache. Комментарии начинаются с символа «#». Множество комментариев в примерах помогут Вам понять, что в них делается. Однако, они не обязательны, это сугубо индивидуально.

Вторая строчка сама директива AllowOverride. Это обычный синтаксис директив Apache. За директивой следуют пробелы, разделяющие список значений. Конечно, такой синтаксис смотрится довольно свободным. Всегда будьте осторожны .

Иногда, даже одна ошибка в файлах httpd.conf или .htaccess может привести к временной неработоспособности сервера, и пользователи будут видеть ошибку «500 — Internal Server Error pages».

По этой причине, хорошей практикой всегда является бэкап файлов httpd.conf и .htaccess перед их изменением. Сделав это, вы всегда сможете вернуться к прежней рабочей конфигурации. Я призываю Вас, всегда делать не много изменений единовременно, и применять изменения по нарастающей, с проверкой работы прежних. Следуя такому пути, в случае ошибки, Вы всегда будете знать в какой она строчке.

Если Вы сомневаетесь в синтаксисе директив, то смотрите их на Apache Directive, где каждая директива включает пункт «Syntax». Я могу сделать эту статью интереснее, но всегда самой лучшей документацией является документация официальная.

Проверка включена ли поддержка .htaccess

Вполне возможно, что Ваша хостинг-компания не даст Вам доступ к httpd.conf файлу. Поэтому как Вы узнаете, включена ли поддержка .htaccess или нет? Не беспокойтесь. .htaccess это такая полезная функция, что большинство компаний включают ее, ну или включат по Вашей просьбе. Если в конфигурации Вашего хостинга не указана поддержка .htaccess, то обратитесь в технический отдел с письмом «проверить поддержку». Скорее всего у них уже подготовлен ответ на Ваш вопрос!

В любом случае, Вы всегда можете проверить работу простого .htaccess файла. Далее мы рассмотрим два способа проверки поддержки .htaccess.

Способ 1

Этот тест очень прост. Мы используем директивы, чтобы заставить Apache искать «index good.html» до «index.html». Если поддержка .htaccess включена, то при заходе в папку через браузер, Apache загрузит .htaccess и узнает, что он должен показать страницу «indexgood.html» с поздравлением! Если поддержка выключена, то Apache проигнорирует .htaccess, и немедленно начнет искать файл «index.html» по умолчанию.

DirectoryIndex

Директива DirectoryIndex получает, разделенный запятыми, список возможных файлов. Когда Apache получает URL директории (не прямой путь к файлу, например,http://www.example.com и не http://www.example.com/index.html), он будет использовать этот список файлов для поиска нужного файла. Он будет пробегать список слева направо. Если первый файл, который смотрит Apache, существует, то он загрузит и покажет его клиенту. Покажем работу выше указанного .htaccess файла для случая с поддержкой и без:

Способ 2

Как я сказал ранее, синтаксическая ошибка в Вашем .htaccess файле заставит сервер поперхнуться на его разборе. Это можно использовать для проверки!

Здесь «AHHHHHHH” не является директивой Apache. Это приведет к ошибке, если Apache попытается прочитать такой .htaccess файл! Поэтому, если Вы получите в ответ страницу с «Internal Server Error», говорящую о том, что сервер искал Ваш .htaccess файл, значит поддержка включена! А если Вы увидите index.html, то поддержка .htaccess отключена. Оба случая приведены ниже:

AccessFileName

И наконец, возможно, что поддержка .htaccess включена, но с уникальной настройкой. Системный администратор может изменить имя .htaccess файла, как мы поменяли имя индексного файла по умолчанию, который ищет Apache. Это возможно с помощью директивы AccessFileName в httpd.conf. Еще раз: самый лучший способ в данной ситуации, обратиться в отдел технической поддержки с просьбой предоставить более подробную информацию.

Последствия использования .htaccess файлов:

Перед тем как я покажу Вам некоторые полезные приемы, которыми Вы сможете пользоваться, я должен рассказать Вам о возможных вредоносных последствиях. Как я говорил ранее, .htaccess переопределяет настройки сервера для директорий и поддиректорий. Запомните, что изменения будут действовать не только на саму директорию, но и на ее поддиректории.

Это говорит вот о чем. Во первых, Apache ищет .htaccess файлы при каждом запросе, любые изменения будут немедленно применены. Apache не кэширует их, и Вы сможете проверить изменения при следующем запросе. Тем не менее, это значит, что Apache выполняет некоторые дополнительные действия для каждого запроса. Например, если пользователь запрашивает /www/supercool/test/index.html, то сервер проверит существование следующих .htaccess файлов:

  1. /www/.htaccess
  2. /www/supercool/.htaccess
  3. /www/supercool/test/.htaccess

Это возможные файлы доступа (возможные потому, что файлы могут не существовать) и их запуск займет время. Тем не менее, если Вы не имеете доступа к httpd.conf файлу, то Вы можете всегда включать директивы в .htaccess. С настройкой AllowOverride None, Apache не будет искать .htaccess файлы и Вы можете включить настройки только непосредственно в httpd.conf:

Листинг директории — Indexes:


Отображение содержимого каталога

Перед описанием группы функций, давайте начнем с чего-нибудь простого, но полезного, так Вы сможете прочувствовать работу .htaccess файлов.

Когда посетитель запрашивает ссылку на каталог (например, http://htaccess.net.ru/doc/), и такой каталог существует, Apache сперва ищет файл по умолчанию. Обычно он называется «index.html» или «index.php». Если он не находит таких файлов, то он возвращается к модулю mod_autoindex, чтобы вывести список файлов и директорий в запрашиваемой директории. Иногда это функция включена иногда нет. Точно, с помощью .htaccess Вы можете легко манипулировать листингом!

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

Директива Options

Эта директива может принимать несколько значений. Если Вы снабжаете параметры символами «+» или «-«, как мы делали с -Indexes, то эта опция будет наследована директориями выше и основной конфигурацией! Если Вы не указываете эти символы, то будет доступно только для данной директории и ее поддиректорий.

С такой директивой в Вашем .htaccess файле, Вы не увидите списка файлов. Посмотрим, что было до и после установки директивы:

Базовая аутентификация (Basic Authentication)

Возможно, отключение листинга директорий это не то, что Вы хотите сделать. Наверно Вы хотите оставить листинг, но пускать на страницы только определенных пользователей сайта. Базовая аутентификация (Basic Authentication) может быть полезной в таком случае. Это основной тип аутентификации в интернете. Когда посетитель пытается получить доступ к странице, он видит диалоговое окно Пользователь/Пароль. Только нужные пользователи смогут получить доступ.

Для базовой аутентификации необходимы два шага:

  1. Создать файл, в котором будут храниться имя пользователя и пароль(шифрованные).
  2. Добавить в .htaccess несколько строчек для использования файла с паролями.

Обычно, файл с паролями разработчики называют «.htpasswd». Это так, потому что команда, которая генерирует шифрованную пару пользователь/пароль, называется htpasswd. Если Вы владеете этой командой, то Вам не составит труда создать новую пару. В противном случае можете воспользоваться онлайн сервисом, который просто выдаст сгенерированный текст в окно браузера.

Давайте создадим простой .htpasswd файл для пользователя «joe» с паролем «cool». Вставим эти данные в онлайн сервис и получим:

Выводы могут быть разными и это нормально. Пароли хэшируются со случайным параметром, чтобы сделать их безопаснее. После того, как Вы добавили полученные данные в .htpasswd файл, добавим следующие строчки в .htaccess:

Эти команды хорошо документированы. Самая сложная задача, это только указание правильного пути к файлу .htpasswd, который Вы сгенерировали. Это абсолютный путь от корня сервера. Так как, путь абсолютный, то хорошо бы его размещать за пределами директории, в которой хранятся все файлы сайта. Так посетители не смогут получить к нему доступ.

Если Вы все сделали правильно, то увидите диалоговое окно аутентификации:

Базовая аутентификация хороша и проста, но это не полное решение. Пароли браузер отправляет Base64 кодированными и в режиме «plain text». Если Вам хочется использовать более безопасный метод аутентификации, то используйте его в паре с https, или другим безопасным протоколом.

Заголовки (Headers)

Основной протокол в интернете это Гипертекстовый протокол передачи данных (HTTP). Если Вы действительно хотите понять, что означают директивы Apache, Вы должен иметь представление о протоколе HTTP. Здесь я только поверхностно коснусь данной темы. Далее мы рассмотрим HTTP заголовки (Headers).

С каждым запросом (от браузера) и каждым ответом (от веб сервера типа Apache) приходят две секции. Секция с заголовками и секция с самими данными, если нет больше других.

Заголовки запроса приходят от клиента к серверу. Заголовки ответа наоборот. Они генерируются самим сервером (Apache): кодировка(the content encoding), размер, mime/type, управление кэшем (Cache Control), перенаправления (Redirects), статус (Status Codes) и другие. Когда-нибудь получали ошибку 404? Это результат запроса к несуществующему файлу. Сервер возвращает код 404 (Status Code) в своем ответе.

А что можно сделать в .htaccess? Вы можете использовать директивы Apache, чтобы переписать (изменить) или добавить новые заголовки, которые будут отправлены клиенту в ответе.

Начнем с примера. Добавим заголовок в ответ и посмотрим что получится:

Запрос к файлу в той же директории, что и .htaccess файл, покажет наш заголовок:

Заметили у заголовка префикс «X-«. Так разработчики обычно помечают их, чтобы указать, что они не стандартные. Эта договоренность описана здесь.

Иногда разработчики указывают смешные заголовки (This site).

Однако, я хочу показать Вам, как создавать заголовки, которые Вы сможете использовать для отладки. Как то раз, я использовал их для проверки подключения модулей на сервере. Я сделал следующую проверку:

Когда я сделал запрос с браузера, я увидел заголовки, это означало, что модули подключены!

Есть различия между Header set и Header add. С помощью «add», заголовки всегда добавятся в ответ. Даже, если они встречаются несколько раз в ответе. Вы можете использовать «set», для того, чтобы переписать заголовок по умолчанию. Например, переопределить mime/type заданный заголовком Content-Type. И тогда не будет дубликатов!

Заключение:

Я не описал несколько базовых директив Apache. Моей задачей было дать фундаментальные знания.

Если Вам понравилась статья, проголосуйте за нее

Листинг файлов (список файлов) в веб сервере apache

Как известно, если разрешить директиву в служебном файле .htaccess Options +Indexes То при запросе пути веб сервер покажет файлы, которые есть в этой директории

Этот список файлов можно визуально изменить (темизировать) и сделать, например, так (скриншот ниже) используя базовые возможность веб сервера

или так (старый вариант)

Для этого создадим в нужной директории файл .htaccess с таким содержимым

Рассмотрим, что обозначают все эти директивы:

Включаем вывод листинга файлов и симлинки (симлинки не обязательно)

Затем указываем кодировку. В зависимости от настроек сервера она может и не нужна либо нужна, но другая

Защита файла .htaccess

И основная часть

Параметры основной части более подробней:

Параметр Описание
IndexOptions включение опций (все опции можно посмотреть на оф сайте Apache apache.org
IgnoreCase игнорирование регистра
FancyIndexing сортировка по столбцам
FoldersFirst папки показывать вверху списка
NameW > размер поля имени файла. Звездочка обозначает, что имя файла не будут переносится на новую строчку
DescriptionW > тоже самое для описания файлов
XHTML формат разметки страницы с листингом. Может быть и HTML
HTMLtable оборачивает список файлов в html таблицу. Для таблиц всегда удобней применять специальный для этого html тег
SuppressHTMLPreamble убирает стандартную шапку, тем самым позволяя задать свою. Под шапкой подразумевается доктайп и все что находится в теге . Но для простаты реализации шапку можно оставить стандартную, если не требуется выводить что-то особенное.
SuppressRules убирает горизонтальные линии разметки
SuppressDescription
SuppressLastModified
SuppressSize
убирают соответственно колонки описания файла, даты его модификации и размера
IconHeight=16 размер высоты иконки в пикселях
IconW > размер ширины иконки в пикселях
IconsAreLinks иконки имеют ссылку на файл
HeaderName /dirlist_header.shtml подключение html страницы с основной разметкой
ReadmeName /dirlist_footer.shtml подключение html страницы с подвалом
IndexIgnore игнорирование показа файлов, например, самого файла .htaccess и тех файлов, которые не должны показываться в листинге, а так же можно скрыть и целые папки. Можно указывать как полное название файла так и маску например игнорировать все файлы стилей *.css

Осталось присвоить иконки разным типам файлов, делается это следующим образом


AddIcon /путь/list_blank.png ^^BLANKICON^^ иконка по умолчанию
AddIcon /путь/list_folder.png ^^DIRECTORY^^ иконка для папки
AddIcon /путь/bullet_arrow_up.png .. иконка для возврата
AddIcon /путь/list_images.png .png .gif .tiff .jpg .jpeg иконки для выбранных типов файлов. Одна иконка может обозначать разные расширения файлов, достаточно их просто перечислить

Что у нас находится в html шаблоне. dirlist_header.shtml (основная часть)

HTML код за исключением вставки

это путь к текущей директории, который отображается в тайтле и в теге h1 И заглушка страницы dirlist_footer.shtml

Все готово, остались стили к html шаблону, которые можно посмотреть в демонстрации

Настройка временного и постоянного редиректа в Apache

HTTP-перенаправление (или редирект) – это способ направить один домен или адрес на другой. Существует несколько видов перенаправления, каждый из которых по-разному воспринимается клиентским браузером. Самые распространённые виды – это временный и постоянный редирект.

Временный редирект используется в случае если контент, доступный по одному URL-адресу, нужно временно обслуживать из другого каталога. К примеру, если сайт находится на обслуживании, вы можете перенаправить запросы к домену на пользовательскую страницу ошибок, где посетители смогут узнать, когда сайт будет доступен.

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

Чтобы создать временный редирект в Apache, добавьте в виртуальный хост такую строку:

Redirect /oldlocation http://www.newdomain.com/newlocation

Чтобы настроить постоянный редирект, добавьте в файл виртуального хоста:

Redirect permanent /oldlocation http://www.newdomain.com/newlocation

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

Требования

  • Настроенный сервер.
  • Установленный веб-сервер Apache 2.
  • Виртуальный хост (эти руководства помогут создать виртуальный хост в Ubuntu 16.04, CentOS 7 и Debian 7).

Простая настройка редиректа

Чтобы настроить простой редирект одной страницы в Apache, можно использовать директиву Redirect, которая входит в модуль mod_alias. Модуль включен в Apache по умолчанию. Директиве нужно иметь минимум два аргумента: старый URL-адрес и новый URL-адрес. С её помощью можно настроить как временное, так и постоянное перенаправление.

Чтобы настроить простое временное перенаправление, добавьте следующие строки в конфигурации сервера:

ServerName www.domain1.com
Redirect / http://www.domain2.com

ServerName www.domain2.com
. . .

Теперь браузер будет направлять все запросы к www.domain1.com на домен www.domain2.com. Однако такое решение работает только с одностраничными сайтами.

Редирект объемных сайтов настраивается иначе. Для этого используется директива RedirectMatch, которая с помощью регулярных выражений может указывать целый каталог вместо одного файла.

Директива RedirectMatch выполняет поиск по шаблонам регулярных выражений в круглых скобках, а затем ссылается на найденный текст как на целевой каталог переадресации с помощью выражения $1 (где 1 — первая группа найденного текста). В более сложных примерах перенаправления группы, совпавшие с шаблонами, получают последовательные номера.

К примеру, чтобы временно перенаправить все страницы домена www.domain1.com на www.domain2.com, нужно добавить в файл:

ServerName www.domain1.com
RedirectMatch ^/(.*)$ http://www.domain2.com/$1

ServerName www.domain2.com
. . .

По умолчанию директивы Redirect и RedirectMatch устанавливают временный редирект. Чтобы с их помощью настроить постоянный редирект, нужно добавить в настройки опцию permanent:

Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1

Более гибкую настройку редиректа предоставляет модуль mod_rewrite, но его использование выходит за рамки данного руководства.

Пример 1: переход на другой домен

Предположим, у вас есть сайт, который пользуется популярностью, но в какой-то момент у вас возникла необходимость сменить его домен. Конечно, вы не можете просто переместить контент на новый домен, а старый забросить: так вы потеряете своих посетителей. Кроме того, ссылки на ваш сайт, расположенные на других сайтах, перестанут работать, если вы просто перенесёте контент на новый домен и не оставите никакой информации о его новом местонахождении. Все это приведёт к снижению трафика. Как переместить контент сайта на новый домен и не потерять аудиторию?

В таком случае нужно настроить редирект со старого домена (например, domain1.com) на новый (domain2.com). Чтобы навсегда сменить доменное имя сайта, используйте постоянный редирект. Благодаря этому браузер сможет перенаправлять поступающий трафик на новый домен.

Итак, предположим, что на данный момент сайт обслуживается по домену domain1.com, а его виртуальный хост находится в /etc/apache2/sites-available/domain1.com.conf:

ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
ErrorLog $/error.log
CustomLog $/access.log combined

Виртуальный хост для нового домена сайта, /etc/apache2/sites-available/domain2.com.conf, должен выглядеть так:

ServerAdmin admin@domain2.com
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/domain2.com/public_html
ErrorLog $/error.log
CustomLog $/access.log combined

Теперь измените настройки виртуального хоста domain1.com и добавьте в них постоянный редирект на domain2.com:

ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
ErrorLog $/error.log
CustomLog $/access.log combined
RedirectMatch permanent ^/(.*)$ http://domain2.com/$1

В данном случае используется директива RedirectMatch, а не Redirect, поскольку сайт состоит из нескольких страниц. Регулярное выражение ^/(.*)$ совпадает с любым текстом, идущим в URL-адресе после /. Таким образом, http://domain1.com/index.html будет перенаправляться на http://domain2.com/index.html.

Чтобы настроить постоянный редирект, нужно просто добавить опцию permanent в директиву RedirectMatch.

Примечание: После изменения виртуального хоста нужно перезапустить Apache, чтобы обновить настройки:

systemctl restart apache2

Пример 2: перенаправление страницы

В некоторых ситуациях возникает необходимость изменить название уже опубликованной страницы. Если вы просто измените название (без настройки редиректа), при запросе исходного URL-адреса страницы будет возникать ошибка 404 Not Found. Тогда пользователь, который добавил эту страницу в закладки, не сможет найти её, поскольку он использует устаревшую ссылку. Редирект позволяет устранить эту проблему.

Предположим, на вашем сайте есть две отдельные страницы для товаров и услуг, products.html и services.html соответственно, и вы решили объединить эти страницы в одну, offers.html. Чтобы не потерять трафик, нужно настроить редирект products.html и services.html на offers.html.


К примеру, исходный виртуальный хост сайта выглядит так:

Чтобы перенаправить эти две страницы на новую страницу, достаточно добавить в файл две директивы Redirect:

ServerName example.com
Redirect permanent /products.html /offer.html
Redirect permanent /services.html /offer.html
. . .

Директива Redirect принимает исходный адрес страницы, которую нужно перенаправить, а затем адрес новой страницы. Опция permanent обеспечит постоянный редирект. Вы можете использовать неограниченное количество директив Redirect в виртуальном хосте, чтобы перенаправить трафик на новые страницы сайта.

Заключение

Теперь вы умеете перенаправлять запросы пользователей. При настройке перенаправления будьте внимательны: неправильное использование временных редиректов может повредить ваш поисковый рейтинг.

Редирект HTTP применяется также для обеспечения SSL-шифрования трафика (редирект http на https) и добавления префикса www к домену сайта.

Форум русскоязычного сообщества Ubuntu

Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как изменить стандартную папку www у apache (Прочитано 24616 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страница сгенерирована за 0.061 секунд. Запросов: 22.

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Файл .htaccess — настройка перенаправлений и управление конфигурацией веб-сервера

.htaccess — это конфигурационный файл веб-сервера Apache , позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.

На хостинге RU-CENTER в настоящее время используется веб-сервер Apache версии 2.4.

Директивы файла .htaccess действуют для каталога, в котором размещён такой файл, и для всех его подкаталогов. Если вы желаете с помощью .htaccess изменить настройки для сайта в целом, его следует размещать в корневом каталоге сайта

Пожалуйста, будьте внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» Windows, а специальные текстовые редакторы, например Notepad++.

Примеры использования файла .htaccess

1. Перенаправление доменов c синонима сайта на основной домен с кодом 301

Перенаправить запросы на domain.ru с любого из синонимов сайта

RewriteEngine On
RewriteCond % !^domain\.ru$ [NC]
RewriteRule ^(.*)$ http://domain.ru/$1 [L,R=301]

Перенаправить запросы на www.domain.ru с любого из синонимов сайта

RewriteEngine On
RewriteCond % !^www\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://www.domain.ru/$1 [L,R=301]

Эти правила рекомендуется размещать в самом начале файла .htaccess.

2. Постоянное перенаправление с кодом 301

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

Redirect 301 /page.html http://www.domain.ru/new_page.html

  • page.html — адрес старой страницы относительно корня сайта;
  • www.domain.ru — имя сайта;
  • new_page.html — адрес страницы, на которую нужно выполнить перенаправление.

Например, для перенаправления всех запросов к странице /period/?test=123 вашего сайта на domain.ru, вы можете написать:

Options +FollowSymLinks
RewriteEngine On
RewriteCond % ^test=123$ [NC]
RewriteRule ^period/$ http://domain.ru/ [L,R=301]

3. Переопределение страниц ошибок

При помощи файла .htaccess вы можете установить свои страницы ошибок:

#401 Авторизация не выполнена
ErrorDocument 401 http://domain.ru/errors/401.html
#403 Доступ запрещен
ErrorDocument 403 http://domain.ru/errors/403.html
#404 Страница не найдена
ErrorDocument 404 http://domain.ru/errors/404.html
#500 Внутренняя ошибка сервера
ErrorDocument 500 http://domain.ru/errors/500.html

Соответствующие файлы страниц ошибок (401.html, 404.html и др.) необходимо разместить в каталоге

Для того чтобы при случайном упоминании прямых ссылок на такие страницы они не проиндексировались в поисковых системах, рекомендуется:

User-agent: *
Disallow: /errors

/ваш_домен/docs/errors/.htaccess, в котором прописать

4. Постраничное перенаправление запросов на другой домен c кодом 301

Следующий код перенаправит все запросы к страницам вашего сайта на аналогичные страницы другого сайта, например, запрос http://domain.ru/main будет переадресован на http://www.newdomain.ru/main:

Redirect 301 / http://www.newdomain.ru/

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]

5. Ограничение доступа к сайту по IP

Запретить доступ к сайту с IP-адресов 123.4.5.6 и 123.5.4.3

Order Allow,Deny
Allow from all
Deny from 123.4.5.6 123.5.4.3

Запретить доступ к сайту со всех адресов кроме 123.4.5.6 и 123.5.4.3:

Order Deny,Allow
Deny from all
Allow from 123.4.5.6 123.5.4.3

Запретить доступ к сайту для всех:


6. Переопределение главной страницы сайта (индексного файла каталога)

Сделать главной страницей файл menu.html:

7. Включение обработки PHP в .html-файлах

RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml

8. Запрет выдачи листинга каталога

В случае отсутствия в папке главной страницы (индексного файла), при обращении без указания конкретного имени файла в запросе будет выдан список всех файлов, находящихся в каталоге. Для того чтобы запретить отображение листинга каталога, добавьте в файл .htaccess строку:

9. Включить выполнение CGI-скриптов в папке docs для файлов с расширениями .cgi, .pl. .py

В папке c CGI-скриптами необходимо разместить файл .htaccess с содержимым:

AddHandler cgi-script .cgi .pl .py
Options +ExecCGI

Скрипт должен иметь атрибут исполнения (+x, права доступа, начинающиеся с 7, например, 755).

Атрибуты (права доступа) можно изменить с помощью файлового менеджера панели управления, при помощи вашего FTP-клиента или по SSH . Также в разделе Веб-серверУправление модулями должен быть включен модуль CGI.

10. Блокировка переходов со сторонних ресурсов

Для запрета перехода c baddomain.ru на domain.ru добавьте в .htaccess следующее:

RewriteEngine on
RewriteCond % baddomain\.ru [NC]
RewriteRule .* — [F]

Если требуется запретить переходы с нескольких доменов, то используйте следующие директивы

RewriteEngine on
RewriteCond % baddomain\.ru [NC,OR]
RewriteCond % baddomain2\.ru [NC,OR]
RewriteCond % baddomain3\.ru [NC]
RewriteRule .* — [F]

11. Особенности использования кириллических доменов (.РФ, .МОСКВА и др.)

В файле .htaccess использование кириллицы не допускается. При составлении правил перенаправления для кириллических доменов необходимо указывать имя домена в punycode. Узнать имя домена в punycode можно с помощью сервиса Whois.

Например, для перенаправления site.ru на caйт.рф нужно воспользоваться следующим правилом:

RewriteEngine on
RewriteCond % ^www\.site.ru [NC]
RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1 [R=301,L]

В этом случае ваши посетители могут увидеть именно punycode-представление доменного имени в адресной строке браузера. Это не является ошибкой.

12. Перенаправление с HTTP на HTTPS и обратно

Перенаправить запросы на https://domain.ru

Перенаправить запросы на http://domain.ru

3. Диагностика ошибок

Если после редактирования или размещения .htaccess при обращении к сайту вы получили ошибку 500, то, скорее всего, в файле .htaccess допущена ошибка. Посмотреть её причины вы можете в лог-файле /var/log/ваш_домен.error_log.

.htaccess примеры

Меняем параметры и разрешения работы веб-сервера, такие как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

Частые ошибки:

  • Создал файл .htaccess, но сервер выдает 500 ошибку — Internal Erorr

  • Запрет на конкретный файл:
    Можно поставить запрет на конкретный файл по его названию и расширению.
    order allow,deny
    deny from all
    В данном примере стоит запрет на обращения к файлу config.inc.php.

    Пароль на директорию: AuthName «Private zone»
    AuthType Basic
    AuthUserFile /pub/home/твой_логин/.htpasswd
    require valid-user
    Значение AuthName будет выводиться для посетителя и может использоваться для пояснения запроса авторизации. Значение AuthUserFile указывает на место, где хранится файл с паролями для доступа к данной директории. Этот файл создается специальной утилитой htpasswd.exe.

    Например в директории, которую защищаем паролем создаем такой .htaccess: AuthName «For Registered Users Only»
    AuthType Basic
    AuthUserFile /pub/site.ru/.htpasswd
    require valid-user
    В этом примере, посетитель при запросе директории, будет читать фразу «For Registered Users Only», файл с паролями для доступа должен лежать в директории /pub/site.ru/ и называться .htapasswd . Директория указывается от корня сервера, если вы неправильно зададите директорию, то Апач не сможет прочитать файл .htpasswd и никто не получит доступа к данной директории.

    Пароль только на 1 файл: сайт источник http://yapro.ru Tue Feb 09 2010 15:44:59 GMT+0300
    Аналогично паролированию директории полностью, можно ставить пароль только на 1 файл.
    Пример установки пароля на файл private.zip:
    AuthName «Users zone»
    AuthType Basic
    AuthUserFile /pub/home/твой_логин/.htpasswd

    Пароль на группу файлов:
    Аналогично, используя , можно ставить пароли по маске файлов.
    Пример установки пароля на доступ ко всем файла с расширением «sql»:

    AuthName «Users zone»
    AuthType Basic
    AuthUserFile /pub/home/твой_логин/.htpasswd

    Проверка прав доступа

    Задача: есть каталог a1 и в нем два вложенных каталога a2, a3, введено 2 уровня пользователей. 1 группа имеет доступ только к a1 и a2, 2-я ко всем трем каталогам. Необходимо проводить аутентификацию только 1 раз — при доступе к a1, но при этом соблюдать права на доступ к а2 и а3.
    Ник и пароль запрашиваются только при входе на а1 — если у юзвера есть доступ на а2 пароль уже не запрашивается. Если на а3 доступа нет, вылетит табличка «введите пароль».
    www.site.ru/a1
    www.site.ru/a1/а2
    www.site.ru/a1/a3
    a1 — общий и вместе с тем закрытый. а2 и а3 только для отдельных личностей.

    файл .htaccess для каталога а1: AuthName «Input password»
    AuthType Basic
    AuthUserFile «/pub/home/login/htdocs/clousearea/.htpasswd»

    require valid-user
    файл .htaccess для каталога а2: AuthName «Input password»
    AuthType Basic
    AuthUserFile «/pub/home/login/htdocs/clousearea/.htpasswd»

    require user юзвер1 юзвер2 юзвер3
    файл .htaccess для каталога а3: AuthName «Input password»
    AuthType Basic
    AuthUserFile «/pub/home/абв/htdocs/clousearea/.htpasswd»

    require user юзвер1 юзвер4 юзвер5

    Как сделать перенаправление (редирект) посетителя?

    Редирект на другой url:
    Что бы сделать перенаправления посетителя на сайт http://site.ru в .htaccess Redirect / http://www.site.ru

    Показ разных страниц, в зависимости от IP адреса посетителя: SetEnvIf REMOTE_ADDR REDIR=»redir»
    RewriteCond % redir
    RewriteRule ^/$ /another_page.html Например, перенаправление посетителей с ip адресом 192.12.131.1 на страницу about_my_sity.html: SetEnvIf REMOTE_ADDR 192.12.131.1 REDIR=»redir»
    RewriteCond % redir
    RewriteRule ^/$ /about_my_sity.html

    Перенаправление посетителя при запросе определенных страниц:
    Это уже для всех сетевых вирусов и сканеров. Теперь любой запрос с адресом /_vti_bin будет автоматически перенаправляться на Microsoft: redirect /_vti_bin http://www.microsoft.com
    redirect /scripts http://www.microsoft.com
    redirect /MSADC http://www.microsoft.com
    redirect /c http://www.microsoft.com
    redirect /d http://www.microsoft.com
    redirect /_mem_bin http://www.microsoft.com
    redirect /msadc http://www.microsoft.com
    RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1

    Как сделать стартовой другую страницу?

    Что бы поменять страницу, которая будет показываться при обращении к директории, пишем: DirectoryIndex Можно указывать несколько страниц. DirectoryIndex index.shtml index.php index.php3 index.html index.htm

    Как заставить Апач обрабатывать SSI директивы?

    SSI позволяют «собирать» страницу из кусочков. В одном кусочке у вас код меню, в другом код верхней части страницы, в третьем — нижней. А посетитель видет обычную страницу, которая состоит из того кода, который входит в ваши кусочки.
    Необходимы обязательные установки в httpd.conf:
    В блоке, начинающемся с и заканчивающийся в строку Options Indexes добавьте Includes.

    После, в файле .htaccess пишем:
    AddHandler server-parsed .shtml .shtm .html .htm

    Как заставить Апач выполнять в html документах php код?

    Иногда бывает полезно «обмануть» посетителя, выдавая ему свои php-скрипты или иные файлы, как html файлы. Реально используется для индексации поисковой системой Rambler php-скриптов. Некоторые делаю мелкие фишки, вроде того, что дают фалам расширения совпадающие с какими-либо «знаковыми» именами. Например, на сайте www.osg.ru используются файлы с расширением osg: index.osg, script.osg и т.п.
    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .htm .html .phtml При большой посещаемости сервера может вызвать тормоза. Спрашивайте у админа.

    Как самому обрабатывать ошибки Апача?

    Наиболее интересные и полезные ошибки Апача это: 403-404, 500.
    403 — пользователь не прошел аутентификацию, запрет на доступ (Forbided).
    404 — запрашиваемый документ (файл, директория) не найден.
    500 — внутренняя ошибка сервера (к примеру, ошибка в синтаксисе файла .htaccess).
    Для того, что бы пользователю при этих ошибках были показаны ваши собственные сообщения об ошибках, в .htaccess пишем:
    ErrorDocument 403 /errors/403.html
    ErrorDocument 404 /errors/404.html
    ErrorDocument 500 /errors/500.html При этом при возникновении 404 ошибки пользователю загрузится файл errors/403.html.

    Удобно делать собственный обработчик на некоторые ошибки. В .htaccess пишем: ErrorDocument 403 /errors/error.php?403
    ErrorDocument 404 /errors/error.php?404
    ErrorDocument 500 /errors/error.php?500 В error.php через $HTTP_SERVER_VARS[‘REQUEST_URI’] определяем какой документ вызвал ошибку и дальше обрабатываем. Если в .htaccess на ErrorDocument стоит указание файла с полным путем (http://site.ru/error.php), то $HTTP_SERVER_VARS[‘REQUEST_URI’] будет содержать этот файл, а не вызвавший ошибку.
    В Internet Explorer 5.0 неправильно обрабатывается файл, вызывающийся при ошибке, если его размер меньше 1 килобайта. Будет вызвана стандартная страница IE 404.

    Как поставить запрет на отображение содержимого директории при отсутствии индексного файла?

    Предположим, что у вас вся графика, используемая на сайте находится в директории img. Посетитель может набрать в адресной строке браузера эту директорию и увидеть список всех ваших графических файлов. Конечно, это не нанесет вам урона, но можно и не дать такого просмотра посетителю. В .htaccess пишем:

    Можно ли указать кодировку на все файлы, в которой по умолчанию получает документы браузер?

    На заре интернета и зарождения браузеров, часто была ситуация, что браузер не мог автоматически определить, в какой из русских кодировок написан документ и в браузер выдавалась какая-то каша. Для избежания этого указываем, что все отдаваемые страницы будут иметь кодировку windows-1251:
    AddDefaultCharset windows-1251

    Можно ли указать кодировку на загружаемые файлы?

    При загрузке посетителем файла на сервер, возможна перекодировка его — указываем, что все получаемые файлы будут иметь кодировку windows-1251:
    CharsetSourceEnc windows-1251

    Создал файл .htaccess, но сервер выдает 500 ошибку — Internal Erorr

    Ошибка синтаксиса или файл записан не в том формате.
    Смотрите вопрос #2.

    htaccess

    Что такое .htaccess?

    Файл .htaccess (англ. hypertext access) используется для простой и удобной настройки веб-сервера на котором хранится сайт пользователя. Соответственно меняя настройку веб-сервера, мы сможем поменять работу сайта. Как правило, файл .htaccess находится в корневом каталоге, а его действие распространяется на весь сайт и на все подкаталоги. Если же в другом каталоге содержится свой .htaccess, то он будет действовать только на свой каталог и подкаталоги.

    Важно! Изменяя файл .htaccess можно очень нарушить работу сайта, а также необдуманные действия с ним могут не иметь видимых последствий, но повлечь за собой снижение позиций в поисковых системах, либо полную их потерю. Поэтому мы рекомендуем перед любыми изменениями файла сохранять его копию, чтобы иметь возможность вернуть прежние настройки.

    Где находиться файл .htaccess?

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

    Редактировать файл на компьютере можно с помощью любого текстового редактора, но чтобы избежать возможных проблем с кодировкой мы рекомендуем использовать для этого Notepad++.

    Как проверить работает ли .htaccess?

    Все просто, напишите в первой строчке этого файла любое слово (например YAROBOT), сохраните файл и замените им находящийся на сервере. Если сайт продолжит работать, то .htaccess в данный момент не работает. Если же появится ошибка 500 Internal Server Error, то это значит, что веб-сервер не смог понять команду (YAROBOT) и выдал ошибку. Этот факт подтвердит, что работа .htaccess на сервере поддерживается и включена в данный момент. Чтобы вернуть сайту работоспособность удалите строчку с YAROBOT.

    Далее мы поговорим о всем полезном, что можно сделать с помощью данного файла.

    Правильный 301 редирект через файл .htaccess

    Важно! Если вы хотите, чтобы ваш редирект работал, нужно перед строками, которые рекомендуются ниже по тексту, обязательно прописать

    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 % ^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 % ^domain\.com$ [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

    Редирект всех посетителей со старого сайта на новый

    Как добавить .html в конце URL?

    Чтобы при вводе site.com/page или site.com/page/ происходило перенаправление на site.com/page.html пишем в .htaccess следующее:

    Как убрать .html в конце URL?

    Обратный редирект с site.com/page.html на site.com/page

    Как убрать слэш в конце URL?

    Например было site.com/page/, стало site.com/page

    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 % ^www.oldsite.com$ [NC,OR]
    RewriteCond % ^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
    #Блокирует все ссылки, содержащие

    Apache — .htaccess, как изменить название дериктории

    47 просмотра

    2 ответа

    13 Репутация автора

    Можно ли в файле .htaccess перенаправить несколько имен файлов, например, я использую, чтобы иметь такие файлы, как:

    Я хочу изменить их на их новые имена файлов:

    Ответы (2)

    плюса

    6065 Репутация автора

    Попробуйте это в каталоге, где у вас есть php-файлы,

    плюса

    10595 Репутация автора

    Добавьте файл htaccess в каталог webroot и добавьте правило, подобное этому:

    Он отображает любой запрос, который соответствует условию, в соответствующий php-файл под капотом . Если вместо этого вам нужен редирект, добавьте R флаг к правилу.

    Если вам нужно более общее правило, чтобы соответствовать чему-либо в первом сегменте, попробуйте следующее:

    unixforum.org

    Форум для пользователей UNIX-подобных систем

    • Темы без ответов
    • Активные темы
    • Поиск
    • Статус форума


    Решено: .htaccess изменение корневой папки.

    Модератор: SLEDopit

    Решено: .htaccess изменение корневой папки.

    Сообщение Gang » 04.07.2009 16:21

    Re: Решено: .htaccess изменение корневой папки.

    Сообщение webboy » 05.07.2009 02:45

    .htaccess
    DirectoryIndex my_site

    а так не правильно
    DirectoryIndex /my_site/

    Настройка файла .htaccess

    Файл .htaccess позволяет настраивать веб-сайт на сервере Apache без необходимости изменять файлы конфигурации сервера. В данном руководстве мы рассмотрим наиболее распространенные примеры его использования. Однако, прежде чем перейти к работе с этим файлом, необходимо сделать важное замечание. Несмотря на то, что страница .htaccess может быть очень полезной и существенно улучшить сайт, у нее есть два фактора негативного влияния:

    1. Скорость — страница .htaccess может немного замедлить работу вашего сервера, хотя для большинства серверов это изменение будет незаметным. Это связано с расположением страницы: она влияет на все страницы в своей директории и в ее поддиректориях. При каждой загрузке страницы сервер сканирует ее директорию и все директории выше, пока не дойдет до верхнего уровня или файла .htaccess. Эти действия выполняются всегда, когда параметр AllowOverride (о нем чуть ниже) разрешает использование файлов .htaccess, независимо от того, существуют ли эти файлы на самом деле.

    2. Безопасность — файл .htaccess гораздо доступнее стандартной конфигурации Apache, а изменения вносятся мгновенно (без необходимости перезапуска сервера). Предоставление пользователям права внесения изменений в файл .htaccess предоставляет им значительный контроль над самим сервером. Любая директива в файле .htaccess действует так же, как директива в самой конфигурации Apache.

    В целом Apache не рекомендует использовать файл .htaccess, если пользователь сам может работать с файлами конфигурации Apache.

    Подключение файла .htaccess

    Если у вас есть доступ к настройкам сервера, вы можете изменить конфигурацию, чтобы разрешить использование .htaccess вместо стандартной конфигурации веб-сайта. Откройте файл конфигурации узла apache2 по умолчанию (для этого вам потребуются привилегии суперпользователя):

    Найдите в этом файле следующий раздел и измените значение параметра AllowOverride c None на All. В конечном итоге раздел должен выглядеть так:

    Сохраните и закройте этот файл, а затем перезапустите apache.

    Создание файла .htaccess

    Файл .htaccess можно создать в любом текстовом редакторе, например:

    Убедитесь, что его имя строго .htaccess, а затем при помощи ftp-клиента загрузите его на сайт.

    Использование файла .htaccess

    Использование файла .htaccess не требует таких высоких привилегий, как доступ файлу apache2.conf, но при этом позволяет осуществлять эффективное управление сайтом. Далее мы рассмотрим ряд примеров применения этого файла.

    Управление доступом

    Файл .htaccess может применяться для гибкого разграничения доступа к вашему сайту или отдельным его страницам. Один из типичных вариантов – запрет доступа с определенных IP-адресов, например, следующий код запрещает доступ со всех адресов, кроме 192.168.1.1. Это полезно при обслуживании сайта, когда требуется закрыть доступ для всех, кроме администратора.

    Директива Order указывает порядок выполнения следующих директив (сначала Allow — разрешение, затем Deny — запрет). Deny from All запрещает доступ вообще, но так как в соответствии с порядком выполнения сначала разрешен доступ с адреса 192.168.1.1, запрет будет действовать для всех, кроме указанного адреса. Вместо IP-адресов можно указывать подсети (например, формат 192.168 означает подсеть 192.168.x.x) или доменные имена.

    Аутентификация

    Использование .htaccess позволяет выделить определенную часть сайта и защитить ее паролем. Пароли .htaccess хранятся в файле .htpasswd. Создайте файл, внесите в него имена и пароли всех пользователей, которым вы хотите предоставить доступ к защищенной части сайта, и сохраните его. Файл не должен находиться в веб-директории (по соображениям безопасности). Введите в этот файл любое необходимое количество записей в формате пользователь:пароль. Для каждого пользователя нужно создать отдельную строку. Пароль должен быть указан в закодированном виде. Для кодирования паролей можно воспользоваться специальным сайтом или программой htpasswd, которая входит в комплект установки Apache. Для создания файла и добавления пользователей с помощью утилиты httpasswd используйте команду

    Эта команда создаст пользователя admin и запросит ввести пароль для него. После ввода пароля запись в файл .htpasswd будет добавлена.

    После этого нужно разместить файл .htaccess в директории, к которой требуется защитить доступ, и ввести в него следующий код:

    AuthUserFile /usr/local/username/safedirectory/.htpasswd
    AuthGroupFile /dev/null
    AuthName «Пожалуйста, введите пароль»
    AuthType Basic
    Require valid-user

    Рассмотрим значение этих параметров:
    AuthUserFile: путь к файлу .htpasswd на сервере
    AuthGroupFile: эта строка используется для обозначения месторасположения файла .htgroup. Так как мы его не создавали, можем указать здесь /dev/null.
    AuthName: Текст, отображаемый в предложении ввести пароль.
    AuthType: Тип аутентификации, используемый для проверки пароля. При проверке паролей через HTTP нужно оставить значение Basic.
    Require valid-user: Ключевая фраза, которая указывает файлу .htaccess наличие нескольких пользователей, которым требуется обеспечить возможность входа в защищенную паролем часть сайта. Другой возможный вариант – ключевая фраза «require user username», обозначающая конкретного пользователя с разрешенным доступом.

    Сообщения об ошибках

    Файл .htaccess позволяет вам создавать для своего сайта собственные страницы, сообщающие об ошибках. Вот некоторые из наиболее распространенных ошибок:

    400 Ошибка в запросе
    401 Требуется авторизация
    403 Доступ запрещен
    404 Файл не найден
    500 Внутренняя ошибка сервера

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

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

    В рассматриваемом примере сервер будет искать страницу 404 в корневой директории сайта. Если она находится в какой-либо поддиректории, нужно указать путь, например:

    Описание типов MIME

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

    В данном примере для файлов с расширением .m4a задано представление в виде аудиозаписей. Для поддержки других типов MIME укажите соответствующий тип и расширение файла.

    Серверные включения

    Серверные включения (Server Side Includes, SSI) позволяют добиться значительного повышения скорости открытия сайта. Они представляют собой директивы для динамической генерации данных на странице сервером перед ее отправкой клиенту. Один из наиболее распространенных вариантов использования SSI – обновление большого количества страниц с передачей определенных данных вместо обновления каждой страницы по отдельности (например, если вам нужно заменить цитату в нижней части страницы).

    Для использования SSI введите в файл .htaccess следующий код:

    Первая строка задает интерпретацию файлов с расширением .shtml как html-кода, а вторая – обработку таких файлов с любыми командами SSI на сервере.

    Однако, если у вас много страниц .html, и вы не хотите менять расширение, для их обработки команд SSI в этих файлах можно воспользоваться XBitHack. Следующая строка в файле .htaccess заставляет сервер проверять все html-файлы с соответствующими разрешениями на наличие SSI:

    Для того, чтобы установить необходимые для XBitHack разрешения, воспользуйтесь командой:

    Редирект

    Эти директивы используются с завидной регулярностью. Они позволяют перенаправить посетителя со старого URL на новую страницу. Это возможно благодаря 301-редиректу. Достаточно в код файла вписать:

    В целом директива будет отображена в таком виде:

    URL_LOCAL – это старый адрес, с которого осуществляется перенос пользователя.

    URL_REDIRECT – новый URL, куда переносится страница.

    В поле [status] могут быть следующие значения:

    301 – страница перенесена навсегда.
    302 – страница перенесена на время.
    303 – смотрите другую страницу.
    410 – страница удалена.

    Модуль Mod_Rewrite

    Одна из наиболее полезных функций файла .htaccess – его использование с модулем mod_rewrite, который применяется для перезаписи URL, отображаемых в браузере пользователя. Это может использоваться для их представления в более удобочитаемом формате и других задач, например, редирект с http на https можно настроить следующим образом.

    Первая строка активирует модуль Mod_Rewrite, а две последующие при попытке соединения по отличному от 443 порту переписывают URL, чтобы он начинался не с HTTP, а c HTTPS, перенаправляя посетителя на защищенное соединение.

    Управление кэшированием данных

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

    отключает кэширование для HTML, для изображений JPEG устанавливает срок в 1 день с момента обращения, а для GIF — 3 месяца с момента модификации файла.

    Заключение

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

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    Цукерберг рекомендует:  Яп c# - c# получения результата выполнения скрипта на вебстраничке
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих