Разрешить использование htaccess. Волшебный файл.htaccess. Директивы модуля Mod_rewrite

"1С-Битрикс: Управление сайтом" работает с любым уровнем прав, который вы указали ему при настройке (установке).

Для того чтобы продукт корректно работал с папками и файлами с заданным CHMOD (писал и создавал), вам нужно установить в файле / bitrix/ php_ interface/ dbconn. php следующие константы:

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

Самостоятельно установить нужный уровень прав можно, используя команду CHMOD в консольном режиме.

Следующий вызов устанавливает уровень прав доступа и для файлов, и для папок:

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

find. - type d - exec chmod 0755 {} ";"

Если надо установить разные права на папки и файлы, то выполните следующий скрипт:

define("BX_FILE_PERMISSIONS", 0644);

define("BX_DIR_PERMISSIONS", 0755);

function chmod_R($path) {

$handle = opendir($path);

while (false!== ($file = readdir($handle))) {

if (($file!== ".") && ($file!== "..")) {

if (is_file($path."/".$file)) {

chmod($path. "/" . $file, BX_FILE_PERMISSIONS);

chmod($path. "/" . $file, BX_DIR_PERMISSIONS);

chmod_R($path. "/" . $file);

closedir($handle);


$path=dirname(__FILE__);

Для установки рекурсивно прав раздельно на файлы и папки можно использовать некоторые программы FTP клиентов. Например, FlashFXP версии 3.хх и выше.

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

Обратите внимание на установки соответствующих флагов:

· Separately set File and Folder attributes (раздельно устанавливать права на файлы и папки);

· Apply changes to all subfolders and files (рекурсивная установка прав на подпапки и файлы).

Для каждой из установок настраивается свой уровень (Рис. 10.3 и Рис. 10.4):

https://pandia.ru/text/80/333/images/image084.gif" width="353" height="310 src=">

Рис. 10.4 Установка прав на папки

Примечание: модуль Управление структурой позволяет просмотреть права на доступ к файлам и папкам, установленные на уровне системы (Рис. 10.5):

Владелец" href="/text/category/vladeletc/" rel="bookmark">владельце и группе пользователей (для *nix).

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

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

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

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

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

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

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

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

В поставляемом продукте файл .htaccess по умолчанию содержит следующие директивы:

Options - Indexes

ErrorDocument 404 /404.php

#php_flag allow_call_time_pass_reference 1

#php_flag session. use_trans_sid off

#php_value display_errors 1

php_value mbstring. func_overload 2

php_value mbstring. internal_encoding UTF-8

Options +FollowSymLinks

RewriteEngine On

RewriteRule.* -


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-l

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite. php$

RewriteRule ^(.*)$ /bitrix/urlrewrite. php [L]

DirectoryIndex index. php index. html

ExpiresActive on

ExpiresByType image/jpeg "access plus 3 day"

ExpiresByType image/gif "access plus 3 day"

Примечание: для активизации закомментированных PHP директив необходимо снять знак комментария (# ) в начале строки. Если на вашем сервере Apache не установлено разрешение на использование PHP -флагов, выполнение данных директив приведет к возникновению внутренней ошибки (500). В случае возникновения ошибки необходимо снова закомментировать директивы, поместив в начало каждой знак # .

Для остальных PHP директив, не обозначенных знаком комментария (# ), добавлена проверка на наличие необходимых модулей Apache в системе. Выполнение данных директив не приведет к возникновению ошибки в системе.

· PHP директива php_flag session. use_trans_sid off производит отключение подстановки идентификатора сессии в ссылке на сайте.

· значение PHP флага php_value display_errors , равное 1 , указывает на то, что включено разрешение на вывод сообщений о возникновении ошибок, директива php_value error_reporting определяет уровень ошибок, при возникновении которых будет выводиться сообщение. С помощью указанных директив можно настроить режим вывода интерпретатором PHP сообщений об ошибках.

· директивы php_value mbstring. func_overload 2 и php_value mbstring. internal_encoding UTF-8 управляют настройкой библиотеки mbstring .

· блок директив IfModule mod_rewrite. c - это настройка правил для mod_rewrite .

· директива ExpiresActive on включает кеширование изображений, позволяющее ускорить их загрузку при повторном обращении к страницам сайта. Директивы ExpiresByType image/jpeg "access plus 3 day" и ExpiresByType image/gif "access plus 3 day" , в свою очередь, определяю формат изображений и срок, на который будет произведено кеширование. По умолчанию, выполняется кеширование изображений формата *.jpeg и *.gif сроком на 3 дня.

Примечание: после внесения изменений, файл .htaccess должен быть сохранен в UNIX-формате (для оболочки FAR опция "Сохранить как UNIX-текст").

Ошибки сервера

500 - Internal Server Error

Ошибка сервера может быть вызвана различными причинами, поэтому ее диагностика достаточно сложна и трудоемка. Это не является ошибкой "1С-Битрикс: Управление сайтом". Ошибка сервера часто возникает на разделяемом хостинге из-за ограничения ресурсов системы.

При возникновении ошибки сервера в первую очередь необходимо просмотреть файл сервера error. log . В этом файле может содержаться строка с кодом ошибки.

· Типичным примером причины возникновения ошибки сервера может быть превышение разрешенных прав на хостинге.

Например, происходит попытка выполнить файл с атрибутами, не разрешёнными для запуска на сервере (например, файл имеет атрибуты 0755 , а допускается 0711 ).

· Также возможной причиной может быть наличие лимита по времени на исполнение PHP -скриптов. Или у системы нет прав на запись или чтение файла и др.

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

Примечание: если PHP работает как CGI , то 500 ошибка на сервере может быть вызвана фатальной ошибкой PHP . В этом случае рекомендуется выполнить проверку программного кода и диагностировать ошибку.

Apache - самый распространённый HTTP-сервер . Распространяется бесплатно, включая исходные тексты. Поддерживаются сценарии на CGI (включая FastCGI ), PHP , Perl , Java . Аутентификация - базовая , message-digest , TLS (SSL) . С апреля 1996 это самый популярный HTTP-сервер в Интернете, в августе 2007 года он работал на 51% всех веб-серверов.

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

.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess присутствует в любом каталоге пользователя.

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

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










Список всех доступных директив можно посмотреть .

HTTP_ACCEPT

Описываются предпочтения клиента относительно типа документа.

REMOTE_ADDR

IP-адрес посетителя.

REMOTE_HOST .

Адрес посетителя в нормальной форме - например, rt99.net.ru .

REMOTE_IDENT

Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru

REMOTE_USER

Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr

REQUEST_METHOD

Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации.

SCRIPT_FILENAME

Полный путь к веб-странице на сервере.

PATH_INFO

Содержит в себе все, что передавалось в скрипт.

QUERY_STRING

Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.

AUTH_TYPE

Используется для идентификации пользователя

DOCUMENT_ROOT

Cодержит путь к корневой директории сервера.

SERVER_ADMIN

Почтовый адрес владельца сервера, указанный при установке.

SERVER_NAME SERVER_ADDR

IP-адрес вашего сайта.

SERVER_PORT

Порт, на котором работает Apache.

SERVER_PROTOCOL

Версия HTTP протокола.

SERVER_SOFTWARE

Название сервера, например, Apache/1.3.2 (Unix)

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

Переменные, предназначеные для работы со временем в разных форматах.

API_VERSION

Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h .

THE_REQUEST

Полная строка HTTP -запроса, отправленная браузером серверу (т.е., «GET /index.html HTTP/1.1» ). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

REQUEST_URI

Ресурс, запрошенный в строке HTTP-запроса.

REQUEST_FILENAME

Полный путь в файловой системе сервера к файлу или скрипту, соответствующему этому запросу.

IS_SUBREQ

Условие - это шаблон условия, т.е. какое-либо регулярное выражение, применяемое к текущему экземпляру "Сравниваемая Строка", т.е. "Сравниваемая Строка" просматривается на поиск соответствия Условию.
Помните, что Условие это perl -совместимое регулярное выражение с некоторыми дополнениями:


Все эти проверки также могут быть предварены префиксом восклицательный знак ("!") для инвертирования их значения.

RewriteEngine включает или выключает работу механизма преобразования. Если она установлена в положение off , этот модуль совсем не работает. Заметьте, что по умолчанию настройки преобразований не наследуются. Это означает, что вы должны иметь RewriteEngine on директиву для каждого виртуального хоста, в котором вы хотите использовать этот модуль.
Синтаксис RewriteEngine выглядит следующим образом:

Используйте для комбинирования условий в правилах OR вместо AND . Типичный пример - перенаправление запросов на поддомены в отдельные каталоги.

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


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

"redirect|R [=code]"
(вызывает редирект)
Префикс в Подстановке вида http://thishost[:thisport]/ (создающий новый URL из какого-либо URI ) запускает внешний редирект (перенаправление). Если нет никакого кода, в подстановке ответ будет со HTTP статусом 302 (ВРЕМЕННО ПЕРЕМЕЩЕН). Для остановки процесса преобразования вам также нужно написать флаг "L" .

"forbidden|F [=code]"
(делает URL запрещенным)
Это делает текущий URL запрещённым, например, клиенту немедленно отправляется ответ с HTTP статусом 403 (ЗАПРЕЩЕНО). Используйте этот флаг в сочетании с соответствующими RewriteConds для блокирования URL по некоторым критериям.

"gone|G [=code]"
(делает URL «мёртвым»)
Этот флаг делает текущий URL «мертвым», т.е., немедленно отправляется HTTP ответ со статусом 410 (GONE ). Используйте этот флаг для маркировки «мертвыми» несуществующие более страницы.

"proxy|P [=code]"
(вызвает прокси)
Этот флаг помечает подстановочную часть как внутренний запрос прокси и немедленно (т.е. процесс преобразования здесь останавливается) пропускает его через прокси-модуль. Используйте этот флаг для того, чтобы добиться более мощной реализации директивы ProxyPass , интегрирующей некоторое содержимое на удаленных серверах в пространство имён локального сервера.

"last|L [=code]"
(последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований.

"next|N [=code]"
(следуюший раунд)
Перезапустить процесс преобразований (начав с первого правила). В этом случае URL снова сопоставляется неким условиям, но не оригинальный URL , а URL вышедший из последнего правила преобразования. Используйте этот флаг для перезапуска процесса преобразований, т.е. безусловному переходу на начало цикла.

"chain|C [=code]"
(связь со следующим правилом)
Этот флаг связывает текущее правило со следующим (которое, в свою очередь, может быть связано со следующим за ним, и т.д.). Это имеет следующий эффект: если есть соответствие правилу, процесс продолжается как обычно, т.е. флаг не производит никакого эффекта. Если правило не соответствует условию, все следующие, связанные правила, пропускаются.

"type|T=MIME-тип [=code]"
(принудительно установить MIME тип)
Принудительно установить MIME-тип целевого файла в MIME-тип . К примеру, это можно использовать для имитации mod_alias директивы ScriptAlias , которая принудительно устанавливает для всех файлов внутри отображаемого каталога MIME тип равный «application/x-httpd-cgi» .

"nosubreq|NS [=code]"
(используется только в случае не внутреннего подзапроса)
Этот флаг дает команду механизму преобразований пропустить директиву, если текущий подзапрос является внутренним подзапросом. К примеру, внутренние подзапросы в Apache происходят тогда, когда mod_include пытается получить информацию о возможных файлах по умолчанию для каталогов (index.xxx). При подзапросах это не всегда полезно и даже иногда вызывает проблему в работе набора директив преобразований. Используйте этот флаг для исключения некоторых правил.

"nocase|NC [=code]"
(не учитывать регистр)
Это делает Шаблон нечувствительным к регистру, т.е. нет различий между "A-Z" и "a-z", когда Шаблон применяется к текущему URL .

"qsappend|QSA [=code]"
(добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление, а не замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в строку запроса с помощью директив преобразований.

"noescape|NE [=code]"
(не экранировать URI при выводе)

Этот флаг не даёт mod_rewrite применять обычные правила экранирования URI к результату преобразования. Обычно, специальные символы (такие как "%", "$", ";", и так далее) будут экранированы их шестнадцатиричными подстановками ("%25", "%24", и "%3B", соответственно); этот флаг не дает это делать.

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

При наличии в файле .htaccess каких-либо директив модуля mod_rewrite не наследуется ничего, а состояние по умолчанию выставляется таким же, как в главном конфигурационном файле веб-сервера (по умолчанию "off"). Поэтому, если нужны правила преобразования для конкретного каталога, то нужно еще раз вставить директиву "RewriteEngine on " в .htaccess для конкретного каталога.

При наследовании правил из верхних каталогов и добавлении к ним новых свойственных только данному каталогу - необходимо выставить в начале следующее: "RewriteEngine on " и "RewriteOptions inherit " - последняя директива сообщает серверу о продолжении.

Примеры использования mod_rewrite можно посмотреть

Если у Вас установлена операционная система семейства Windows , Вы можете подключится к серверу по SSH (инструкцию по подключению можно найти ) и воспользоваться утилитой htpasswd .

Запустив htpasswd без параметров мы увидим:

beget@ginger ~ # htpasswd
Usage:
htpasswd [-cmdps] passwordfile username
htpasswd -b passwordfile username password
-c Create a new file.
beget@ginger ~ #

Здесь не будут рассматриваться все параметры этой команды, но вы можете сами прочитать подробности, запустив htpasswd в unix shell , или ознакомившись с соответствующей страницей документации по Apache.

Итак, изначально у нас еще нет файла с паролями и нам нужно его создать:

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

Указывая valid-user , Вы разрешаете доступ всем пользователям, перечисленным в файле паролей.

Приведем пример для доступа определенных пользователей из файла с паролями .htpasswd

AuthName "Protected area, need authorization " AuthType Basic AuthUserFile /home/t/test/.authfile require Alexey Kondr Fenix

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

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

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

Для тех, кто уже сталкивался ранее с данными настройками, то тем можно перейти сразу ко 2-му или 3-му разделу.

Как создать файл htaccess для сайта?

Для начала необходимо скачать текстовый редактор под названием Notepad++, на сайте notepad-plus-plus.org. Этот редактор с улучшенными способностями: подсвечивает код, поддерживает больше форматов файлов. Он вам понадобится и в будущем, когда вы освоитесь, то вам придется править код, и как раз этот редактор станет вашим маленьким и способным помощником.

После установки запустите его и нажмите в меню ФАЙЛ и выберите из выпадающего меню НОВЫЙ

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

Ну вот и все. Осталось теперь сохранить данный файл. Для этого выберите меню файл , затем Сохранить как и когда откроется окно, перейдите вниз окна и введите в поле Имя файла: .htaccess, а в поле Тип файла: выбрать строчку All types(*.*) и можете нажимать кнопку Сохранить .

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

КАК ОБЕЗОПАСИТЬ САЙТ ОТ ВЗЛОМА С ПОМОЩЬЮ ФАЙЛА htaccess?

Безопасность — это хорошее настроение и гарантия успешности.
Странно начал? … не зря я начал описание с этого слова. Многие и многие сайты страдают от взлома и хакерских атак, результатом которых потеря информации (), потеря работоспособности сайта (пусть даже временная) и уже молчу про стресс и переживания — всё это, в конечном итоге, скажется на вашем доходе от ресурса.

Запугал? дааа, но здесь не до шуток.

Файл htaccess — это дополнительный файл для настроек и конфигурации вашего ресурса. Как правило он находится в главном каталоге вашего ресурса.

Если такого файла у вас нет, то можете создать его по инструкции раздела 1().

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

Таких файлов может находиться на вашем сайте сколько угодно. Его права действуют как правило на тот каталог, в котором он находится, а также на все подпапки этого каталога.

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

Минимальные настройки файла htaccess?

После создания сайта у вас уже может быть такой файл и в нем может уже находится следующая информация. Как правило это может быть на сайтах с движком Вордпресс().

order allow,deny deny from all satisfy all

Защищаем файл wp-config.php

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

Allow from 00.00.00.00

Вместо 00.00.00.00 нужно указать свой статический адрес.

Защищаем директорию wp-content

Этот каталог содержит много нужной информации, которой тоже разбазариваться не стоит, а посему закрываем. Для этого нужно создать такой же файл.htaccess или скопировать из главной директории вашего сайта и вставить туда этот код(предварительно всё стерев из него). Далее полученный файл кладем в директорию wp-content вашего сайта.

В этом коде нужно учесть, что иногда у некоторых не открываются xml или css, то тогда нужно из кода удалить эти данные.

1 2 3 4 5 Order deny,allow Deny from all Allow from all

Order deny,allow Deny from all Allow from all

Защищаем от злостных сканеров и ботов

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

1 2 3 4 5 # BEGIN Bad Bot Blocker #SetEnvIfNoCase User-Agent "Abonti|aggregator|AhrefsBot|asterias|BDCbot|BLEXBot|BuiltBotTough|Bullseye|BunnySlippers|ca\-crawler|CCBot|Cegbfeieh|CheeseBot|CherryPicker|CopyRightCheck|cosmos|Crescent|discobot|DittoSpyder|DOC|DotBot|Download Ninja|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Fasterfox|FeedBooster|Foobot|Genieo|grub\-client|Harvest|hloader|httplib|HTTrack|humanlinks|ieautodiscovery|InfoNaviRobot|IstellaBot|Java/1\.|JennyBot|k2spider|Kenjin Spider|Keyword Density/0\.9|larbin|LexiBot|libWeb|libwww|LinkextractorPro|linko|LinkScan/8\.1a Unix|LinkWalker|LNSpiderguy|lwp\-trivial|magpie|Mata Hari|MaxPointCrawler|MegaIndex|Microsoft URL Control|MIIxpc|Mippin|Missigua Locator|Mister PiX|MJ12bot|moget|MSIECrawler|NetAnts|NICErsPRO|Niki\-Bot|NPBot|Nutch|Offline Explorer|Openfind|panscient\.com|PHP/5\.\{|ProPowerBot/2\.14|ProWebWalker|Python\-urllib|QueryN Metasearch|RepoMonkey|RMA|SemrushBot|SeznamBot|SISTRIX|sitecheck\.Internetseer\.com|SiteSnagger|SnapPreviewBot|Sogou|SpankBot|spanner|spbot|Spinn3r|suzuran|Szukacz/1\.4|Teleport|Telesoft|The Intraformant|TheNomad|TightTwatBot|Titan|toCrawl/UrlDispatcher|True_Robot|turingos|TurnitinBot|UbiCrawler|UnisterBot|URLy Warning|VCI|WBSearchBot|Web Downloader/6\.9|Web Image Collector|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|Website Quester|Webster Pro|WebStripper|WebZip|Wotbox|wsr\-agent|WWW\-Collector\-E|Xenu|yandex|Zao|Zeus|ZyBORG|coccoc|Incutio|lmspider|memoryBot|SemrushBot|serf|Unknown|uptime files" bad_bot #SetEnvIfNoCase Referer "Abonti|aggregator|AhrefsBot|asterias|BDCbot|BLEXBot|BuiltBotTough|Bullseye|BunnySlippers|ca\-crawler|CCBot|Cegbfeieh|CheeseBot|CherryPicker|CopyRightCheck|cosmos|Crescent|discobot|DittoSpyder|DOC|DotBot|Download Ninja|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Fasterfox|FeedBooster|Foobot|Genieo|grub\-client|Harvest|hloader|httplib|HTTrack|humanlinks|ieautodiscovery|InfoNaviRobot|IstellaBot|Java/1\.|JennyBot|k2spider|Kenjin Spider|Keyword Density/0\.9|larbin|LexiBot|libWeb|libwww|LinkextractorPro|linko|LinkScan/8\.1a Unix|LinkWalker|LNSpiderguy|lwp\-trivial|magpie|Mata Hari|MaxPointCrawler|MegaIndex|Microsoft URL Control|MIIxpc|Mippin|Missigua Locator|Mister PiX|MJ12bot|moget|MSIECrawler|NetAnts|NICErsPRO|Niki\-Bot|NPBot|Nutch|Offline Explorer|Openfind|panscient\.com|PHP/5\.\{|ProPowerBot/2\.14|ProWebWalker|Python\-urllib|QueryN Metasearch|RepoMonkey|RMA|SemrushBot|SeznamBot|SISTRIX|sitecheck\.Internetseer\.com|SiteSnagger|SnapPreviewBot|Sogou|SpankBot|spanner|spbot|Spinn3r|suzuran|Szukacz/1\.4|Teleport|Telesoft|The Intraformant|TheNomad|TightTwatBot|Titan|toCrawl/UrlDispatcher|True_Robot|turingos|TurnitinBot|UbiCrawler|UnisterBot|URLy Warning|VCI|WBSearchBot|Web Downloader/6\.9|Web Image Collector|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|Website Quester|Webster Pro|WebStripper|WebZip|Wotbox|wsr\-agent|WWW\-Collector\-E|Xenu|yandex|Zao|Zeus|ZyBORG|coccoc|Incutio|lmspider|memoryBot|SemrushBot|serf|Unknown|uptime files" bad_bot #Deny from env=bad_bot # END Bad Bot Blocker

# BEGIN Bad Bot Blocker #SetEnvIfNoCase User-Agent "Abonti|aggregator|AhrefsBot|asterias|BDCbot|BLEXBot|BuiltBotTough|Bullseye|BunnySlippers|ca\-crawler|CCBot|Cegbfeieh|CheeseBot|CherryPicker|CopyRightCheck|cosmos|Crescent|discobot|DittoSpyder|DOC|DotBot|Download Ninja|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Fasterfox|FeedBooster|Foobot|Genieo|grub\-client|Harvest|hloader|httplib|HTTrack|humanlinks|ieautodiscovery|InfoNaviRobot|IstellaBot|Java/1\.|JennyBot|k2spider|Kenjin Spider|Keyword Density/0\.9|larbin|LexiBot|libWeb|libwww|LinkextractorPro|linko|LinkScan/8\.1a Unix|LinkWalker|LNSpiderguy|lwp\-trivial|magpie|Mata Hari|MaxPointCrawler|MegaIndex|Microsoft URL Control|MIIxpc|Mippin|Missigua Locator|Mister PiX|MJ12bot|moget|MSIECrawler|NetAnts|NICErsPRO|Niki\-Bot|NPBot|Nutch|Offline Explorer|Openfind|panscient\.com|PHP/5\.\{|ProPowerBot/2\.14|ProWebWalker|Python\-urllib|QueryN Metasearch|RepoMonkey|RMA|SemrushBot|SeznamBot|SISTRIX|sitecheck\.Internetseer\.com|SiteSnagger|SnapPreviewBot|Sogou|SpankBot|spanner|spbot|Spinn3r|suzuran|Szukacz/1\.4|Teleport|Telesoft|The Intraformant|TheNomad|TightTwatBot|Titan|toCrawl/UrlDispatcher|True_Robot|turingos|TurnitinBot|UbiCrawler|UnisterBot|URLy Warning|VCI|WBSearchBot|Web Downloader/6\.9|Web Image Collector|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|Website Quester|Webster Pro|WebStripper|WebZip|Wotbox|wsr\-agent|WWW\-Collector\-E|Xenu|yandex|Zao|Zeus|ZyBORG|coccoc|Incutio|lmspider|memoryBot|SemrushBot|serf|Unknown|uptime files" bad_bot #SetEnvIfNoCase Referer "Abonti|aggregator|AhrefsBot|asterias|BDCbot|BLEXBot|BuiltBotTough|Bullseye|BunnySlippers|ca\-crawler|CCBot|Cegbfeieh|CheeseBot|CherryPicker|CopyRightCheck|cosmos|Crescent|discobot|DittoSpyder|DOC|DotBot|Download Ninja|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Fasterfox|FeedBooster|Foobot|Genieo|grub\-client|Harvest|hloader|httplib|HTTrack|humanlinks|ieautodiscovery|InfoNaviRobot|IstellaBot|Java/1\.|JennyBot|k2spider|Kenjin Spider|Keyword Density/0\.9|larbin|LexiBot|libWeb|libwww|LinkextractorPro|linko|LinkScan/8\.1a Unix|LinkWalker|LNSpiderguy|lwp\-trivial|magpie|Mata Hari|MaxPointCrawler|MegaIndex|Microsoft URL Control|MIIxpc|Mippin|Missigua Locator|Mister PiX|MJ12bot|moget|MSIECrawler|NetAnts|NICErsPRO|Niki\-Bot|NPBot|Nutch|Offline Explorer|Openfind|panscient\.com|PHP/5\.\{|ProPowerBot/2\.14|ProWebWalker|Python\-urllib|QueryN Metasearch|RepoMonkey|RMA|SemrushBot|SeznamBot|SISTRIX|sitecheck\.Internetseer\.com|SiteSnagger|SnapPreviewBot|Sogou|SpankBot|spanner|spbot|Spinn3r|suzuran|Szukacz/1\.4|Teleport|Telesoft|The Intraformant|TheNomad|TightTwatBot|Titan|toCrawl/UrlDispatcher|True_Robot|turingos|TurnitinBot|UbiCrawler|UnisterBot|URLy Warning|VCI|WBSearchBot|Web Downloader/6\.9|Web Image Collector|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|Website Quester|Webster Pro|WebStripper|WebZip|Wotbox|wsr\-agent|WWW\-Collector\-E|Xenu|yandex|Zao|Zeus|ZyBORG|coccoc|Incutio|lmspider|memoryBot|SemrushBot|serf|Unknown|uptime files" bad_bot #Deny from env=bad_bot # END Bad Bot Blocker

Запрещаем просмотр директории

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

1 2 # directory browsing Options All –Indexes

# directory browsing Options All –Indexes

Защита админки в WordPress

Если у вас есть желание создать двухуровневый доступ для входа в панель администратора Вордпресс, тогда нужно проделать некоторые манипуляции:
Зайти на сайт htaccesstools.com/htpasswd-generator, откроется следующее окно в котором нужно ввести имя пользователя, а во вторую строчку ввести пароль(только сложный). Не вводите простые пароли типа 12345, толку от них никакого. Далее нажмите на кнопку Create .htpasswd и сохраните файл на свой компьютер.

Размещаем данный файл в корне своего сайта. Конечно это не самое лучшее место, так как это место более открыто. НО я думаю для тренировки этого хватит, а далее вы уже переместите его в любую другую директорию (не забыв указать правильный путь к файлу.htpasswd).

Потом сохраните следующий код в корневом файле htaccess.

разместить этот файл в корне вашего сайта, потом перейти на него..php

Если вы сделали все как надо, тогда при входе в админку вам выдаст приглашение для ввода имени и пароля

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

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

РАСШИРЕННАЯ НАСТРОЙКА ФАЙЛА htaccess

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

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

Предлагаю начать с подмены страницы ошибок. Это бывает тогда, когда посетитель открывает ошибочную страницу и его перебрасывает на страницу ошибки, но многие знают ошибку 404, а бывают еще 400, 401, 403, 500, которые обозначают разные ошибки. Так вот, когда перебрасывают посетителя на такую страницу, то такой страницы может и не быть, а попросту открывается страница вашего провайдера, после открытия которой пользователь закрывает страницу и вы теряете данного посетителя.

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

1 2 3 4 5 6 ErrorDocument 400 /errors/br.html ErrorDocument 401 /errors/aureq.html ErrorDocument 403 /errors/fb.html ErrorDocument 404 /errors/404.html ErrorDocument 500 /errors/serv.html #Замените /errors/*.html указание пути к странице с ошибки

ErrorDocument 400 /errors/br.html ErrorDocument 401 /errors/aureq.html ErrorDocument 403 /errors/fb.html ErrorDocument 404 /errors/404.html ErrorDocument 500 /errors/serv.html #Замените /errors/*.html указание пути к странице с ошибки

Перенаправление по 301, 302 ошибкам.

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

Options +FollowSymLinks RewriteEngine on RewriteRule (.*)

Блокирование открытия картинок с вашего сайта

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

RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ваш-урл\.com/ RewriteCond %{HTTP_REFERER} !^$ #Нужно изменить путь к своей картинке. RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/noHL.jpg [L]

Склеиваем зеркала сайтов

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

1 2 3 4 Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.ваш-сайт\.ru$ RewriteRule ^(.*)$ http://ваш-сайт.ru/$1

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.ваш-сайт\.ru$ RewriteRule ^(.*)$ http://ваш-сайт.ru/$1

Этот вариант нужен для тех, у кого несколько сайтов, на которых информация дублируется.

Перенаправление на главную страницу

А здесь происходит простое перенаправление со страниц вашсайт.ru/index.php и вашсайт.ru/index.html на главную страницу сайта.

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

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

Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:

RewriteLog /usr/local/apache/logs/mod_rewrite.log RewriteLogLevel 1

Директивы модуля Mod_rewrite

Наиболее часто используемые параметры

%{REQUEST_URI} Строка запроса (без доменного имени, и GET параметров), пример "/server/htaccess/"
%{HTTP_HOST} Доменное имя, например "max22.ru"
%{QUERY_STRING} Строка GET параметров

Варианты реализации Редиректа с помощью файла.htaccess

  1. Простой редирект:
    Redirect 301 / http://www.domainname.ru/ или redirect /secret http://www.site.ru/nosecret или # с использованием регулярного выражения RedirectMatch 301 .* http://www.site.ru/?.htaccess или httpd.conf для Apache. Первый "/" означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний "/"). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

    Redirect 301 /old/old.htm http://www.you.ru/new.htm где:
    /old/old.htm - путь и имя старой страницы
    http://www.you.com/new.htm - новый путь и новое имя перемещенной страницы

  2. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
    Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php: SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /user.php
  3. Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле.htaccess (gif и jpg), то следует перенаправление: RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
  4. Использование mod_rewrite:
    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yourdomain\.ru RewriteRule ^(.*)$ http://www.yourdomain.ru/$1
  5. Редирект с регулярным выражением:
    RedirectMatch 301 (.*) http://www.yourdomain.ru$1 Прописывается в файле.htaccess. (.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/yourdomain.ru. Однако, можно преобразовать страницы с использованием.html расширения к файлам того же самого названия, но с.php расширением: RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее: RedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$ http://www.newdomain.com/other_page.php RedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/ "RedirectMatch Permanent " - это эквивалент "RedirectMatch 301", строка с "*(Wildcard)" должна быть последней в этом списке.
  6. Создание удобо читаемых URL
    Чтобы преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом: RewriteEngine on RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L] В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/: RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
  7. Редирект на PHP:
    header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit(); Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)
  8. Редирект всех файлов в папке на один файл.
    Например вы больше не нуждаетесь в разделе сайта Super discount и хотите перенаправить все запросы к папке /superdiscount на один файл /hot-offers.php. Для этого добавляем в.htaccess следующий код. RewriteRule ^superdiscount(.*)$ /hot-offers.php
  9. Редирект всей папки кроме одного файла
    В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.html RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html RewriteRule ^superdiscount(.*)$ /hot-offers.php
  10. Редирект динамического URL на новый файл.
    Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл. RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm То есть теперь, запрос к файлу вида http://www.kass.ws/article.jsp?id=8632 и/или http://www.kass.ws/article.jsp?id=1245 будет отправлен на файл http://www.kass.ws/latestnews.htm.
  11. Массовый редирект новых файлов.
    Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в.htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в.htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
    Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
    После этого, добавляем следующую строчку в.htaccess: RewriteRule ^/product-(.*)_(+).php /redirectold.php?productid=$2 затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

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

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

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

    Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени: RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700 RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900 RewriteRule ^foo\.html$ foo.day.html RewriteRule ^foo\.html$ foo.night.html

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

  12. Убираем у всех запросов в начале "WWW."
    RewriteEngine on # оглашаем, что хотим использовать mod_rewrite RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^/?(.*) http://%1/$1

    Проверяем доменное имя, если оно начинается с www, то сработает правило: "все, на http://%1/$1". Здесь %1 это наш домен без www (взят из условия), а $1 это адрес (взят из самого правила).

  13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php

    Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить(склеить) страницы вида http://ваш_домен/ и http://ваш_домен/index.php

    RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://%{HTTP_HOST}/$1

  14. Меняем расширение .html на .php
    Иногда бывает так, что у Вас статичный веб-сайт, а Вам необходимо, чтобы на нем срабатывал какой-нибудь php-скрипт. Для этого Вам необходимо сказать серверу, чтобы он обрабатывал эту страницу как php-файл. AddHandler application/x-httpd-php .html Этот прием можно использовать и для других расширений файлов: AddHandler application/x-httpd-php .xml AddHandler application/x-httpd-php .asp

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

  1. для всех ко всем файлам в директории: deny from all
  2. к конкретному файлу: deny from all
  3. по ip пользователя: order deny,allow deny from all allow from 192.152.37.125 Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125.

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

    order allow,deny allow from all deny from 192.152.37.125 deny from 123.456.177

  4. Директива Options -Indexes - запрет на отображение содержимого каталога при отсутствии индексного файла Иногда нужно сделать так, чтобы в случае отсутствия в каталоге файла, который показывается по умолчанию, не выдавался список файлов в каталоге. Тогда можно добавить в.htaccess такую строчку: Options -Indexes В этом случае вместо списка файлов в каталоге посетитель получит HTTP ошибку 403 - access forbidden.
  5. Запретить доступ к файлам с несколькими типа расширений
  6. deny from all

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

    [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее: RewriteRule ^.htaccess$ - [F] Это правило переводится так:
    Если кто-то пробует обращаться к файлу.htaccess, система должна произвести код ошибки "HTTP response of 403" или "403 Forbidden - You don"t have permission to access /.htaccess on this server".

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

    Имя файла должно быть расположено точно между начальным и конечным якорем. Это будет гарантировать то, что только это определенное имя файла и никакое другое, сгенерирует код ошибки.
    [F] - специальный "запрещающий" флажок (forbidden).
    - не учитывать регистр букв.
    - означает "или следующее условие".

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

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

AddDefaultCharset windows-1251 варианты: KOI8-R , UTF-8 , Windows-1251

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

CharsetSourceEnc windows-1251

Установка пароля на директорию с помощью.htaccess

Для установки пароля на директорию можно воспользоваться системой базовой авторизации, предусмотренной в веб-сервере Apache. Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл.htaccess с такими директивами: AuthType Basic AuthName "Some Name" AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd require valid-user Путь /www/some_login/www/htdocs/some_dir/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл.htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете, зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /www/some_login/www/htdocs/some_dir/.htpasswd, где some_login - Ваш логин. В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл.htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что.htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.

Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (на нашем сервере она находится в каталоге /usr/local/apache/bin, полный путь - /usr/local/apache/bin/htpasswd).

Рассмотрим, как создать файл паролей в unix shell прямо на сервере. Зайдем в shell и будем выполнять следующие команды:

Htpasswd -mbc .htpasswd user1 7B1safkir - создаем новый файл.htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке. htpasswd .htpasswd user2 - добавляем в уже существующий файл.htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы.

После окончания заведения всех логинов файл нужно загрузить на сервер.

О других способах установки паролей на страницу

Задаем собственные страницы ошибок

Задать собственную страницу ошибок можно следующим образом: ErrorDocument 404 http://www.site.ru/404.php IE игнорирует страницы размером меньше 512 байт.

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

Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру: DirectoryIndex index.php Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

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

DirectoryIndex index.html index.php index.shtml

Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.

Защита изображений от скачивания

Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто: RewriteEngine on RewriteCond %{HTTP_REFERER} . RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)?site\. RewriteCond %{HTTP_REFERER} !google\. RewriteCond %{HTTP_REFERER} !search\?q=cache RewriteCond %{HTTP_REFERER} !msn\. RewriteCond %{HTTP_REFERER} !yahoo\. RewriteCond %{REQUEST_URI} !^/hotlinker\.gif$ RewriteRule \.(gif|jpg|png)$ /hotlinker.gif hotlinker.gif - изображение, которое будет отображаться, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.

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

SetEnvIfNoCase Referer "^$" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?htmlweb\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?images\.yandex\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?hghltd\.yandex\.com" local_ref=1 Order Allow,Deny Allow from env=local_ref

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

RewriteCond %{HTTP_USER_AGENT} (Googlebot|Slurp|spider|Twiceler|heritrix| Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer| MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeves|ActiveTouristBot| JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot| MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client| MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner| Asterias\ Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot| VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser| fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot| Windows\ 95|^Mozilla/4\.05\ \$|^Mozilla/4\.0$) RewriteRule ^(.*)$ - [F] # RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteCond %{HTTP_USER_AGENT} ^Opera.* RewriteCond %{HTTP_USER_AGENT} ^Firefox.* RewriteCond %{HTTP_USER_AGENT} ^Netscape.* RewriteRule ^(.*)$ - [L] RewriteRule ^(.*)$ - [F]

Отслеживание обращений к файлу robots.txt

Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацио об обращении к файлу robots.txt Для того, чтобы оганизовать это, в ".htaccess" должны быть следующие записи: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^robots.txt$ /robot.php?%{REQUEST_URI} Теперь при запросе файла "robots.txt" наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. "REQUEST_URI" определяет имя запрашиваемого файла. В данном примере это - "robots.txt". Скрипт прочтет содержание "robots.txt" и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.

PHPSESSID

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

Ini_set("session.use_trans_sid", 0);

Либо в.htaccess пропишите:

Php_flag session.use_trans_sid Off

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

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

Кэширование для всех типов файлов по времени доступа ExpiresActive on ExpiresDefault "access plus 600 seconds" Кэширование для всех типов файлов по времени изменения ExpiresActive on ExpiresDefault "modification plus 600 seconds" Кэширование для определённых типов файлов ExpiresByType text/css "modification plus 600 seconds" ExpiresByType image/jpeg "modification plus 600 seconds" ExpiresByType image/gif "modification plus 600 seconds" ExpiresByType image/x-ico "modification plus 600 seconds" ExpiresByType image/png "modification plus 600 seconds"

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

Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:

LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so ... AddModule mod_expires.c AddModule mod_headers.c

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

# Запрещение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control Header append Cache-Control "no-store, no-cache, must-revalidate" # Заголовок Expires ExpiresActive On ExpiresDefault "now"

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

Описание http-заголовка кеширования Cache-control

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

# Разрешение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # ExpiresActive on #ExpiresDefault "access plus 1 hours" #ExpiresDefault "access plus 10 years" ExpiresDefault "access plus 1 month" ExpiresByType text/cache-manifest "access plus 0 seconds" ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/rss+xml "access plus 1 month" ExpiresByType image/x-icon "access plus 1 week" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType video/ogg "access plus 1 year" ExpiresByType audio/ogg "access plus 1 year" ExpiresByType audio/mp3 "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/webm "access plus 1 year" ExpiresByType text/x-component "access plus 1 month" ExpiresByType font/truetype "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType text/css "access plus 2 months" ExpiresByType application/javascript "access plus 2 months" ExpiresByType text/javascript "access plus 2 months" Header append Cache-Control "public"

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

ExpiresDefault "access plus 3 days"

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

Как заставить html-страницы обрабатывать php-код?

Пропишите в своем файле.htaccess следующие строки: RemoveHandler .php .htm .html AddHandler application/x-httpd-php .php .htm .html

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

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

RewriteEngine On RewriteRule ^newdirectory/ - [L] RewriteCond %{HTTP_HOST} (www.)?newdomain.ru RewriteRule (.*) newdirectory/$1 [L]

Где:
newdirectory/ - папка, в которой будет лежать второй сайт
newdomain.ru - домен, для которого мы делаем перенаправление

Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. Т.е. если, у Вас существует ящик [email protected], то после подключения домена newdomain.ru у ящика [email protected] появляется второе имя - [email protected]. А при создании любого нового ящика (например info), ему автоматически присваиваются два имени - [email protected] и [email protected].

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

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

RewriteEngine on # во-первых попытаемся найти это в указанном месте/... # ...и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /your/docroot/dir1/$1 [L] # во-вторых - попытаемся найти это в pub/... # ...и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f RewriteRule ^(.+) /your/docroot/dir2/$1 [L] # иначе продолжаем для других директив RewriteRule ^(.+) -

Виртуальные хосты пользователей

Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:

RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.[^.]+\.ru$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^www\.([^.]+)\.ru(.*) /home/$1$2

Повреждаются файлы при загрузке на сервер

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

Ошибка загрузки 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 SecFilterEngine Off SecFilterScanPOST Off Для сообщения:

"POST /wp-admin/async-upload.php HTTP/1.1" 406 354 "-" "Shockwave Flash"

Можно снять защиту только на загрузку файлов на сервер: SecFilterEngine Off SecFilterScanPOST Off

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

Переменные сервера

Это переменные вида %{NAME_OF_VARIABLE}

где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:

Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP, и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:

IS_SUBREQ - Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированны модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.

API_VERSION - Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей.

THE_REQUEST - Полная строка HTTP запроса отправленная браузером серверу (т.е., « GET /index.html HTTP/1.1 »). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

REQUEST_URI - Ресурс, запрошенный в строке HTTP запроса.

REQUEST_FILENAME - Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

Примечания:

  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е., значение поля filename внутренней структуры request_rec сервера Apache. Первое имя это просто широко известное имя переменной CGI в то время как второе это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec).
  2. Есть специальный формат: %{ENV:переменная} где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.
  3. Есть специальный формат: %{HTTP:заголовок} где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP заголовка « Proxy-Connection: ».
  4. Есть специальный формат %{LA-U:переменная} опережающих запросов которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной . Используйте это когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf) вы должны использовать %{LA-U:REMOTE_USER} потому что эта переменная устанавливается в фазах авторизации которые идут после фазы трансляции URL в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл.htaccess) через Fixup фазу API и из-за того, фазы авторизации идут до этой фазы, вы просто можете там использовать %{REMOTE_USER} .
  5. Есть специальный формат: %{LA-F:переменная} который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной . В основном это то же самое что и формат LA-U приведенный выше.

Главная страница без дублирования

Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru и www.yoursite.ru/index.html. Но для поисковых систем это четыре разных URL! Если не настроить.htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта. Избежать этой проблемы можно с помощью такого кода в.htaccess:

Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite.ru RewriteRule (.*) http://www.yoursite.ru/$1 RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://www.yoursite.ru/

Все страницы-дубли будут склеены редиректом с кодом с главной страницей – http://www.yoursite.ru/.

Дубли страниц без слэша в конце URL

Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:

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

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ /$1/

Сохранение(загрузка) файлов вместо открытия

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

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

Сжатие отправляемых страниц

SetOutputFilter DEFLATE Header unset ETag FileETag None

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

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

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/

Междоменное использование шрифтов для FireFox

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

#Замените yourdomain.com на адрес вашего блога Header set Access-Control-Allow-Origin "http://yourdomain.com"

Выполнять PHP в файлах JavaScript

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

AddType application/x-httpd-php .js AddHandler x-httpd-php5 .js SetHandler application/x-httpd-php

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

# Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его туда RewriteCond %{DOCUMENT_ROOT}/domain/%{HTTP_HOST}/root%{REQUEST_URI} -f RewriteRule ^(.*)$ /domain/%{HTTP_HOST}/root/$1 [L]

Блокируем User Agents через.htaccess

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

SetEnvIfNoCase User-Agent "^Black Hole" bad_bot SetEnvIfNoCase User-Agent "^Titan" bad_bot SetEnvIfNoCase User-Agent "^WebStripper" bad_bot SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot SetEnvIfNoCase User-Agent "^WebBandit" bad_bot SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot SetEnvIfNoCase User-Agent "^ExtractorPro" bad_bot SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot SetEnvIfNoCase User-Agent "^Crescent" bad_bot SetEnvIfNoCase User-Agent "^Wget" bad_bot SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot SetEnvIfNoCase User-Agent "^Teleport" bad_bot SetEnvIfNoCase User-Agent "^TeleportPro" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot SetEnvIfNoCase User-Agent "^Telesoft" bad_bot SetEnvIfNoCase User-Agent "^Website Quester" bad_bot SetEnvIfNoCase User-Agent "^WebZip" bad_bot SetEnvIfNoCase User-Agent "^moget/2.1" bad_bot SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot SetEnvIfNoCase User-Agent "^WebSauger" bad_bot SetEnvIfNoCase User-Agent "^WebCopier" bad_bot SetEnvIfNoCase User-Agent "^NetAnts" bad_bot SetEnvIfNoCase User-Agent "^Mister PiX" bad_bot SetEnvIfNoCase User-Agent "^WebAuto" bad_bot SetEnvIfNoCase User-Agent "^TheNomad" bad_bot SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot SetEnvIfNoCase User-Agent "^RMA" bad_bot SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot SetEnvIfNoCase User-Agent "^asterias" bad_bot SetEnvIfNoCase User-Agent "^httplib" bad_bot SetEnvIfNoCase User-Agent "^turingos" bad_bot SetEnvIfNoCase User-Agent "^spanner" bad_bot SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot SetEnvIfNoCase User-Agent "^Harvest/1.5" bad_bot SetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_bot SetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_bot SetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_bot SetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_bot SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_bot SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot SetEnvIfNoCase User-Agent "^Foobot" bad_bot SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot SetEnvIfNoCase User-Agent "^SpankBot" bad_bot SetEnvIfNoCase User-Agent "^BotALot" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.6" bad_bot SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_bot SetEnvIfNoCase User-Agent "^URLy Warning" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_bot SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot SetEnvIfNoCase User-Agent "^cosmos" bad_bot SetEnvIfNoCase User-Agent "^moget" bad_bot SetEnvIfNoCase User-Agent "^hloader" bad_bot SetEnvIfNoCase User-Agent "^humanlinks" bad_bot SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot SetEnvIfNoCase User-Agent "^Offline Explorer" bad_bot SetEnvIfNoCase User-Agent "^Mata Hari" bad_bot SetEnvIfNoCase User-Agent "^LexiBot" bad_bot SetEnvIfNoCase User-Agent "^Web Image Collector" bad_bot SetEnvIfNoCase User-Agent "^The Intraformant" bad_bot SetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_bot SetEnvIfNoCase User-Agent "^True_Robot" bad_bot SetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_bot SetEnvIfNoCase User-Agent "^JennyBot" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_bot SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot SetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_bot SetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_bot SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot SetEnvIfNoCase User-Agent "^suzuran" bad_bot SetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_bot SetEnvIfNoCase User-Agent "^VCI" bad_bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot SetEnvIfNoCase User-Agent "^Openfind data gathere" bad_bot SetEnvIfNoCase User-Agent "^Openfind" bad_bot SetEnvIfNoCase User-Agent "^Xenu"s Link Sleuth 1.1c" bad_bot SetEnvIfNoCase User-Agent "^Xenu"s" bad_bot SetEnvIfNoCase User-Agent "^Zeus" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot SetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot SetEnvIfNoCase User-Agent "^Webster Pro" bad_bot SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot SetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_bot SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot

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

RewriteEngine on RewriteCond %{HTTP:Accept-Language} (ru) RewriteRule .* КУДА [L]

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

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

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ

RewriteEngine on RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ

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

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

RewriteEngine on RewriteCond %{HTTP_REFERER} bannedurl1.com RewriteCond %{HTTP_REFERER} bannedurl2.com RewriteRule .* - [F]

bannedurl1.com и bannedurl2.com - примеры запрещенных сайтов.

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

Объем загружаемого файла:

Php_value upload_max_filesize 15M

Максимальный размер запроса для загрузки в PHP:

Php_value post_max_size 10M

Время выполнения скрипта:

Php_value max_execution_time 240

Время для скрипта на разбор введенных данных:

Php_value max_input_time 180

Указываем для IE режим вывода

Установка заголовка X-UA-Compatible:

Header set X-UA-Compatible "IE=Edge"

Установка Vary: Accept-Encoding

Для поисковой оптимизации, и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding

Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.

Header append Vary: Accept-Encoding

Общий файл картинки для всех доменов(глобальные алиасы)

Alias /javascripts /usr/share/javascript/ Options FollowSymLinks MultiViews Положите общий файл, например, icon.png в директорию /usr/share/javascript/ В файл /etc/javascript-common/javascript-common.conf и добавьте строку: Alias /apple-touch-icon-precomposed.png /usr/share/javascript/icon.png

При загрузке.doc, .docx файлы открываются в браузере с непонятной кодировкой

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

AddType application/force-download doc AddType application/force-download docx AddType application/force-download xls AddType application/force-download xlsx

Перенаправление на безопасное соединение https

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

RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Доступ если установлена cookie с помощью htaccess

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

RewriteEngine On RewriteCond %{HTTP_COOKIE} !login=admin RewriteRule .* http://%{HTTP_HOST}/

По этому же принципу можно закрывать сайт на профилактические работы для всех кроме админа.

Доступ к заголовкам «If-Modified-Since» и «If-None-Match» для реализации http 304 ответа

Если PHP не установлен как модуль Apache, то для доступа к заголовкам «If-Modified-Since» и «If-None-Match» необходимо в корневом каталоге веб-сайта поместить файл.htaccess следующего содержания:

RewriteEngine On RewriteRule .* - RewriteRule .* -

После этого, необходимые заголовки будут доступны как $_SERVER["HTTP_IF_MODIFIED_SINCE"] и $_SERVER["HTTP_IF_NONE_MATCH"].

Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр "private_no_expire":

Session_cache_limiter("private_no_expire"); session_start();

Кроме этого дополнительную информацию по теме можно почерпнуть:

www.egoroff.spb.ru - Примеры переадресаций
htaccess.net.ru - дополнительная информация по htaccess.

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

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

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

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

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

Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:

Команда параметр1 параметр2 флаги

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

Настройка доступа htaccess

Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:

  • order - порядок;
  • deny - запретить;
  • allow - разрешить.

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

Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:

Order deny,allow
Deny from all

Но мы также можем разрешить доступ только с локальной сети:

Order deny,allow
Deny from all
Allow 192.168.0.

Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:

Order allow,deny
Allow 192.168.0.

Модификация URL в htaccess

Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.

Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase , которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.

Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:

RewriteEngine on

Укажем, что в качестве префикса для URL нужно использовать корень:

И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:

RewriteRule index.html /index.php

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

  • ^ - начало строки;
  • $ - конец строки;
  • . - любой символ;
  • * - любое количество любых символов;
  • ? - один определенный символ;
  • - последовательность символов, например, от 0 до 9;
  • | - символ или, выбирается или одна группа, или другая;
  • () - иcпользуется для выбора групп символов.

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

  • %{HTTP_USER_AGENT} - поле User-Agent, которое передает браузер пользователя;
  • %{REMOTE_ADDR} - IP адрес пользователя;
  • %{REQUEST_URI} - запрашиваемый URI;
  • %{QUERY_STRING} - параметры запроса после знака?.

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

RewriteEngine On;
RewriteBase /;

Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:

RewriteBase /;
RewriteCond % {HTTP_HOST} ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php

Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.

Настройка редиректов в htaccess

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

Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:

Redirect 301 /index.html http://www.site.ru/index.php

Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:

RewriteCond %{HTTP_HOST} ^site\.ru$
RewriteRule ^(.*)$ http://www.site.ru/$1

Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:

RewriteCond %{HTTP_HOST} ^www.site\.ru$
RewriteRule ^(.*)$ http://site.ru/$1

Таким же образом можно сделать переадресацию:

RewriteRule ^старый_адрес /новый_адрес/$1

Редирект с http версии на https:

RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1

Настройка страниц ошибок в htaccess

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

Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:

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

Кэширование в htaccess

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

Сначала активируем модуль и устанавливаем период кэширования по умолчанию:

ExpiresActive On
ExpiresDefault "access plus 1 month"

Теперь мы можем настроить кэширование для каждого mime типа файлов:

ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "access plus 5 hours 3 minutes"
ExpiresByType image/x-icon "access plus 2592000 seconds"

В первой строке мы указываем, что страницы html нужно считать годными на один месяц 15 дней и два часа с момента загрузки. Доступны такие типы файлов:

  • image/x-icon;
  • image/jpeg;
  • image/png;
  • image/gif;
  • application/x-shockwave-flash;
  • text/css;
  • text/javascript;
  • application/javascript;
  • application/x-javascript;
  • text/html;
  • application/xhtml+xml;

Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:


Сжатие файлов в htaccess

Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:


Выводы

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

На завершение предлагаю видео с обзором конфигурационного файла Apache: