Htaccess изменить имя файла

Обновлено: 04.07.2024

Содержание

Работа с .htaccess

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

Mod_rewrite — модуль, используемый веб-серверами для преобразования URL'ов.

Редирект .htaccess

Простой редирект

Ставится в файле .htaccess . / и означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний / ). Если вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени)

Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php :

Редирект при запросе определённых файлов
Если запрашиваются файлы, расширение которых не указано в файле .htaccess (gif и jpg), то следует перенаправление:

Использование mod_rewrite

Редирект с регулярным выражением

Прописывается в файле .htaccess.

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

RedirectMatch Permanent — это эквивалент «RedirectMatch 301», строка с *(Wildcard) должна быть последней в этом списке.

Создание удобно читаемых URL

Редирект на PHP

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

Редирект всей папки кроме одного файла
В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php , КРОМЕ файла /superdiscount/my-ebook.html который должен редиректится на /hot-to-make-million.html

Редирект динамического URL на новый файл

Данный вариант пригодится, если вы хотите редиректить динамический URL с параметрами на новый статический файл.

Массовый редирект новых файлов

Теперь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS.

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

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

И в-третьих, при внесении такого количества информации высока вероятность, что вы где-то ошибетесь.

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

Предположим, вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами

После этого, добавляем следующую строчку в .htaccess:

затем создаем PHP-файл redirectold.php , который будет поддерживать 301 редирект:

Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php , который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.

Редиректы в зависимости от времени

Когда нужно применять уловки, типа содержания зависящего от времени, масса вебмастеров все ещё используют CGI-скрипты, которые производят редиректы на специальные страницы.

Как это может быть сделано через mod_rewrite? Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения <STRING, >STRING и =STRING мы можем производить редиректы зависящие от времени:

Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html .

Меняем расширение .html на .php

Иногда бывает так, что у вас статичный веб-сайт, а вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл.

Этот прием можно использовать и для других расширений файлов:

Запрещение доступа в конкретную директорию

Запрещаем доступ для всех ко всем файлам в директории deny from all
к конкретному файлу:

по ip пользователя:

Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

И наоборот, если хотите запретить отдельным ip пользователей доступ к вашему сайту, то пропишете следующие строчки:

Директива Options -Indexes — запрет на отображение содержимого каталога при отсутствии индексного файла.

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

Запрет доступа к файлам с несколькими типа расширений

Запрещен доступ к файлам с расширением .inc, .conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(

) в опциях директивы. Синтаксис следующий: [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее:

RewriteRule ^.htaccess$ - [F]

Конструкция ^.htaccess$ в этом регулярном выражении означает:

^ - якорь начала строки
$ - якорь конца строки
. - в регулярных выражениях точка . обозначает мета-символ и должна быть защищена обратным слэшем (backslash), если вы все-таки хотите использовать именно фактическую точку.

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

[F] - специальный 'запрещающий' флажок (forbidden).
[NC] - не учитывать регистр букв.
[OR] - означает 'или следующее условие'.

Определение кодировки

Определение кодировки, в которой сервер «отдает» файлы

Определение кодировки на загружаемые файлы

Пароль на директорию

Инструкция как закрыть папку паролем находится - НА ЭТОЙ СТРАНИЦЕ

Свои страницы ошибок

Инструкция на создание своих страниц ошибок находится - НА ЭТОЙ СТРАНИЦЕ

IE игнорирует страницы размером меньше 512 байт.

Индексация директорий и поддиректорий

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

Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html , то будет произведен поиск файла index.php и т.д.

DirectoryIndex index.html index.php index.shtml

Защита изображений

Часто веб-мастера нагло копируют контент с вашего сайта вместе с рисунками, причем рисунки подгружаются с вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем.

Защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения достаточно просто:

hotlinker.jpg - изображение, которое будет отображаться, вместо истинных изображений. Рекомендуем в этом изображении отобразить ваш логотип и ссылку на ваш сайт.

Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:

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

Обращения к robots.txt

Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацию об обращении к файлу robots.txt . Для того, чтобы оганизовать это, в '.htaccess' должны быть следующие записи:

Теперь при запросе файла robots.txt наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php .
Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. REQUEST_URI определяет имя запрашиваемого файла. В данном примере это robots.txt . Скрипт прочтет содержание robots.txt и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.

PHPSESSID

Для отключения добавления PHPSESSID к URL вставьте в начало index.php:

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

Директивы кеширования

Кэширование для всех типов файлов по времени доступа

Кэширование для всех типов файлов по времени изменения

Кэширование для определённых типов файлов

Запрет кеширования с помощью сервера Apache

Впишите в .htaccess следующее:

Необходимые заголовки будут передаваться автоматически и специально писать их в PHP уже не нужно — кэш уже выключен!

Кеширование с помощью файла .htaccess

Кеширование javascript файлов с помощью файла .htaccess

Будьте осторожны при кешировании, т.к. при изменении файла пользователь может получить новый вариант только через 3 дня!

Поиск страниц больше чем в одном каталоге

Иногда необходимо позволить веб-серверу искать страницы больше, чем в одном каталоге.

RewriteEngine on

Поддомены для пользователей

Повреждение бинарного файла

Если при передаче файлов через формы (при указанном enctype=«multipart/form-data» ) бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву:

Ошибка SWF файлов

Ошибки при обращении к страницам, содержащим ключевые слова, типа $_REQUEST .

Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.

Forbidden 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.

Запрос небезопасен и был отвергнут.

Добавьте в .htaccess следующее:

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

Склейка страницы (301)

Со страниц без слэша будет установлен редирект на «слэшевые».

Принудительная постановка замыкающего слеша

Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта:

Загрузка файлов вместо открытия

Многие видели, как при попытке скачать архив с расширением .rar браузер открывает его в виде простого текста из мешанины символов. Это значит, что на сервере сайта не настроено принудительное сохранение типов файлов, которые не должны открываться в браузере:

AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4

Сжатие страниц

Междоменные шрифты для FF

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

PHP в JavaScript

При разработке кода JavaScript иногда требуется использовать PHP в файлах .js, например, для получения данных из базы данных:

Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов

Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его туда:

Блокируем User Agents

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

Переадресация по языку

Защита картинок от скачивания по ссылкам на других сайтах

Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера:

Только по ссылкам на чужих сайтах:

Блокировка пользователей с определенным рефером

Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить:

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

В этой статье разбираемся, в каких случаях он нужен и как его настроить.

Если вы не хотите тратить время на самостоятельную настройку редиректа — оставьте заявку, и специалисты RU-CENTER сделают это за вас.

Что такое редирект и когда он нужен

В каких случаях нужен редирект

Это не все возможные поводы для редиректа. Они возникают в зависимости от того, какие проблемы нужно решить перенаправлением.

Какие бывают редиректы

301 — постоянный редирект

Он означает, что ресурс навсегда перемещён на новый адрес. Сайт-донор пропадает из поиска, авторитет и показатели посещаемости передаются сайту-акцептору, который и будет индексироваться.

302 — временный редирект со статусом «Найдено»

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

303 и 307 — аналоги 302 редиректа

303 редирект обозначает «смотрите другой ресурс», его применяют, когда вы не перенесли контент на другой адрес, но у вас есть подходящий под перенаправление другой сайт или страница. Для этого редиректа браузер использует метод GET.

Статус 307 редиректа — временное перенаправление. То есть запрашиваемая страница в данный момент находится по другому адресу. В отличие от 302 изначальная версия ресурса сохранит свои позиции.

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

Как настроить редирект

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

Если нужно сделать перенаправление со страницы, подойдёт более простой вариант переноса — через админку сайта.

В этой статье рассмотрим эти способы на примере самых распространённых причин для редиректа.

Перенос сайта с одного домена на другой

Этот тип перенаправления можно сделать с помощью FTP-клиента. Этот вариант подойдёт тем, кто умеет работать с кодом или готов этому научиться.

Если язык программирования не для вас, перенести домен можно без знаний кода. У RU-CENTER есть специальный сервис «Перенаправление домена».

Перенос с помощью FTP-клиента

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

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

Мы не рекомендуем использовать для редактирования .htaccess редакторы, встроенные в ОС Windows, в частности, «Блокнот». Если в файле содержатся кириллические символы и вы будете сохранять файл в кодировке UTF-8, такие редакторы могут автоматически добавлять в начало файла byte-order-marker (BOM), который может некорректно интерпретироваться веб-сервером. Для редактирования .htaccess лучше использовать специализированные редакторы, например, Notepad++.

Дальше находим в файле .htaccess элемент кода:

RewriteEngine On

RewriteBase /

Если такой записи нет, вставляем её сами в конец файла. Сразу после неё вставляем код с нужным условием:

Важно: В имени домена дефисы и точки необходимо экранировать, добавляя перед ними символ «\». Если речь идёт о домене, например, с кириллическими символами, то его нужно указывать в виде Punycode (xn--…), также включая символ «\».

Как только вы сохраните файл в редакторе, FTP-клиент напомнит вам загрузить обновлённый .htaccess обратно. Просто нажмите на кнопку «Да», и клиент загрузит файл автоматически.

Напоминание загрузить обновлённый .htaccess в FTP-клиенте FileZilla

Перенос с помощью сервиса «Перенаправление домена»

Если настройка через FTP-клиента кажется вам сложной, можно выбрать вариант проще — приобрести доступ к сервису «Перенаправление домена» у RU-CENTER. Чтобы в нём работать, не нужно разбираться в коде. Сможете сделать редирект для домена, всех его поддоменов, а также настроить до десяти индивидуальных правил перенаправления для конкретных поддоменов.

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

Находим в файле .htaccess элемент кода:

RewriteEngine On

RewriteBase /

Если такой записи нет, вставляем её сами в конец файла. Сразу после неё вставляем код с нужным условием:

RewriteCond % !on

Перенос сайта с домена без префикса www на домен с www

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

Находим в файле .htaccess элемент кода:

RewriteEngine On

RewriteBase /

Если такой записи нет, вставляем её сами в конец файла. Сразу после неё вставляем код с нужным условием:

Перенос одной страницы на другую временно или постоянно

Объясняем, как это сделать, на примере сайта на WordPress.

Заходим в админку сайта, находим в списке возможностей вкладку «Инструменты», в ней выбираем «Перенаправления» и кликаем на кнопку «Добавить новое».

Путь получается следующий: админка сайта → Инструменты → Перенаправления → Добавить новое.

Чтобы добавить перенаправление, заполните поля:

Исходный URL — в нём напишите относительный путь, то есть адрес страницы без указания домена, только то, что прописано после слеша.

Параметры запроса — выберите из выпадающего списка нужное условие. В нашем случае — «Точное совпадение всех параметров в любом порядке».

Целевой URL-адрес — полный адрес, куда вы планируете перенести контент.

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

где /baza-znanij/slovar — страница-донор,


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

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

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

Итак, полезные примеры использования. htaccess:

1. Управление доступом к файлам и каталогам

Защита паролем — это одно, но иногда может понадобиться полностью блокировать доступ пользователей к определенному файлу или папке. Обычно это относится к системным папкам, таким, например, как includes, доступ к которым должны иметь приложения, но не пользователи.

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


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


где xxx. xxx. xxx. xxx — это ваш IP. Для задания разрешенных диапазонов IP-адресов вы можете заменить три последние цифры. Например, написав вместо них «0/12», вы зададите диапазон IP-адресов одной сети, что избавит вас от необходимости вводить в список все разрешенные IP-адреса отдельно.

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


Если вы хотите указать определенные IP-адреса которым надо запретить доступ, перечислите их при помощи allow from.

Если же вы хотите заблокировать доступ к файлам определенного типа, используйте этот код:

2. Запрет на просмотр директорий

Для предотвращения просмотра директорий сайта добавьте в .htaccess следующий код:


Если же по какой-то причине вы хотите разрешить просмотр всех директорий, используйте код:

3. Ускорение времени загрузки за счет сжатия файлов

Сжимать можно файлы любого типа. Например, для сжатия HTML-файлов добавьте код:


Для сжатия текстовых файлов используйте:


Вы также можете сжать JavaScript или включить сжатие для других различных типов файлов командами:


Кроме того, вы можете сжать все ваши JavaScript, HTML и CSS файлы при помощи GZIP. Для этого используйте следующий код:

4. Защита сайта от вставки изображений с других ресурсов

Если вы хотите запретить добавление ссылок на изображения со сторонних ресурсов, добавьте в файл .htaccess код:

5. Блокировка посетителей, перешедших с определенного домена

Если вы не хотите видеть на своем сайте пользователей с конкретного домена, то вы можете запретить им доступ. Например, пользователей с нежелательных ресурсов (сайты для взрослых, хакерские сайты и т. д.) вы можете перенаправлять на страницу 403 Forbidden. Для этого необходимо включить mod_rewrite, хотя, как правило, он включен по умолчанию. Добавьте в .htaccess код:

6. Блокирование запросов от определенных браузеров

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


Замените badbot1, badbot1 и т. д. именами ботов из вашего журнала. Это закроет посторонним программам доступ к вашему сайту.

7. Кэширование файлов

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


Вы можете добавить больше типов файлов (или удалить некоторые из них) в перечисленныq в данном примере список файлов. Вы также можете указать время сохранения файлов в кэше (в секундах) при помощи переменной max-age.

8. Отключение кэширования для разных типов файлов

Если вы не хотите кэшировать определенные типы файлов, можно не включать их в список. Однако иногда файлы могут сохраняться в кэше даже не будучи явно перечисленными в списке, в этом случае вы можете отключить кэширование для них индивидуально. Чаще всего отключать кэширование требуется для динамических файлов, таких как сценарии. Пример требуемого для этого кода:

Просто укажите типы файлов, для которых нужно отключить кэширование.

9. Обход диалога загрузки

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

10. Переименование файла .htaccess

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


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

11. Замена стартовой страницы сайта

Если вы хотите установить главную страницу, отличную от стандартной (index.html, index.php, index.htm и т. д.), добавьте следующий код в файл .htaccess:


Замените mypage.html на URL страницы, которую вы хотите использовать в качестве главной.

13. Ограничение максимального размера загружаемых файлов в PHP, максимального размера передаваемых данных, максимального времени выполнения скриптов и т.п.

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


Вы можете установить любое значение, в примере размер файла ограничен 15M (MБ). Помимо этого вы можете ограничить максимальный размер передаваемых при загрузке в PHP данных:


Вы можете заменить 10М на любое требуемое вам значение. Если вам не требуется постоянное выполнение скриптов, вы можете ограничить время их выполнения с помощью строки:


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


Установите вместо 180 любое требуемое вам время (в секундах).

14. Скрытие типов файлов

Иногда нужно, чтобы пользователи не знали, какие типы файлов находятся на вашем сайте. Один из способов скрыть эту информацию — сделать так, чтобы все ваши файлы отображались как HTML или PHP файлы:


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

UPD (спасибо akuma) расширение РНР для скрытия формата файлов приведено как пример и использование этого трюка в реальном проекте может оказаться небезопасным

Профессионалы знают, что такое htaccess.
Тем кто собираются уйти с народ.ру на php-хостинг только предстоит узнать, что это такое.
Те кто только что установил свои первые jooml'у или wordpress срочно должны узнать о нашем герое — htaccess

Зачем нам .htaccess ?

Представьте, что вы купили себе хостинг и кажется, почти обрели счастье. Но однажды (а может быть дважды, а может и трижды) ваш сайт перестает отвечать на запросы. Начинает медленно грузиться и вообще вести себя странно. А виртуальный хостинг это такая хитрая штука, что помимо вашего сайта на этом сервере находится ещё два десятка других сайтов. Все они разные по мощности, организованности и трафику. И когда ваш сосед по случайности, а может и умыслу запускает на своем хостинге сложные или избыточные в алгоритмах скрипты, это отзывается и на вас.

Или другой пример. Скажем ваш ресурс начинает набирать популярность, но переезжать на выделенный сервер ещё рано, а мощностей VPS уже не хватает. Вас очень может выручить htaccess.

А ещё htaccess может решить некоторые вопросы с безопасностью вашего сайта.

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

1. Первой строкой задаем основные опции:


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

Опция -ExecCGI запрещает запуск CGI скриптов. Лучше разрешить только для конкретных папок. Повысит безопасность.
Опция -Indexes запрещает показывать содержимое каталогов, если в них нет индексного файла. На виртуальном хостинге обычно включена по умолчанию. Изменив минус на плюс +Indexes можете наоборот разрешить просмотр содержимого каталога (или каталогов).
Опция -Includes запрещает SSI. Если не знаете, что это — запрещайте (Можно поЯндексировать(! ) по запросу Server Side Include если хотите узнать об этом побольше). Можно использовать опцию IncludesNOEXEC, которая разрешит использовать SSI без запуска скриптов.
Опция +FollowSymLinks позволяет использовать символические ссылки на файлы или каталоги, не находящиеся в пределах корня вашего сайта.

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

Необязательно полностью перечислять все опции в дочерних .htaccess если они не изменяются. Достаточно указать (переназначить) только те опции и директивы, которые изменяются. Остальные опции также унаследуются от родителя.

Скажем, у вас есть вот такой путь /site/folder_one/subfolder/other/
В файле /site/.htaccess вы указываете:

В файле /site/folder_one/.htaccess указываете:

В файле /site/folder_one/subfolder/.htaccess указываете:

Получиться вот что:
В папке site будут показываться файлы любого содержания, если только к ним напрямую обратиться. Или индексный файл, если не явного обращения к одному из файлов. В случае отсутствия индексного файла получена 403 ошибка.
К папке folder_one доступ закрыт. Даже если знать имя файла и набрать его в адресной строке в ответ сервер вернет ошибку 403.
Папка subfolder разрешена для обращений по прямому адресу или же в случае отсутствия индексного файла покажет содержимое каталога. Эти же права распространяться и на папку other.
Если убрать файл ,htaccess из папки folder_one, то она унаследует права от родительской site.

2. Немного SEO (куда же без него)


Обязательно не забыть про условие <IfModule mod_rewrite.c>. Не окажись у хостера данного модуля и ваш сайт станет выдавать 500-ую ошибку. Данный конкретный модуль входить в сборку Апача по-умолчанию. Ну а вдруг… Хостеры и их админы бывают всякие.

В данной части пользы больше для SEO. Модуль rewrite как следует из его названия занимается перенаправлениями (привет Кэпу) .

3. Кто в папке главный?

Если у вас папке есть файлы index.html и index.php (не знаю, зачем и кому такое было нужно, но не раз видел такое) то как указать серверу кто их них более индексный?


А ещё можно там указать скажем roosso.php и тогда набрав в строке запроса адрес сайт.бла/бла/бла/ вы увидете не index, а roosso

4. Ещё настройки…


Первая строчка устанавливает часовой пояс. Например в Apache 2.22.22 был баг связанный с этой опцией. Функции времени в php не работали, пока не установишь часовой пояс.

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

Угадайте, что делает третья строка?

5. Когда нет доступа к php.ini

С помощью .htaccess мы также можем управлять рядом настроек PHP. На виртуальном хостинге, как правило, нет возможности изменять настройки php.ini. Чаще всего этого и не требуется. Но все же есть ряд опций контроль над которыми может нам быть полезен. Например, увеличить лимит на загрузку файлов, или лимит передачи данным методом POST.


Первая строчка разрешить загружать файлы размером до 32 Мегабайт. По умолчанию в php обычно это значение 8 или 16 мегабайт.
Второй строкой разрешаем постинг объемом до 10 мегабайт. По умолчанию это значение обычно 2 Мегабайта.
Третья строка устанавливает кодировку по используемую вашими скриптами. По своей сути она дублирует строку: «AddDefaultCharset UTF-8». Но я чаще прибегаю к установке кодировки именно через php.
Четвертой строкой изменяем лимит времени выделенный на выполнение скрипта. По умолчанию он обычно равен 30 секундам. Но иногда для выполнения каких нибудь сложных обработок требуется больше времени.

6. Типы файлов. Ловкость рук и ни какого мошенничества.

В моей практике случалось пару раз, что после какого либо обновления провайдером софта, слетали типы файлов. Хотя такое редко. За 10 лет, всего два случая. Но иногда мне нужно было заставить html работать как php. А иногда требуется научить апач различать типы файлов, которые ему неизвестно. (Как оказалось Апачу вообще мало что известно из редких типов файлов.) В такой ситуации нас спасет следующий код:

Первая строчка позволит нашим php файлам иметь расширение html, но выполняться как php. Полезно бывает во многих случаях. А в старые добрые когда поисковики индексировали ЧПУ лучше, такая строчка всегда приходила на выручку.
Мы можем переназначить, добавить или подменить любые типы файлов под удобные нам разрешения.

Кстати, вы можете легко написать к примеру вот такую строку:


Потом переименовать все ваши файлы, изменив расширение на .i (не забыв конечно про ссылки) и адреса файлов у вас на сайте будут не сайт.мой/index.php?uri а сайт.мой/index.i?uri

Например я пишу

Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.

Третья, четвертая и пятая строки, на всякий случай уточняют мим-тип файлов с разрешением css, js, xml. Не путайте с присвоением заголовка в ответе сервера на запрос, как это сделано в первых двух строках.

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

Седьмую строку я закомментировал. Это строчка в принудительно-добровольном порядке, будет все файлы с вашего сервера запустить как php. Её лучше использовать лишь в отдельных папках, при необходимости.

7. Знают взрослые и дети, что архивы меньше весят…

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

У Апача есть два модуля сжатия. Оба не являются модулями по умолчанию, поэтому необязательно могут присутствовать у вашего провайдера. Но как показала практика у 99% провайдеров один из них стоит. Наиболее распространен mod_deflate. Чтобы его с помощью сжимать весь контент на вашем сайте добавьте в .htaccess следующие строки:


Как видите мы должны перечислить mime type файлов, которые следует подвергать сжатию. Сюда можно добавить и видео и картинки, но толку это даст мало. Потому что jpeg или gif уже сами по себе являются сжатыми форматами. Также как avi или flv. Вы фактически нечего не выиграете указав их.

Второй менее популярный модуль это mod_gzip, Чтобы включить сжатие с его помощью добавьте вот такие строчки:


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

8. А ещё быстрее можно?

Можно. Если применить кеширование страниц. У кеширования есть и плюсы и минусы, поэтому подходить к этому вопросу надо подготовившись. Для динамически обновляющегося сайт каждый 2-3 минуты, например популярного форума, нужно учесть, что пользователь должен видеть актуальную информацию. Но у любого сайт есть контент, который более или менее статичен. Например те же картинки, или файлы стилей. Поэтому нам потребуется по разному использовать кеширование различного содержимого на сайте. В html разметки мы всегда можем использовать meta теги. И через php мы может устанавливать заголовки ответа сервера. Остается вопрос, как быть с css, js, image и т.д. и т.п.

Помочь нам в этом могут два модуля: mod_headers и mod_expires которые могут установить заголовки в ответ сервера и подсказать вашему браузеру, что и как нужно кешировать. Один из модулей обычно стоит у провайдера, но как и в случае с любым модулем, который не входит в стандартную сборку Апача, 100% гарантии никто вам не даст. Поэтому снова во избежание 500й ошибки указывает условия для каждого из модулей.


Вот такой синтаксис у mod_headers. Думаю по комментариям ясно что к чему.
В данной секции я отключил кеширование php файлов. Хотя по моему мнению небольшой временной интервал кеширования им не повредит. 5-30 секунд, это интервал времени, за который мало что меняется. А многие пользователи любят пользоваться клавишей back (вернуться назад). Чтобы не загружать им страницу второй раз, а подхватить её из кеша, разумный интервал кеширования все же уместен.

Во второй секции где идут условия для mod_expires я именно так и делаю — для php ставлю небольшой интервал кеширования.

9. Правила вежливого тона…


Для 400-х ошибок можно использовать и динамические страницы на php. А вот для 500 лучше сделать на html и js. Это часть ошибок обычно связана с ошибками сервера (в большинстве случаев) и php или cgi как правило в такой ситуации не работают.

Если вам лень делать столько страниц устанавливайте страницей ошибок главную страницу своего сайта или карту сайта.

Все это вы делаете исключительно для людей. Поисковым роботам плевать на то есть у вас страницы ошибок или нет. Они видят ответ сервера с кодом ошибки и блокируют вашу страницу в поиск. Так что имейте ввиду, это не панацея. Это лишь вежливость к вашей аудитории и имидж вашего сайта.

10. Подведем итог

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

В результате всех манипуляций у нас должен был получить файл следующего содержания:

Я старался не спешить в написании статьи и на это ушли почти сутки. Но все же где то я мог допустить ошибки в орфографии или пунктуации. Прошу не казнить, а миловать. А лучше писать в личку, чтобы я поправил ошибки.

И напоследок для любителей экспериментов несколько строк .htaccess. Сужу по своему опыту — на практике знания усваиваются лучше чем в теории.

Читайте также: