Содержание

Файл .htaccess: правильное использование, примеры и рекомендации

Что такое .htaccess?

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

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

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

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

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

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

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

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

  1. Редирект между страницами или сайтами + изменение URL
  2. Обработка ошибо

8 изумительных примеров .htaccess файлов

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

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

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

htaccess, эти файлы проявляют свое действие. На Linux системах они делаются невидимыми по умолчанию.

В дальнейшем, для работы с htaccess файлами локально, вы можете установить локальный сервер (Denwer). При этом htaccess файлы должны быть в корневой директории проекта (сайта). Для редактирования, мы можем использовать любой из текстовых редакторов (Notepad++ вполне подойдет).

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

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

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

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

Пример .htaccess редиректа

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

Redirect 301 ^old\.html$  <a href="http://localhost/new.html" target="_blank">http://localhost/new.html</a>

Это изменяет HTTP заголовок ответа на 301 (перемещено навсегда) и перенаправляет все запросы из old.html, соответственно на new.html. Мы используем регулярные выражения для определения URL для редиректа, которые дают возможность выбирать только нужные URL для перенаправления. Также можно вставлять полный URL адрес, но это ручная работа.

Пример .htaccess rewrite

В переводе, rewrite означает – переписать. Мы можем переписывать текущий URL страниц для более простого восприятия, или как говорят в народе: «для создания ЧПУ» (человекопонятных УРЛ). Что сейчас очень распространено. Пример простого использования htaccess rewrite можете посмотреть ниже:

RewriteEngine on

RewriteRule ^old\.html $ new.html

В этом примере, мы применяем простой редирект из одного файла, на другой, который будет реализован невидимым образом, без изменений в адресной строке. Первое указание, RewriteEngine on, просто удостоверяется, что движок rewrite доступен для использования.

В дальнейшем, для отображения обновленной информации в адресной строке посетителя, мы можем использовать модификатор R, в конце правила. Смотрите пример:

RewriteRule ^old\.html$  <a href="http://hostname/new.html" target="_blank">http://hostname/new.html</a> [r=301]

Модификатор r, способствует внешней переадресации, которая возвращает новую страницу. Таким образом, мы можем определить код статута (HTTP ответ). Этот пример кода обновляет информацию в адресной строке браузера.

Еще одно полезное применение для htaccess rewrite, которое упоминалось ранее, это создание ЧПУ. Давайте посмотрим на примере:

RewriteRule ^products/([^/]+)/([^/]+)/([^/<WBR>]+) product.php?cat=$1&brand=$2&<WBR>prod=$3

Это правило позволит пользователям увидеть URL подобным образом: products/turntables/technics/sl1210, а перенаправить на product.php?cat=turntables&<WBR>brand=technics&prod=sl1210, без изменения данных в адресной строке. Это очень удобно как для SEO, так и для пользователей. Текст между слешами, это регулярные выражения, которые позволяют отобразить только значения $1,$2,$3, между которыми слеши. Выражение [^/]+ означает, что может встречаться любой из символов 1 или больше раз, за исключением слеша (/).

На практике, url rewrite используют более сложным образом. Этой теме посвящено множество статей и уроков, мы не будем на этом останавливаться.

Создание собственной 404 страницы

Это не совсем хорошо, отображать стандартную страницу ошибки 404. Много сайтов, подходят творчески, с юмором к своей 404 странице (которая выводиться при невозможности найти соответственного документа в директориях сайта). Вы также можете создать собственную 404 страницу.

Очень просто, использовать .htaccess, для указания страницы 404 ошибки. Смотрите на примере:

ErrorDocument 404 ";/404.html";

Это все что нам необходимо для отображения 404 страницы. Мы также можем создать свои страницы для других ошибок сервера.

Запрещение доступа к определенным ресурсам

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

AuthName ";Username and password required";

AuthUserFile /path/to/.htpasswd

Require valid-user

AuthType Basic

Этот файл нужно сохранить и поместить в директорию, которую мы хотим защитить. Указание AuthName, выводит сообщение с блоков ввода логина и пароля. AuthUserFile это указание пути к файлу .htpasswd. Указание Require, определяет, что только авторизованные пользователи имеют доступ к защищенным файлам, в то время как AuthType установлено на Basic.

Для защиты конкретного файла, мы можем поместить следующий код в директиву <files>, в которой определяются файлы для защиты доступа.

Files ";protectedfile.html";>

AuthName ";Username and password required";

AuthUserFile /path/to/.htpasswd

Require valid-user

AuthType Basic

</Files>

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

Блокирование доступа отдельных IP, user-agent

Еще одно использование файла .htaccess, это быстрое и простое блокирование всех запросов от отдельных IP адресов или user-agent. Для блокирования отдельных IP адресов необходимо лишь указать несколько директив, как показано в примере:

order allow,deny

deny from 192.168.0.1

allow from all

Директива order, сообщает серверу, в какой последовательности выполнять директивы allow/deny. В этом случае, директива allow будет выполнятся первой, потом deny. Указание allow from all выполняется первым (хотя и стоит в коде после deny), оно позволяет всем IP адресам иметь доступ к содержимому. После этого вступает в силу директива deny, которая запрещает доступ определенным IP. Таким образом имеют доступ все, кроме указанных IP адресов. Следует отметить, что мы можем запрещать доступ используя короткие IP адреса, например 192.168.

Для запрещения запросов отдельных user-agent, нам следует сделать следующее:

RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider

RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$ [r=301,l]

В этом примере, все клиенты со строкой HTTP_USER_AGENT начинающейся на OrangeSpider (плохой бот) будут направлены по обратному адресу. Регулярное выражение предрасполагает, что может быть любой символ (.) ноль или больше раз (*), и перенаправляет на %{REMOTE_ADDR}. Флаг L, мы используем как инструкцию для сервера, выполнять это указание первым. Никакой процесс не будет выполняться перед выполнением этого правила.

Пример .htaccess кэширования

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

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

Если вы проверите свой сайт через Google PageSpeed, то получите сообщение об установках сроков кэширования (far-future expiry headers). Это делается следующим образом:

ExpiresActive on

ExpiresByType image/gif                 ";access plus 1 month";

ExpiresByType image/png                 ";access plus 1 month";

ExpiresByType image/jpg                 ";access plus 1 month";

ExpiresByType image/jpeg                ";access plus 1 month";

ExpiresByType video/ogg                 ";access plus 1 month";

ExpiresByType audio/ogg                 ";access plus 1 month";

ExpiresByType video/mp4                 ";access plus 1 month";

ExpiresByType video/webm                ";access plus 1 month";

Вы можете применять ExpiresByType, для определения различных типов контента, для которых вы хотите применить кэширование. Указание ExpiresActive on, просто убеждается в том, что генерация Expires headers доступна. Доступность определяется наличием установленного модуля mod_expires на сервер Apache.

Пример сжатия на .htaccess

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

FilterDeclare   COMPRESS

FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html

FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css

FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/javascript

FilterChain     COMPRESS

FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no

Эти сжатия работают на серверах Apache 2.1 и выше, которые используют модуль mod_filter. Этот модуль использует алгоритм сжатия DEFLATE, который основан на указании content-type. В этом случае мы определяем text/html, text/css и text/javascript.

В примере выше, мы начинаем с декларации фильтра COMPRESS, используя директиву FilterDeclare. Далее мы перечисляем типы файлов, которые будут проходить через фильтр. Директива FilterChain, дает указание серверу строить звено фильтра, основанное на директивах FilterProvider. Директива FilterProtocol позволяет нам определить опции, применяемые для звена фильтра, когда он будет запущен. В примере мы используем change=yes (контент должен быть изменен с помощью фильтра (в этом случае сжат)), и byteranges=no (фильтр должен быть применен для определенных файлов).

В более старых версиях Apache, модуль mod_deflate также использовался для настройки DEFLATE сжатия. Мы имели меньше возможностей в настройках, но они были проще:

SetOutputFilter DEFLATE

AddOutputFilterByType DEFLATE text/html text/css text/javascript

В этом случае мы устанавливаем алгоритм сжатия с помощью директивы SetOutputFilter, и определяем типы контента, которые мы хотим сжать используя директиву AddOutputFilterByType

Как правило, ваш веб сервер использует один из этих модулей, в зависимости от версии Apache. В основном, если вы разрабатываете свой проект, вы знаете, какой код следует использовать. Но если вы разрабатываете продукт, и не знаете, на каком сервере он будет использован, вам следует использовать оба кода сразу. Для этого оба кода необходимо взять в директиву <IfModule module_name>, это определит, какой из этих модулей используется, и сервер не возвратит 500 ошибок о попытке настройки модуля, которого не существует.

Заключение

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

Дальше: MiraLinks — как зарабатывать, отзывы о миралинкс, цены в miralinks


Как написать .htaccess файл для сайта

Как написать .htaccess файл для сайта

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

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

Делается это разрешение при помощи следующего блока кода:

<Directory /home/my_site/www>
        AllowOverride All
        #Другие директивы ...
</Directory>

 

Здесь в теге <Directory> указывается физический путь на сервере до корня вашего сайта, и внутри тега указывается директива AllowOverride. Эта директива может быть установлена в None, чтобы сервер не читал файл .htaccess. Если она установлена в All — сервер будет допускать все директивы .htaccess файла. Значение по умолчанию: AllowOverride All.

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

Синтаксис файлов .htaccess в общем случае аналогичен синтаксису главного файла конфигурации apache. Однако, администратор может ограничивать для пользователей доступ к тем или иным директивам. То есть, несмотря на то, что команда, в принципе, может исполняться из .htaccess, администратор может запретить доступ к конкретной директиве. Учитывайте это при работе. Также хочу заметить такой момент, когда вы пишите директивы работающие с каталогами? то в главных конфигурационных файлах apache их нужно оборачивать в тег <Directory /path/…> с указанием каталога к которому они применимы, однако при написании этих директив в .htaccess файле уже не нужно их оборачивать в тег <Directory>, если вы хотите что бы они применялись к текущему каталогу файла .htaccess, если же вы хотите применить их только к вложенному каталогу то тогда, опять же, нужно обернуть в тег <Directory>.

Для чего мы можем использовать .htaccess файл. Вариантов здесь немало, вот самые распространенные из них:
1.Для управления разрешениями на доступы к каталогам сайта (запаролить директорию, запретить доступ к файлам определенного формата, или доступ к сайту в определенный промежуток времени, запретить или открыть доступ с определенных IP адресов, управлять роботами поисковиков)
2.Для перезаписи текущего URL на новый в зависимости от условий (см. также описание mod_rewrite сервера Apache и логику его обработки правил )
3.Для явного указания кодировки сайта.
4.Для разрешения или запрета просмотра файлов сайта
5.Для защиты от хотлинка
6.Для выполнения ридирктов

7.Для задания своих страниц ошибок
8.Для переопределения индексного файла
9…. и многое другое.

Давайте для примера напишем некий обобщенный файл .htaccess.
В него мы соберем наиболее распространенные случаи использования директив и добавим к ним комментарии. И из этого шаблона путем удаления не нужного вы сможете всегда подготовить конкретный .htaccess для ваших задач. Здесь символ # — это символ комментария применяемый в конфигах apache.

Подробные пояснения к коду шаблона см. после него.

# .htaccess начало шаблона
# Установка временной зоны
SetEnv TZ Europe/Moscow

# Установим принудительно кодировку страниц сайта
AddDefaultCharset UTF-8

# Зададим index файл который будет
# отдаваться если запрошенный не найден
DirectoryIndex index.php index.html

# Запретим пользователям просматривать файлы директории
Options -Indexes

# Разрешим следовать за символическими связями в этом каталоге
Options +FollowSymLinks

# Разрешение доступа только для указанных IP
Order Deny,Allow
Deny from all
Allow from x.x.x.x

# Или запрет доступа по IP
Order allow,deny
deny from x.x.x.x
deny from x.x.x.x
allow from all

# Запретить всем, то только
# одну эту строку указать
Deny from all

# Закрыть доступ к вложенной директории относительно текущего файла
# можно так, или положив туда отдельный .htaccess файл
<Directory /passwds/>
    Order Deny,Allow
    Deny from All
</Directory>

# Закрыть директорию паролем
AuthType Basic
AuthName "Enter a password"
#путь до файла с паролями и пользователями
AuthUserFile /full/path/to/.htpasswd
require valid-user

# или закрыть вложенную директорию паролем
<Directory /passwds/>
    AuthType Basic
    AuthName "Enter a password"
    #путь до файла с паролями и пользователями (абсолютный или относительно ServerRoot)
    AuthUserFile /full/path/to/.htpasswd
    require valid-user
</Directory>

# Запрет на доступ для файла .htpasswd
# для всех посетителей кроме разрешенных IP
<Files ".htpasswd">
    Order Deny,Allow
    Deny from all
    Allow from x.x.x.x, x.x.x.xx
</Files>

# Блок если нужно отключить обработку PHP
# можно и для <Directory> задать
<IfModule mod_php5.c>
  php_value engine off
</IfModule>
<IfModule mod_php4.c>
  php_value engine off
</IfModule>
#

# Блок изменение настроек PHP
# некоторые директивы зависят от версии PHP
#php_flag register_globals off
#php_value memory_limit 16M
#for files uploading - if needed
#php_value max_execution_time 500
#php_value max_input_time 500
#php_value upload_max_filesize 30M
#php_value post_max_size 30M
#php_flag display_errors off

#Настройка PHP для загрузки больших файлов до 256M
php_value memory_limit 256M
php_value upload_max_filesize 256M
php_value post_max_size 256M
#

# Перезапись URL
<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # установить корневой URL как /
    RewriteBase /

    #Все запросы с HTTP на HTTPS
    RewriteCond %{HTTPS} =off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]

    #Только для указанных каталогов все запросы с http на https redirect
    RewriteCond %{HTTPS} =off
    RewriteCond %{REQUEST_URI} /(admin|secret)/ [NC]
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]
    
    # 301 Редирект как принудительная
    #постановка замыкающего слеша
    #RewriteCond %{REQUEST_URI} /+[^\.]+$
    #RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
    #
    
    # 301 Редирект c www.site.ru на site.ru
    # как удаление www
    RewriteCond %{HTTP_HOST} ^www\.site\.ru [NC]
    RewriteRule ^(.*)$ http://site.ru/$1 [R=301,QSA,L]
    #

    #301 Универсальный редирект с домена www. на без www.
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    #301 Универсальный редирект с домена без www. на www.
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

    # 301 Редирект с указанных доменов на основной
    RewriteCond %{HTTP_HOST} ^www.domen.net$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^domain.net$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^www.domain.net$ [NC]
    RewriteRule ^(.*)$ http://domain.net/$1 [R=301,QSA,L]
    #

    #Редирект с преобразованием GET параметров
    RewriteCond %{QUERY_STRING} do=page [NC]
    RewriteCond %{QUERY_STRING} id=(\d+) [NC]
    RewriteRule .* /page/%1/? [R=301,L]
    
    # Внутреннее пере направление на index.php для CMS
    # Если запрошены не существующие файл или директория
    # То перенаправлять запрос на index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    #
   
    # или еще вариант внутреннего пере направления на index.php
    RewriteCond $1 !^(index\.php|images|robots\.txt|public)
    RewriteCond %{REQUEST_URI} !\.(cssіjsіjpgіgifіpng)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
    # или как:
    RewriteRule ^(.*)$ index.php [L]
    #

   #Еще вариант, для тех у кого не WordPress и кто хочет избавиться
   #от ненужных запросов (боты и т.п.) к темам, к админки и каталогам WordPress вида
   #где, что не файл и не директория, и не начинается с /wp-,
   #то делаем внутренний redirect на index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    #если у вас не WordPress добавим это и также блок после этого
    RewriteCond %{REQUEST_URI} !^/wp- [NC]
    RewriteRule . /index.php [L]
   #если у вас не WordPress то всем кто ломиться в /wp-...   
   #отдадим 410 Gone status - рекомендация забыть этот URL
   #RewriteRule "oldproduct" "-" [G,NC] #общий пример
    RewriteCond %{REQUEST_URI} ^/wp- [NC]
    RewriteRule . - [G,L]
    
    # Зашита от хотлинка
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://site\.ru/ [NC]
    RewriteCond %{HTTP_REFERER} !^https://site\.ru/ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www\.site\.ru/ [NC]
    RewriteCond %{HTTP_REFERER} !^https://www\.site\.ru/ [NC]
    RewriteRule \.(jpeg|png|bmp|gif|jpg|js|css)$ - [F]
    #

   # Еще вариант антихотлинка ресурсов (картинок)
   RewriteCond %{HTTP_REFERER} !^$
   RewriteCond %{HTTP_REFERER} !^http://(.+\.)?server\.ru/ [NC]
   RewriteCond %{HTTP_REFERER} !^https://(.+\.)?server\.ru/ [NC]
   RewriteCond %{REQUEST_URI} !null\.gif$ [NC]
   # Перенаправим на картинку заглушку dummy.gif
   RewriteRule \.(jpg|jpeg|gif|bmp|png)$ http://server.ru/dummy.gif [L]

    
    # Еще вариант антихотлинка ресурсов (картинок)
    RewriteCond %{HTTP_REFERER} !^$
    #Замените ?mysite\.com/ на адрес вашего блога
    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    #Замените /images/nohotlink.jpg на ваше изображение с запрещением хотлинка
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
    
    # Еще вариант антихотлинка ресурсов (картинок)
    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !google. [NC]
    RewriteCond %{HTTP_REFERER} !yandex. [NC]
    RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
    RewriteCond %{HTTP_REFERER} !msn. [NC]
    RewriteCond %{HTTP_REFERER} !yahoo. [NC]
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]

    #
</IfModule>

# Вывод 404 ошибки если выключен mod_rewrite
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

# Зададим свои страницы для ошибок
ErrorDocument 404 /err_404.html
ErrorDocument 403 /err_403.html
#

# Блок кода редиректа на мобильную версию сайта
# Как вариант привожу здесь, больше для примера
<ifModule mod_rewrite.c>
    RewriteEngine on
    # Проверить строку UserAgent браузера
    RewriteCond %{HTTP_USER_AGENT} acs [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} alav [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} alca [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} amoi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} audi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} aste [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} avan [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} benq [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} bird [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} blac [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} blaz [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} brew [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} cell [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} cldc [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} cmd- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} dang [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} doco [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} eric [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} hipt [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} inno [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ipaq [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} java [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} jigs [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} kddi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} keji [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} leno [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} lg-c [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} lg-d [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} lg-g [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} lge- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} maui [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} maxo [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mits [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mmef [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mobi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mot- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} moto [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mwbp [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} nec- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} newt [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} noki [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} opwv [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} palm [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pana [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pant [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pdxg [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} phil [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} play [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pluc [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} port [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} prox [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} qtek [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} qwap [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sage [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sams [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sany [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sch- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sec- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} send [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} seri [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sgh- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} shar [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sie- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} siem [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} smal [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} smar [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sony [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} sph- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} symb [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} t-mo [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} teli [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} tim- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} tosh [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} tsm- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} upg1 [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} upsi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} vk-v [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} voda [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} w3cs [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wap- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wapa [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wapi [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wapp [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wapr [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} webc [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} winw [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} xda [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} xda- [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} up.browser [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} up.link [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} windows.ce [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} iemobile [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mini [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mmp [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} symbian [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} midp [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} wap [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} phone [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ipad [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} iphone [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} iPad [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} iPhone [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ipod [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} iPod [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pocket [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} mobile [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} android [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Android [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} pda [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} PPC [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Series60 [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Opera.Mini [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Moby [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} Mobi [NC,OR]
     
    # Проверить служебные заголовки, отсылаемые браузером
    RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml" [NC,OR]
    RewriteCond %{HTTP_ACCEPT} "application/vnd.wap.xhtml+xml" [NC,OR]
     
    # Проверить исключения
    RewriteCond %{HTTP_USER_AGENT} !windows.nt [NC]
    RewriteCond %{HTTP_USER_AGENT} !bsd [NC]
    RewriteCond %{HTTP_USER_AGENT} !x11 [NC]
    RewriteCond %{HTTP_USER_AGENT} !unix [NC]
    RewriteCond %{HTTP_USER_AGENT} !macos [NC]
    RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
    RewriteCond %{HTTP_USER_AGENT} !playstation [NC]
    RewriteCond %{HTTP_USER_AGENT} !google [NC]
    RewriteCond %{HTTP_USER_AGENT} !yandex [NC]
    RewriteCond %{HTTP_USER_AGENT} !bot [NC]
    RewriteCond %{HTTP_USER_AGENT} !libwww [NC]
    RewriteCond %{HTTP_USER_AGENT} !msn [NC]
    RewriteCond %{HTTP_USER_AGENT} !america [NC]
    RewriteCond %{HTTP_USER_AGENT} !avant [NC]
    RewriteCond %{HTTP_USER_AGENT} !download [NC]
    RewriteCond %{HTTP_USER_AGENT} !fdm [NC]
    RewriteCond %{HTTP_USER_AGENT} !maui [NC]
    RewriteCond %{HTTP_USER_AGENT} !webmoney [NC]
    RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
     
    # При выполнении условий переадресация на мобильную версию сайта
    RewriteRule ^(.*)$ http://mobile.version.of.site.ru [L,R=302]
</ifModule>

#Универсальный 302 редирект на мобильную версию сайта
<ifModule mod_rewrite.c>
    RewriteEngine on
    #Универсальный редирект на мобильную версию сайта
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) [NC]
    RewriteRule ^$  http://m.%1 [R=302,L]
</ifModule>

# .htaccess конец шаблона

Разъяснения по коду шаблона:

Расшифрую некоторые флаги из директив:

  • RewriteCond … [NC] — NC значит регистр нечувствительное сравнение выполнять
  • RewriteCond … [NC,OR] — NC см. выше, OR — значит объединять RewriteCond через OR, по умолчанию если ничего не указана то RewriteCond объединяются через AND оператор.
  • RewriteRule … [L] — L значит закончить (остановить обработку) на этом RewriteRule правиле любые дальнейшие преобразования URL, т.е. последующие RewriteRule не выполнять.
  • RewriteRule … [L,R=302] — L см. выше, R=302 значит выполнить редирект с кодом 302 на преобразованный URL
  • RewriteRule … [R=301,QSA,L] — L и R см. выше, QSA — при преобразовании URL выполнять при стыковку заданных частей, а не замену.
  • RewriteRule … [F] — F, значит отказать в выдачи результата по этому URL кодом 403 Forbidden.
  • RewriteRule . — [G,L] G|Gone — [G] flag значит отдать код 410 Gone status — рекомендация забыть этот URL

AuthUserFile — задает путь к файлу с паролями для http авторизации пользователя. Путь может быть абсолютный от корня файловой системы Linux сервера или относительный от ServerRoot apache. В Ubuntu ServerRoot «/etc/apache2» по умолчанию. При задании относительного пути от ServerRoot apache начальный слеш в пути не указывается, иначе путь будет восприниматься как абсолютный от корня Linux. Также, если путь содержит недопустимые символы и пробелы его нужно заключать в кавычки, это общее правило.

 

Order, Deny, Allow

Теперь еще раз, но уже более детально, хотелось бы вернуться к директивам управление доступом: Order, Deny, Allow и более детально описать ее синтаксис и логику.

 Директивы Allow, Deny, Order модуля mod_access_compat нежелательны к использованию и считаются устаревшими, хотя и поддерживаются еще в версиях Apache 2.3 и 2.4. В следующих версиях они будут удалены. Вместо них, начиная с версии Apache 2.3, этот функционал реализуется директивой Require, которая позволяет более гибко настраивать доступы, чем устаревшие директивы. Детали смотрите в статье «Контроль доступа клиента в Apache», которая подробно описывает директивы Require, Allow, Deny, Order с примерами их использования.

Директива Order синтаксис: Order [Deny,Allow] или [Allow,Deny]

По умолчанию директива Order имеет порядок: Deny,Allow. Обратите внимание, что Deny,Allow пишутся без пробела.

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

Если Deny,Allow то запрещается доступ со всех IP кроме указанных, если Allow,Deny разрешается доступ со всех IP кроме оговоренных. Далее идут секции описания для доступа и запрета. Ключевое слово all означает со всех IP.

Например, что бы запретить (блокировать) доступ с IP x.x.x.x и x.x.x.xx и разрешить доступ всем остальным необходимо добавить в .htaccess следующий код:

# Разрешить ВСЕМ кроме указанных IP
Order Allow,Deny
Allow from all
Deny from x.x.x.x x.x.x.xx

Обратите внимание что IP записаны через пробел. Можно также указать IP как IP/маска.

Для обратной ситуации, что бы запретить доступ со всех IP кроме x.x.x.x и x.x.x.xx нам необходимо добавить в .htaccess следующий код:

# Запретить ВСЕМ кроме указанных IP
Order Deny,Allow
Deny from all
Allow from x.x.x.x x.x.x.xx

 

Запрет или разрешение можно указывать и на отдельный файл или группы файлов. Например, что бы запретить доступ всех кроме IP x.x.x.x к файлу passwd.html, который расположен в текущей директории.

# Запретить файл passwd.html ВСЕМ кроме указанных IP
<Files «passwd.html»>
  Order Deny,Allow
  Deny from all
  Allow from x.x.x.x
</Files>

 

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

# Запретить файлы *.key ВСЕМ кроме указанных IP
<Files «\.(key)$»>
  Order Deny,Allow
  Deny from all
  Allow from x.x.x.x
</Files>

 

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

Попытка номер раз создать почти идеальный htaccess / Хабр

    - Google выше ранжирует сайты, которые загружаются быстрее.
    - Если на eBay или Amazone увеличить время загрузки страниц на 9% они теряют 1% прибыли.
    - Сделать свой сайт быстрее, чтобы сэкономить на клиентском трафике и на числе обращений к серверу.

.htaccess — наш герой


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

Зачем нам .htaccess ?


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

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

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

А ещё…


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

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

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

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

Опция -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 вы указываете:
Options  -Indexes
Allow from all

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

В файле /site/folder_one/subfolder/.htaccess указываете:
Options  +Indexes
Allow from all

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

2. Немного SEO (куда же без него)
<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteBase /
	RewriteCond %{HTTP_HOST} ^black-web
	RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
	RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
	RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

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

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

В этой части файла мы указали две склейки: мы склеили ваш_сайт и www.ваш_сайт Даже если пользователь наберет ваш сайт без WWW его перебросить 301 редериктом на www.ваш_сайт.
А также мы избавились /index.php в строке запроса. Если пользователь наберет www.ваш_сайт/index.php его перебросит (снова 301 редериктом) на www.ваш_сайт.
Теперь поисковики не будут путаться между www и не будут дублировать главную страницу в результатах индексирования вашего сайта. Гуглим СЕО склейки домена, если не понимаете зачем это нужно.

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

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

DirectoryIndex index.php

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

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

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
AddDefaultCharset UTF-8

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

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

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

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

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

<ifModule mod_php.c>
  php_value	upload_max_filesize	32M
  php_value	post_max_size		10M
  php_value	default_charset utf-8
  php_value	max_execution_time 200
</ifModule>

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

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

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

AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

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

Интересный трюкКстати, вы можете легко написать к примеру вот такую строку:
AddHandler application/x-httpd-php .i

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

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

AddHandler application/x-httpd-php .roosso

и создаю в корне своего сайта файл alex.roosso внутри обычный php код. Это вроде как страница обо мне любимом. И в адресной строке она будет выглядеть как www.black-web.ru/alex.roosso (ссылка рабочая, можете посмотреть что это так).
Второй строкой указано, какие расширения файлов должны выполняться как cgi скрипты.

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

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

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

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

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

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

<ifModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

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

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

<IfModule mod_gzip.c>
	mod_gzip_on         Yes
	mod_gzip_dechunk    Yes
	mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
	mod_gzip_item_include mime		^text\.*
	mod_gzip_item_include mime		^application/x-javascript.*
	mod_gzip_item_exclude mime		^image\.*
	mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

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

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

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

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

<ifModule mod_headers.c>
	#кэшировать html и htm файлы на один день
	<FilesMatch "\.(html|htm)$">
		Header set Cache-Control "max-age=43200"
	</FilesMatch>
	#кэшировать css, javascript и текстовые файлы на одну неделю
	<FilesMatch "\.(js|css|txt)$">
		Header set Cache-Control "max-age=604800"
	</FilesMatch>
	#кэшировать флэш и изображения на месяц
	<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
		Header set Cache-Control "max-age=2592000"
	</FilesMatch>
	#отключить кэширование
	<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
		Header unset Cache-Control
	</FilesMatch>
</IfModule>

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

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

<ifModule mod_expires.c>
	ExpiresActive On
	#по умолчанию кеш в 5 секунд
	ExpiresDefault "access plus 5 seconds"
	#кэшировать флэш и изображения на месяц
	ExpiresByType image/x-icon "access plus 2592000 seconds"
	ExpiresByType image/jpeg "access plus 2592000 seconds"
	ExpiresByType image/png "access plus 2592000 seconds"
	ExpiresByType image/gif "access plus 2592000 seconds"
	ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
	#кэшировать css, javascript и текстовые файлы на одну неделю
	ExpiresByType text/css "access plus 604800 seconds"
	ExpiresByType text/javascript "access plus 604800 seconds"
	ExpiresByType application/javascript "access plus 604800 seconds"
	ExpiresByType application/x-javascript "access plus 604800 seconds"
	#кэшировать html и htm файлы на один день
	ExpiresByType text/html "access plus 43200 seconds"
	#кэшировать xml файлы на десять минут
	ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

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

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

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

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

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

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

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

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

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

Options All -ExecCGI -Indexes -Includes +FollowSymLinks

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^black-web
    RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>

DirectoryIndex index.php

<IfModule mod_setenvif.c>
	SetEnv TZ Europe/Moscow
</IfModule>
ServerSignature Off
#AddDefaultCharset UTF-8
<ifModule mod_php.c>
	php_value	upload_max_filesize	32M
	php_value	post_max_size		10M
	php_value	default_charset utf-8
	php_value	max_execution_time 200
</ifModule>
AddHandler application/x-httpd-php .html
AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
AddType application/x-javascript .js
AddType text/css .css
AddType text/xml .xml
AddType application/octet-stream .doc .mov .avi .pdf .xls 
# ForceType application/x-httpd-php

<ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

<IfModule mod_gzip.c>
    mod_gzip_on         Yes
    mod_gzip_dechunk    Yes
    mod_gzip_item_include file		\.(html?|txt|css|js|php|pl)$
    mod_gzip_item_include mime		^text\.*
    mod_gzip_item_include mime		^application/x-javascript.*
    mod_gzip_item_exclude mime		^image\.*
    mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>

<ifModule mod_headers.c>
    #кэшировать html и htm файлы на один день
    <FilesMatch "\.(html|htm)$">
        Header set Cache-Control "max-age=43200"
    </FilesMatch>
    #кэшировать css, javascript и текстовые файлы на одну неделю
    <FilesMatch "\.(js|css|txt)$">
        Header set Cache-Control "max-age=604800"
    </FilesMatch>
    #кэшировать флэш и изображения на месяц
    <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    #отключить кэширование
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>

<ifModule mod_expires.c>
    ExpiresActive On
    #по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    #кэшировать css, javascript и текстовые файлы на одну неделю
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    #кэшировать html и htm файлы на один день
    ExpiresByType text/html "access plus 43200 seconds"
    #кэшировать xml файлы на десять минут
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

# Bad Rquest
ErrorDocument 400 /400.html
# Authorization Required
ErrorDocument 401 /401.html
# Forbidden
ErrorDocument 403 /403.html
# Not found
ErrorDocument 404 /404.html
# Method Not Allowed
ErrorDocument 405 /405.html
# Request Timed Out
ErrorDocument 408 /408.html
# Request URI Too Long
ErrorDocument 414 /414.html
# Internal Server Error
ErrorDocument 500 /500.html
# Not Implemented
ErrorDocument 501 /501.html
# Bad Gateway 
ErrorDocument 502 /502.html
# Service Unavailable 
ErrorDocument 503 /503.html
# Gateway Timeout
ErrorDocument 504 /504.html

11. Послесловие.

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

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

Разные интересные примеры
# SECURE ____________________
<IfModule mod_ssl.c>
	SSLOptions +StrictRequire
	SSLRequireSSL
	SSLRequire %{HTTP_HOST} eq "black-web.ru"
</IfModule>
<IfModule mod_rewrite.c>
	RewriteCond %{HTTPS} !on
	RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

# HOTLINKING ________________
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_REFERER} !^$
	RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9]  \.)?black-web\.ru [NC]
	RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]
</IfModule>

# REDIRICT __________________
Redirect 301 /index.html /index.php
<IfModule mod_rewrite.c>
	RewriteRule ^news/([^/\.]+)/?$ news.php?news=$1 [L]
	RewriteRule ^(.*\.((js)|(css)))$ plugin/GzipFile.php?file=$1
	RewriteRule \.css$ plugin/GzipFile.php?file=$1
	RewriteRule \.js$ plugin/GzipFile.php?file=$1
</IfModule>
RedirectMatch 301 /blog(.*) http://www.black-web.ru/$1

P.S.

… Для тех у кого всё получилось, идём на www.webpagetest.org мерять красоту до и после.
Andrey_Zentavr
Кому надо берите полностью готовый .htaccess здесь
Данный файл показал самую высокую производительность на тестах.
Также там куча всего закомментировано о чем я не упомянул в статье и что может пригодиться в тех или иных случаях.

Файл htaccess что это, как сделать, пример

Мы решили объединить две темы, «как сделать файл htaccess» и что такое «htaccess», где он располагается, зачем нужен и общие понятия!

Хоть тема htaccess — это не начальный уровень изучения, но мы потихоньку начинаем углубляться и htaccess — это неотъемлемая часть сайта!

  • Что такое htaccess

    Определение что такое htaccess:

    .htaccess (/’eɪtʃtiːæk.sɛs/ от англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

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

  • Где находится файл htaccess

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

    Самый простой пример, как работает htaccess!? Для одной из тем, мы делали доступ в файлам, вот из этой темы и приведем пару примеров!
    1. В первом пункте приведем ссылку на файл, который вы сомжете посмотреть!
    Никакие запреты на него не действуют — см. здесь
    2. Возьмем вторую папку и в нее поместим файл .htaccess с такой записью:
    Которая означает, что все файлы с разрешением dat и cfg в этой папке будут недоступны.

    <Files ~ «\.(dat|cfg)$»>

    deny from all

    </Files>

    Результат:

    См. здесь.

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

    И если посмотреть на реальный файл размещения данного файла. то он будет выглядеть так:

    https://dwweb.ru/403.shtml

  • Как сделать файл htaccess

    Самое простое, как можно создать файл htaccess – это  — заходим в ту папку. В которой нам нужно, чтобы находился файл htaccess – нажимаем ПКМ  — создать – текстовый документ.
    Всё о файле htaccess

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

    Всё о файле htaccess

    Хм… только я хотел его переименовать, а он мне выдает:

    Всё о файле htaccess

    Да… в windows 7 это проходило без проблем…

    Ну, что же, мы пойдем другим путем!

    Если у вас  получилось так же, то  делаем далее:

    Вариант №2.

    Открываем созданный файл в блокноте, либо просто открываем текстовый блокнот и в нём указываем  сохранение нашего файла htaccess в нужную директорию.

    Имя файла — .htaccess

    Тип файла – все файлы.

    Кодировку выбираем — utf-8

    Сохранить.

    Всё о файле htaccess

    Всё – наш файл  .htaccess – создан.

  • Скачать файл htaccess

    Если у вас нет возможности создать файл htaccess, то предлагаю вам скачать мой файл htaccess:

    Почти на каждую строчку надо делать отдельную страницу, поэтому: еще больше о htaccess

    AddDefaultCharset UTF-8 //1

    AddHandler fcgid-script .php .html .htm //2

    ErrorDocument 404 /404.html //3

    ErrorDocument 403 /403.html //4

    RewriteEngine on //5

    RewriteCond %{HTTPS} =off //6

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L] //7

    RewriteCond %{HTTP_HOST} ^www.dwweb.ru$ [NC] //8

    RewriteRule ^(.*)$ https://dwweb.ru/$1 [R=301,L] //9

    RewriteCond %{REQUEST_FILENAME} !-f //10

    RewriteRule .* index.html //11

    Какие темы по данному файлу htaccess — уже написаны!?
    1. Кодировка
    2. Выполнение php на html
    3. При ошибке 404 переадресация на 404.html — для данного файла(здесь единая точка входа) не будет работать, оставил, как пример…
    4. При ошибке 403(запрет доступа) если будет указан существующий файл 403.html , то откроется он, если нет, то выведется системное сообщение… Как в этом примере
    5. RewriteEngine on|off — Включает или выключает работу механизма преобразования
    6. + 7. Переадресация с http на https тема
    8. + 9. Переадресация с www на без www
    10. Если файл существует физически, то отключить перенаправление в htaccess
    11. Все остальное, если дошло до сюда, то будет перенаправляться на index.html — это называется единая точка входа
  • Итого о файле htaccess

    Итого — вывод :

    Можно ли прожить без знаний о файле htaccess — конечно!

    Но когда вы узнаете его возможности, то я вам гарантирую, что вы скажите — как я вообще мог жить без этого!

    P.S.

    Расскажу вам историю из своей жизни!

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

    И когда я узнал о возможностях, которые предоставляет PC, то стал реальным адептом!

    И уж никогда не думал, что буду вам вот здесь, на своем собственном сайте, писать о файле htaccess wall и какие кайфы он вам может дать…

    Пример настройки файла htaccess php


    Примеры записей в htaccess: Индексный файл, Редирект с сохранением рейтинга страницы, Склеивание www и http, Создание ЧПУ или ЧеловекуПонятныхУрлов, Редирект всех файлов папки на один файл, Защита от хотлинков, Определение кодировки и многое другое!

    Указываем индексный файл (который первым открывает при обращении к сайту)

    DirectoryIndex index.php index.html index.shtml

    Можно указать один или несколько файлов

    Редирект htaccess php

    Redirect / http://www.newsite.ru/

    Глобальный редирект(первый /) ВСЁ пересылаем на новый адрес http://www.newsite.ru/
    Redirect /katalog http://www.newsite.ru/newkatalog

    Все обращения к katalog переадресуем на домен newsite.ru в раздел newkatalog

    Редирект с сохранением рейтинга страницы

    Redirect 301 /old/old.php http://www.yoursite.ru/new.php

    old — пример пути старой страницы. new — пример пути новой страницы.

    Редирект пользователя с конкретным ip

    SetEnvIf REMOTE_ADDR 192.100.220.1 REDIR="redir"
    RewriteCond %{REDIR} redir
    RewriteRule ^/$ /out.html

    Конкретного пользователя (надоел он или нужно его переслать на внутренний раздел) с данным ip пересылает на страницу /out.html

    Склеивание www и http htaccess php


    Уже многим SEO (продвижение и оптимизация) известно, что для Поисковых Систем адреса с/без www — это разные адреса и доступность сайта с www отрицательно влияет на индексацию и ранжирование. Поэтому зачастую SEO просят разработчиков склеить сайт без www (чтобы при обращении к сайту с www происходила пересылка на без www, т.е. только http)
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.yoursite\.ru$ [NC]
    RewriteRule ^(.*)$ http://yoursite.ru/$1 [L,R=301]

    Теперь даже если Вы наберёте в адресной строке www.yoursite.ru, то сервер перешлёт Вас на http://yoursite.ru

    Создание ЧПУ или Человеко-Понятных-Урлов htaccess php

    RewriteEngine on
    RewriteRule ^article/([^/\.]+)/?$ article.php?id=$1 [L]

    После добавления данной строки в .htaccess будут доступны два адреса для документа. Например: www.yoursite.ru/article.php?id=1 и www.yoursite.ru/article/1
    RewriteEngine on
    RewriteRule cat/(.*)/(.*)/$ /art.php?$1=$2

    В результате www.yoursite.ru/art.php?type=123 превращается в www.yoursite.ru/cat/type/123/:

    Вот ещё частные варианты:

    RewriteEngine on
    RewriteRule katalog-saitov[/]*$ article.php?id=$1 [L]

    Статья с технически адресом www.yoursite.ru/article.php?id=1 теперь будет доступна со своим понятным человеку названием www.yoursite.ru/katalog-saitov.

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


    Например вы больше не нуждаетесь в разделе сайта articles и хотите перенаправить все запросы к папке /articles на один файл /non-articles.php. Поможет код ниже
    RewriteRule ^articles(.*)$ /non-articles.php [L,R=301]

    Защита от хотлинков htaccess php


    Возможно Вам знаком такой вариант, когда изображения на сервер не закачивают, а используют просто ссылку на сайт. В результате для сайта-владельца изображения создаётся лишняя нагрузка трафик. Используем код ниже
    RewriteEngine On
    #В строке с ?yoursite\.ru/ меняете данную конструкцию на УРЛ Вашего сайта
    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yoursite\.ru/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    #Меняем /images/exit.jpg на другое изображение. Можно неприличное
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/exit.jpg [L]

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


    Дополнительные варианты самых популярных кодировок: UTF-8, Windows-1251, KOI8-R. В примерах рассмотрим самую распространённую UTF-8
    AddDefaultCharset UTF8 # кодировка файлов, в которой по умолчанию отдаёт документы
    AddCharset UTF8 .html # Пример: обрабатывает в данной кодировке html
    AddCharset UTF8 * # Пример: обрабатывает в данной кодировке Все файлы

    # Обработка в данной кодировке определённого файла
    <Files "index.html">
    AddCharset UTF8 .html
    </Files> 

    CharsetDisable On # Отменяем перекодировку Сервером загруженных файлов
    CharsetDefault UTF8 # Кодировка, передаваемая Сервером Браузеру по умолчанию
    CharsetSourceEnc UTF8 # Принудительная Перекодировка ВСЕХ загруженных на сервер файлов

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


    Если Вам хочется видеть после неправильной ссылки другую страницу, сделанную, например, самим собой, то указываем в .htaccess следующий код (ну и соответственно делаем там свои страницы):
    # ошибка сервера, неверный запрос
    ErrorDocument 400 /error/badrequest.html

    # неавторизован
    ErrorDocument 401 /error/authreqd.html

    # вход запрещён
    ErrorDocument 403 /error/forbid.html

    # самая распространённая - страница не найдена
    ErrorDocument 404 /error/notfound.html

    # внутренняя ошибка сервера
    ErrorDocument 500 /error/serverr.html


    Видов ошибок на самом деле больше. Можете создать дополнительно и для них записи, опираясь на весь список

    Запрещаем доступ


    Скорее всего Вы столкнётесь с тем, что часть файлов и директорий надо будет закрыть от общего доступа.

    Закрываем от всех

    deny from all

    Закрываем конкретный файл от всех

    <Files admin.php>
    deny from all
    </Files>

    Разрешаем доступ только с одного ip

    order deny,allow
    deny from all
    allow from 192.111.37.125

    Запрещаем доступ с конкретных ip

    <Limit GET POST PUT>
    order allow,deny
    allow from all
    deny from 192.111.35.122
    deny from 192.111.37.171
    </LIMIT>

    Убираем из Урла (URL) расширение файла

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.php
    # php можно заменить другим расширением. Например: html, htm, shtml, asp

    Запрещаем отображать содержимое директории, если нет индексного файла


    Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.
    Options -Indexes

    Идеальный .htaccess (htaccess rewriterule примеры)

    Мы уже писали о файле .HTACCESS, в статье «Настройка .htaccess. Полное руководство«, но тема болезненная для многих оказалась и непонятная.

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

    Итак: htaccess rewriterule примеры, описания.

    htaccess как создать? — читаем, копируем код, правим под себя.

    htaccess где находится? — в идеале — в каждой папке на сайте (сервере) свой. Но в большинстве случаев — это не нужно, достаточно одного в корневой директории.

    htaccess кодировка — в идеале — UTF-8 (все-таки это служебный файл сервера) htaccess utf 8 — верное решение.

    htaccess rewriterule примеры:

    # REWRITE
     <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteBase /
     RewriteCond %{HTTP_HOST} ^serg-casper
     RewriteRule (.*) http://www.info-business.pro/$1 [R=301,L]
     RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
     RewriteRule ^index.php$ http://www.info-business.pro/ [R=301,L]
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule ^(.*)$ index.php [L,QSA]
     </IfModule>

    301 редирект htaccess или  htaccess редирект на другой домен (htaccess redirect):

    # REDIRICT __________________
     # 301 простой редерикт
     # Redirect 301 /index.html /index.php
     # http://www.info-business.pro - URL На который мы перенаправляем запросы
     # Полезно в случаях когда надо полностью перенаправлять людей с одного сайта на другой.
     # Redirect / http://www.info-business.pro

    htaccess запретить доступ к папке: 

    нам поможет все тот-же «htaccess deny from all»

    <Directory /home/папка>
     Options -Indexes
     order deny,allow
     deny from all
     </Directory>

    htaccess доступ по ip:

    Если необходимо запретить доступ с определенного IP-адреса — это будет выглядеть так:

    Order allow,deny
     allow from all
     Deny from 198.69.132.24

    Закрыть доступ ВСЕМ, кроме определенных IP:

    Order deny,allow
     deny from all
     # Список IP через пробел, с которых доступ разрешен
     Allow from 194.111.70.48 194.78.47.128

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

    # Этот .htaccess поможет сделать ваш сайт быстрей.
    # Пользуйтесь на здоровье себе и вашему сайту.
    # Сайт: http://www.info-business.pro
    
    # !!!!!!!! При использовании фрагментов кода меняем http://www.info-business.pro на свой адрес сайта, 
    # !!!!!!!! а ^serg-casper аналогично на свой домен.
    
    Options All -ExecCGI -Indexes -Includes +FollowSymLinks
    #Options -MultiViews
    
    # REWRITE ___________________
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^serg-casper
    RewriteRule (.*) http://www.info-business.pro/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
    RewriteRule ^index.php$ http://www.info-business.pro/ [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,QSA]
    </IfModule>
    
    # REDIRICT __________________
    # 301 простой редерикт
    # Redirect 301 /index.html /index.php
    # http://www.info-business.pro - URL На который мы перенаправляем запросы
    # Полезно в случаях когда надо полностью перенаправлять людей с одного сайта на другой.
    # Redirect / http://www.info-business.pro
    
    <IfModule mod_rewrite.c>
    # RewriteRule ^news/([^/.]+)/?$ news.php?news=$1 [L]
    # RewriteRule ^(.*.((js)|(css)))$ plugin/GzipFile.php?file=$1 [QSA,NE,L]
    # RewriteRule .css$ plugin/GzipFile.php?file=$1
    # RewriteRule .js$ plugin/GzipFile.php?file=$1
    # Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
    # Символ ^ обозначает начало строки.
    # Символ $ обозначает конец строки.
    # Символ . обозначает любой символ.
    # Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B".
    # Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
    # Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
    # Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
    # Квадратные скобки [] используются для перечисления допустимых символов.
    # Квадратные скобки [^] используются для перечисления недоступных символов.
    # Символ  ставится перед спецсимволами, если они нужны в своем первозданном виде.
    # Все, что расположено после символа '#', считается комментарием.
    </IfModule>
    
    # RedirectMatch 301 /blog(.*) http://www.info-business.pro/blog$1
    # SECURE ____________________
    <IfModule mod_ssl.c>
    # SSLOptions +StrictRequire
    # SSLRequireSSL
    # SSLRequire %{HTTP_HOST} eq "iblog.su"
    </IfModule>
    
    <IfModule mod_rewrite.c>
    # RewriteCond %{HTTPS} !on
    # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    # RewriteCond %{SERVER_PORT} !^443
    # RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    # $n - (0 <= n <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteRule (единственной, следующей сразу за текущим набором директив RewriteCond).
    # %n - (1 <= n <= 9) предоставляющие доступ к сгруппированным частям (в круглых скобках!) шаблона из соответствующей директивы RewriteCond в текущем наборе условий.
    # %{NAME_OF_VARIABLE} - где NAME_OF_VARIABLE может быть одной из ниже приведенных переменных
    # HTTP_USER_AGENT Содержит информацию о типе и версии браузера и операционной системы посетителя.
    # HTTP_REFERER Приводится адрес страницы, с которой посетитель пришёл на данную страницу.
    # HTTP_COOKIE Список COOKIE, передаваемых браузером
    # HTTP_FORWARDED Страница непосредственно, с которой перешел пользователь
    # HTTP_HOST Адрес сервера, например, roocms.com
    # HTTP_ACCEPT Описываются предпочтения клиента относительно типа документа.
    # REMOTE_ADDR IP-адрес посетителя.
    # REMOTE_HOST адрес посетителя в нормальной форме — например, 23.beeline.ru
    # REMOTE_IDENT Имя удаленного пользователя. Имеет формат имя.хост, например, starter.www.rutt.net.ru
    # REMOTE_USER Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: starter
    # REQUEST_METHOD Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
    # SCRIPT_FILENAME Полный путь к веб-странице на сервере.
    # PATH_INFO Содержит в себе все, что передавалось в скрипт.
    # QUERY_STRING Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
    # AUTH_TYPE Используется для идентификации пользователя
    # DOCUMENT_ROOT Cодержит путь к корневой директории сервера.
    # SERVER_ADMIN Почтовый адрес владельца сервера, указанный при установке.
    # SERVER_NAME Адрес сервера, типа idea.roocms.com
    # 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 Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированы модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.
    # Внимание!
    # Данная конфигурация файла может порождать побочные запросы к индексному файлу вашего сайта
    # в случаях когда в вашей верстке или скриптах содержаться ошибки или ссылки на несуществующие файлы или папки.
    # Подобные обращения в большом числе могут вызвать нагрузку на ваш веб сервер. 1 ошибка = 1 лишнему обращению.
    # Будьте внимательны. Перед использованием данного файла проверьте файлы access.log и error.log сгенерированные вашим Apache сервером.
    # Если вы обнуружите ошибки в ваших скриптах, исправьте их перед использованием на "боевом сервере"
    # Блокировать любой запрос, пытающийся испортить base64_encode через URL
    RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]
    # Блокировать любой запрос, содержащий тег <script> в URL
    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
    # Блокировать любой запрос, пытающийся установить значение глобальных переменных PHP через URL
    RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
    # Блокировать любой запрос, пытающийся изменить _REQUEST переменную через URL
    RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
    # Перенаправлять заблокированные запросы
    RewriteRule .* index.php [F]
    # и запрошенный путь не соответствует пути к физическому файлу
    RewriteCond %{REQUEST_FILENAME} !-f
    # и запрошенный путь не соответствует пути к физической папке
    RewriteCond %{REQUEST_FILENAME} !-d
    # то перенаправить запрос на скрипт index.php
    RewriteRule .* index.php [L]
    RedirectMatch 301 regexp /error410.html
    </IfModule>
    
    # HOTLINKING ________________
    <IfModule mod_rewrite.c>
    # RewriteCond %{HTTP_REFERER} !^$
    # RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] .)?ibog.su [NC]
    # RewriteRule .(gif|jpe?g|png)$ - [F,NC,L]
    </IfModule>
    
    # HANDLER ___________________
    AddHandler application/x-httpd-php .html
    AddHandler cgi-script .pl .py .jsp .asp .htm .shtml .sh .cgi
    AddType application/x-javascript .js
    AddType application/json .json
    AddType text/css .css
    AddType text/xml .xml
    # Audio
    AddType audio/ogg .oga .ogg
    AddType audio/mp4 .m4a .f4a .f4b
    # Video
    AddType video/ogg .ogv
    AddType video/mp4 .mp4 .m4v .f4v .f4p
    AddType video/webm .webm
    AddType video/x-flv .flv
    # SVG
    AddType image/svg+xml .svg .svgz
    AddEncoding gzip .svgz
    # Webfonts
    AddType application/vnd.ms-fontobject .eot
    AddType application/x-font-ttf .ttf .ttc
    AddType font/opentype .otf
    AddType application/x-font-woff .woff
    # Assorted types
    AddType image/x-icon .ico
    AddType image/webp .webp
    AddType text/cache-manifest .appcache .manifest
    AddType text/x-component .htc
    AddType application/xml .rss .atom .xml .rdf
    AddType application/x-chrome-extension .crx
    AddType application/x-opera-extension .oex
    AddType application/x-xpinstall .xpi
    AddType application/octet-stream .safariextz
    AddType application/x-web-app-manifest+json .webapp
    AddType text/x-vcard .vcf
    AddType application/x-shockwave-flash .swf
    AddType text/vtt .vtt
    AddType application/octet-stream .doc .mov .avi .pdf .xls .rar .zip .mp3 .wmv .ppt .tar .gz .docx .xlsx
    # ForceType application/x-httpd-php
    # INDEX FILE ________________
    DirectoryIndex index.php
    # GZIP ______________________
    <IfModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
    mod_gzip_item_include mime ^text.*
    mod_gzip_item_include mime ^application/x-javascript.*
    mod_gzip_item_include mime ^application/x-font-woff.*
    mod_gzip_item_exclude mime ^image.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
    </IfModule>
    <ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript application/x-font-woff image/jpg image/jpeg
    </ifModule>
    # PHP _______________________
    php_value	upload_max_filesize 32M
    php_value	post_max_size 10M
    php_value	default_charset utf-8
    php_flag	magic_quotes_gpc Off
    php_flag	register_globals Off
    php_flag	short_open_tag On
    # php_value max_input_time 200
    # php_value session.name sid
    php_value	error_reporting 0
    php_flag	display_startup_errors off
    php_flag	display_errors off
    php_flag	html_errors off
    php_flag	log_errors off
    php_flag	ignore_repeated_errors on
    php_flag	ignore_repeated_source on
    # php_value log_errors_max_len 1024
    php_flag	report_memleaks off
    php_flag	track_errors off
    php_value	docref_root 0
    php_value	docref_ext 0
    # php_value error_log /tmp/php_error.log
    # php_value error_prepend_string " "
    # php_value error_append_string " "
    <Files php_error.log>
    Order allow,deny
    Deny from all
    Satisfy All
    </Files>
    <IfModule php5_module>
    # php_value session.cookie_httponly true
    </IfModule>
    # XDEBUG ___________________
    # Настройки для расширения XDebug
    #php_flag xdebug.profiler_enable On
    #php_flag xdebug.extended_info On
    #php_flag xdebug.remote_enable off
    #php_flag xdebug.auto_trace off
    # OTHER SETTINGS ____________
    <IfModule mod_setenvif.c>
    SetEnv TZ Europe/Moscow
    </IfModule>
    ServerSignature Off
    # AddDefaultCharset UTF-8
    # AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
    # CACHE AND Headers _________
    <ifModule mod_headers.c>
    <FilesMatch ".(html|htm)$">
    Header set Cache-Control "max-age=43200"
    </FilesMatch>
    <FilesMatch ".(js|css|txt)$">
    Header set Cache-Control "max-age=604800"
    </FilesMatch>
    <FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png|jpe?g)$">
    Header set Cache-Control "max-age=2592000"
    </FilesMatch>
    <FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$">
    Header unset Cache-Control
    </FilesMatch>
    <FilesMatch ".(ttf|ttc|otf|eot|woff|font.css)$">
    Header set Access-Control-Allow-Origin "*"
    </FilesMatch>
    <FilesMatch ".(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
    Header unset X-UA-Compatible
    </FilesMatch>
    </IfModule>
    <ifModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 5 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType video/ogg "access plus 1 month"
    ExpiresByType audio/ogg "access plus 1 month"
    ExpiresByType video/mp4 "access plus 1 month"
    ExpiresByType video/webm "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 604800 seconds"
    ExpiresByType application/javascript "access plus 604800 seconds"
    ExpiresByType application/x-javascript "access plus 604800 seconds"
    ExpiresByType text/html "access plus 43200 seconds"
    ExpiresByType application/xhtml+xml "access plus 600 seconds"
    ExpiresByType text/xml "access plus 600 seconds"
    ExpiresByType application/xml "access plus 600 seconds"
    ExpiresByType application/json "access plus 600 seconds"
    ExpiresByType application/rss+xml "access plus 1 hour"
    ExpiresByType application/atom+xml "access plus 1 hour"
    ExpiresByType text/x-component "access plus 1 week"
    ExpiresByType application/x-font-ttf "access plus 1 month"
    ExpiresByType font/opentype "access plus 1 month"
    ExpiresByType application/x-font-woff "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
    </ifModule>
    # Bad Rquest
    ErrorDocument 400 /index.php?page=e400
    # Authorization Required
    ErrorDocument 401 /index.php?page=e401
    # Forbidden
    ErrorDocument 403 /index.php?page=e403
    # Not found
    ErrorDocument 404 /index.php?page=e404
    # Method Not Allowed
    ErrorDocument 405 /index.php?page=e405
    # Request Timed Out
    ErrorDocument 408 /index.php?page=e408
    # Request URI Too Long
    ErrorDocument 414 /index.php?page=notfound
    # Internal Server Erro
    ErrorDocument 500 /index.php?page=notfound
    # Not Implemented
    ErrorDocument 501 /index.php?page=notfound
    # Bad Gateway
    ErrorDocument 502 /index.php?page=notfound
    # Service Unavailable
    ErrorDocument 503 /index.php?page=notfound
    # Gateway Timeout
    ErrorDocument 504 /index.php?page=notfound
    

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

    P.S. Автор кода: alex Roosso, спасибо ему. >> http://habrahabr.ru/post/154643/

    популярных примеров .htaccess — поддержка KeyCDN

    Обновлено 4 октября 2018 г.

    Popular .htaccess Examples

    Что такое .htaccess ?

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

    Некоторые платформы CMS, такие как WordPress и Drupal, также поставляются с файлами .htaccess , чтобы вы могли указать определенные конфигурации, которые применимы только к этому сайту . Файл .htaccess можно использовать для различных целей, включая:

    • Выполнение перенаправления
    • Настройка страниц ошибок
    • Ограничение пользователей на основе IP
    • Добавление типов MIME
    • Настройка заголовков HTTP
    • Защита паролем определенных папок

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

    .htaccess examples

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

    1. Перенаправить пользователей на определенную страницу ошибки

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

      ErrorDocument 403 /forbidden.html
    ErrorDocument 404 /notfound.html
    ErrorDocument 500 /servererror.html
      

    2. Добавление настраиваемого заголовка и значения

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

      Набор заголовков X-Custom "Custom Value"
      

    В приведенном выше примере текст X-Custom соответствует заголовку HTTP, который будет возвращен в ответе HTTP, а текст Custom Value соответствует значению для этого конкретного заголовка.

    3. Блокировка пользователей на основе IP

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

      разрешить, запретить
    запретить 255.x.x.x
    запретить 123.x.x.x
    разрешить от всех
      

    4. Блокировка рефереров (защита от горячих ссылок)

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

      RewriteCond% {HTTP_REFERER} нежелательный домен \ .com [NC, OR]
    RewriteCond% {HTTP_REFERER} unwanteddomain2 \ .com
    RewriteRule. * - [F]
      

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

    5. Добавление типов MIME

    Типы MIME определяют, к чему относится конкретное расширение файла.Следовательно, иногда требуется установить это в вашем файле .htaccess , чтобы сообщить веб-серверу, на какой тип файла вы ссылаетесь. Чтобы увидеть полный список типов MIME, посетите Список типов MIME.

      AddType image / gif .gif .GIF
      

    6. Использование кэширования браузера

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

      ## СРОК КЭШЕНИЯ ##
    
        ExpiresActive On
        ExpiresByType image / jpg «доступ на 1 год»
        ExpiresByType image / jpeg "доступ на 1 год"
        ExpiresByType image / gif "доступ на 1 год"
        ExpiresByType image / png "доступ на 1 год"
        ExpiresByType text / css "доступ на 1 месяц"
        ExpiresByType text / html "доступ на 1 месяц"
        Приложение ExpiresByType / pdf "доступ на 1 месяц"
        ExpiresByType text / x-javascript "доступ на 1 месяц"
        Приложение ExpiresByType / x-shockwave-flash "доступ 1 месяц"
        ExpiresByType изображение / значок x "доступ на 1 год"
        ExpiresDefault "доступ 1 месяц"
    
    ## СРОК КЭШЕНИЯ ##
      

    7.Включение Gzip

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

      
        AddOutputFilterByType DEFLATE application / javascript
        AddOutputFilterByType DEFLATE application / rss + xml
        AddOutputFilterByType DEFLATE application / vnd.ms-fontobject
        AddOutputFilterByType DEFLATE application / x-font
        AddOutputFilterByType DEFLATE application / x-font-opentype
        AddOutputFilterByType DEFLATE application / x-font-otf
        AddOutputFilterByType DEFLATE application / x-font-truetype
        AddOutputFilterByType DEFLATE application / x-font-ttf
        AddOutputFilterByType DEFLATE application / x-javascript
        AddOutputFilterByType DEFLATE application / xhtml + xml
        AddOutputFilterByType DEFLATE application / xml
        AddOutputFilterByType DEFLATE font / opentype
        AddOutputFilterByType DEFLATE font / otf
        AddOutputFilterByType DEFLATE font / ttf
        AddOutputFilterByType DEFLATE image / svg + xml
        AddOutputFilterByType DEFLATE изображение / значок x
        AddOutputFilterByType DEFLATE text / css
        AddOutputFilterByType DEFLATE текст / javascript
        AddOutputFilterByType DEFLATE текст / простой
        AddOutputFilterByType DEFLATE текст / xml
    

    8.(HEAD | OPTIONS | POST | PUT) RewriteRule. * — [F]

    9. Выполнение перенаправления 301

    Если вам нужно выполнить перенаправление 301 для страницы, которая переместилась, этого легко добиться с помощью

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

      Редирект 301 https://yourwebsite.com/old-page https://yourwebsite.com/new-page
      

    10. Включение CORS

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

      
        
            Набор заголовков Access-Control-Allow-Origin "*"
        

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

    .

    Учебник по окончательному .htaccess со 100 примерами

    htaccess — это очень древний файл конфигурации, который управляет веб-сервером, на котором запущен ваш сайт, и является одним из самых мощных файлов конфигурации, с которыми вы когда-либо сталкивались. . htaccess имеет возможность контролировать доступ / настройки для протокола передачи гипертекста ( HTTP ) с использованием защиты паролем, 301 редиректа, перезаписи и многого другого. Это потому, что этот файл конфигурации был написан в первые дни Интернета (HTTP) для одного из первых веб-серверов! Со временем эти веб-серверы (настроенные с помощью htaccess) стали известны как всемирная паутина и в конечном итоге превратились в Интернет, который мы используем сегодня..htaccess file Это не введение в htaccess . Это руководство по использованию htaccess в полной мере. Первоначально (2003 г.) это руководство было известно в определенных хакерских кругах и скрытых уголках сети как ultimate htaccess из-за мощных уловок и советов по обходу безопасности htaccess на веб-хосте, а также потому, что многие примеры htaccess были довольно впечатляющими. тогда в той группе.

    Htaccess — Развитый

    Протокол передачи гипертекста (HTTP) был инициирован в ЦЕРН в Женеве (Швейцария), где он возник (вместе с языком представления HTML) из необходимости простого обмена научной информацией в компьютерной сети.Первая общедоступная реализация HTTP допускала только текстовую информацию и почти мгновенно стала заменой службы GOPHER. Одним из первых текстовых браузеров был LYNX, который существует до сих пор; Графический HTTP-клиент появился очень быстро под названием NCSA Mosaic. Mosaic был популярным браузером еще в 1994 году. Вскоре возникла потребность в более богатых мультимедийных возможностях, и язык разметки обеспечил поддержку растущего множества типов мультимедиа.

    AskApache Htaccess Journey

    Пропустить — все еще редактируется Я обнаружил эти советы и рекомендации в основном, когда работал специалистом по проникновению сетевой безопасности, нанятым для поиска дыр в безопасности в средах веб-хостинга.Общий хостинг — это наиболее распространенная и дешевая форма веб-хостинга, при которой несколько клиентов размещаются на одной машине и «совместно используют» ресурсы (CPU / RAM / SPACE). Машины сконфигурированы ТОЛЬКО для работы с HTTP и FTP. Никаких оболочек или каких-либо интерактивных входов в систему, нет ssh, только доступ по FTP. Именно тогда я начал очень подробно изучать файлы htaccess и узнал о невероятных неиспользованных возможностях htaccess. 99% лучших администраторов Apache в мире не часто используют .htaccess, если ВООБЩЕ.Гораздо проще, безопаснее и быстрее настроить Apache, используя вместо этого файл httpd.conf. Однако этот файл почти никогда не читается на общих хостах, и я никогда не видел его доступным для записи. Таким образом, единственным выходом для тех, кто пользуется виртуальным хостингом, был и остается файл .htaccess и, черт возьми, оптоволокно … он почти такой же мощный, как сам httpd.conf! Почти весь код .htaccess работает в файле httpd.conf, но не весь код httpd.conf работает в файлах .htaccess, около 50%. Так что все лучшие админы и программисты Apache никогда не использовали.htaccess файлы. У тех, у кого есть доступ к httpd.conf, не было стимула использовать htaccess, и разрыв увеличивался. Часто можно увидеть «компьютерных гуру» на форумах и в списках рассылки, выступающих против любого использования и пользователей файлов .htaccess, самодовольно объявляющих об хорошо известных проблемах с файлами .htaccess по сравнению с httpd.conf — интересно, знают ли эти «гуру» историю файла htaccess, как и в самых ранних версиях HTTP-сервера — HTTPd NCSA, который, кстати, стал известен как Apache HTTP. Таким образом, можно легко сказать, что файлы htaccess появились раньше самого Apache.Как только я обнаружил, что файлы .htaccess могут помочь мне в подсчете и использовании уязвимостей безопасности даже на больших общих хостах, я сосредоточил все свои исследования на файлах .htaccess, то есть я читал почтенный исходный код HTTP Apache 24/7! Я скомпилировал каждую выпущенную версию веб-сервера Apache, даже NCSA, и сосредоточился на перечислении самых мощных директив htaccess. Хорошие времена! Поскольку мое внимание было сосредоточено на уязвимостях протокола / файла / сети, а не на веб-разработке, я создал хороший инструментарий трюков htaccess, чтобы делать необычные вещи.Когда я перешел на webdev в 2005 году, я начал использовать htaccess для веб-сайтов, а не для исследований. Я задокументировал большинство своих фаворитов и переписал руководство по htaccess для веб-разработчиков. После большого поощрения на различных форумах и в сети я решил начать блог, чтобы делиться своей работой со всеми, AskApache.com был зарегистрирован, я опубликовал свое руководство, и оно было быстро скопировано и разнесено по сети. Информация — это свобода, а свобода — это информация, поэтому этот блог имеет для вас наименее ограничительные авторские права.Не стесняйтесь изменять, копировать, переиздавать, продавать или использовать что-либо на этом сайте;)

    Что такое .htaccess

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

    htaccess | WordPress.org

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

    WordPress использует этот файл для управления тем, как Apache обслуживает файлы из своего корневого каталога и его подкаталогов. В частности, WP изменяет этот файл, чтобы иметь возможность обрабатывать довольно постоянные ссылки.

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

     # НАЧАТЬ WordPress
    
    RewriteEngine On
    RewriteBase /
    RewriteRule ^ index \.- [L]
    RewriteRule. index.php [L]
    # КОНЕЦ WordPress
     

    Наверх ↑

    Наверх ↑

    Опции № Опции

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

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

    Нет

    Все опции выключены.

    Все

    Все опции, кроме MultiView.Это значение по умолчанию.

    ExecCGI

    Разрешено выполнение сценариев CGI с использованием mod_cgi.

    FollowSymLinks

    Сервер будет переходить по символическим ссылкам в этом каталоге.

    Включает

    Разрешены включения на стороне сервера, предоставленные mod_include.

    Включает NOEXEC

    Включения на стороне сервера разрешены, но #exec cmd и #exec cgi отключены.

    Индексы

    URL соответствует каталогу, а не DirectoryIndex — форматированному списку каталога.

    Мультипросмотр

    Согласованное содержимое «MultiViews» разрешено с использованием mod_negotiation.

    SymLinksIfOwnerMatch

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

    Это отключит все параметры, а затем включит только FollowSymLinks, что необходимо для mod_rewrite.

     Опции Нет
    Параметры FollowSymLinks
     

    Наверх ↑

    DirectoryIndex # DirectoryIndex

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

    Можно указать несколько URL-адресов, и в этом случае сервер вернет первый найденный.

     DirectoryIndex index.php index.html /index.php
     

    Наверх ↑

    DefaultLanguage # DefaultLanguage

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

     DefaultLanguage ru
     

    Наверх ↑

    Кодировка по умолчанию # Кодировка по умолчанию

    Установите кодировку символов по умолчанию, отправляемую в заголовке HTTP. См .: Установка информации о кодировке в .htaccess

     AddDefaultCharset UTF-8
     

    Установить кодировку для определенных файлов

     AddType 'text / html; charset = UTF-8 '.html
     

    Набор для конкретных файлов

     AddCharset UTF-8 .html
    
     

    Наверх ↑

    ServerSignature # ServerSignature

    Директива ServerSignature позволяет настроить завершающую строку нижнего колонтитула в документах, созданных сервером.При желании добавьте строку, содержащую версию сервера и имя виртуального хоста, на страницы, созданные сервером (внутренние документы об ошибках, списки каталогов FTP, вывод mod_status и mod_info и т. Д., Но не документы, созданные CGI или пользовательские документы об ошибках).

    по телефону

    добавляет строку с номером версии сервера и ServerName обслуживающего виртуального хоста

    Off

    подавляет строку нижнего колонтитула

    Электронная почта

    создает ссылку mailto: на ServerAdmin указанного документа

    .
     SetEnv SERVER_ADMIN admin @ site.com
    Сервер Подпись Электронная почта
     

    Наверх ↑

    Принудительная загрузка файлов # Принудительная загрузка файлов

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

     Приложение AddType / поток октетов .avi .mpg .mov .pdf .xls .mp4
     

    Наверх ↑

    Сжатие HTTP # Сжатие HTTP

    Директива AddOutputFilter сопоставляет расширение расширения имени файла с фильтрами, которые будут обрабатывать ответы от сервера перед их отправкой клиенту.Mozilla / 4 \ .0 [678] no-gzip BrowserMatch \ bMSIE! No-gzip! Gzip-only-text / html

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

     SetOutputFilter DEFLATE
    
     

    Наверх ↑

    Директива Header позволяет отправлять заголовки HTTP для каждого запроса или только для определенных файлов. Вы можете просматривать HTTP-заголовки сайтов с помощью Firebug, Chrome Dev Tools, Wireshark или онлайн-инструмента.

     Заголовочный набор X-Pingback "http://www.askapache.com/xmlrpc.php"
    Набор заголовков Content-Language "en-US"
     

    Наверх ↑

    Это отключит заголовки HTTP, всегда используя . будет очень стараться удалить их.

     Заголовок не установлен Pragma
    Заголовок всегда отключен WP-Super-Cache
    Заголовок всегда отключен X-Pingback
     

    Наверх ↑

    Защита паролем логина # Защита паролем логина

    Это очень полезно для защиты файла wp-login.php . Вы можете использовать этот генератор htpasswd.

    Базовая аутентификация

     AuthType Basic
    AuthName "Защищено паролем"
    AuthUserFile /full/path/to/.htpasswd
    Требовать действительного пользователя
    Удовлетворить все
    
     

    Дайджест-аутентификация

     Дайджест AuthType
    AuthName "Защищено паролем"
    AuthDigestDomain / wp-login.php https://www.askapache.com/wp-login.php
    AuthUserFile /full/path/to/.htpasswd
    Требовать действительного пользователя
    Удовлетворить все
    
     

    Наверх ↑

    Требуется особый IP # Требуется особый IP

    Это способ разрешить доступ только определенным IP-адресам.

     ErrorDocument 401 по умолчанию
    ErrorDocument 403 по умолчанию
    
    
    Заказать отказать, разрешить
    Запретить всем
    Разрешить от 198.101.159.98 localhost
    
     

    Наверх ↑

    Защита конфиденциальных файлов # Защита конфиденциальных файлов

    Это запрещает любой веб-доступ к вашему файлу wp-config, error_logs, php.ini и htaccess / htpasswds.

     Заказать отклонить, разрешить
    Запретить всем
    
     

    Наверх ↑

    Требовать SSL # Требовать SSL

    Это приведет к принудительному использованию SSL и потребует точного имени хоста, иначе будет выполнено перенаправление на версию SSL. Полезно в файле /wp-admin/.htaccess .

     SSLOptions + StrictRequire
    SSLRequireSSL
    SSLRequire% {HTTP_HOST} eq "www.wordpress.com"
    ErrorDocument 403 https://www.wordpress.com
     

    Наверх ↑

    Наверх ↑

    .

    Список примеров .htaccess — htaccess

    Пример файла .htaccess из htaccess Google Group

     # ================================================ ============================= #
    # ОСНОВНЫЕ НАСТРОЙКИ И ОПЦИИ
    # =================================================== ============================ #
    # Параметры: ALL, FollowSymLinks, Includes, IncludesNOEXEC, SymLinksIfOwnerMatch
    ###########
    
    ### ОСНОВНЫЕ ПО УМОЛЧАНИЮ ###
    Опции + ExecCGI -индексы
    DirectoryIndex индекс.html index.htm index.php
    DefaultLanguage en-US
    AddDefaultCharset UTF-8
    ServerSignature Off
    
    ### ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ ###
    #SetEnv PHPRC / webroot / includes
    #SetEnv TZ America / Indianapolis
    #SetEnv SERVER_ADMIN [email protected]
    
    ### ТИПЫ MIME ###
    AddType video / x-flv .flv
    Приложение AddType / x-shockwave-flash .swf
    AddType изображение / значок x .ico
    
    ### ПРИНУДИТЕЛЬНО ЗАГРУЗИТЬ ФАЙЛ ВМЕСТО ПОЯВЛЕНИЯ В БРАУЗЕРЕ ###
    # -> http: // www.htaccesselite.com/htaccess/addtype-addhandler-action-vf6.html
    #AddType application / octet-stream .mov .mp3 .zip
    
    ### ОШИБКИ ###
    ErrorDocument 404 «Ошибка 404»
    ErrorDocument 400 «ошибка 400»
    ErrorDocument 401 «Ошибка 401»
    ErrorDocument 403 «Ошибка 403»
    ErrorDocument 405 «Ошибка 405»
    ErrorDocument 406 «Ошибка 406»
    ErrorDocument 409 «Ошибка 409»
    ErrorDocument 413 «Ошибка 413»
    ErrorDocument 414 «Ошибка 414»
    ErrorDocument 500 «Ошибка 500»
    ErrorDocument 501 «Ошибка 501»
    
    # =================================================== ============================ #
    # SCRIPTING, ACTION, ADDHANDLER
    # =================================================== ============================ #
    # Обработчики должны быть встроены, включены в модуль или добавлены с помощью директивы Action
    # default-handler: default, обрабатывает статический контент (ядро)
    # send-as-is: отправить файл с заголовками HTTP (mod_asis)
    # cgi-script: рассматривать файл как сценарий CGI (mod_cgi)
    # imap-file: Анализировать как файл правил карты изображений (mod_imap)
    # server-info: Получить информацию о конфигурации сервера (mod_info)
    # server-status: получить отчет о состоянии сервера (mod_status)
    # type-map: файл карты типов для согласования содержимого (mod_negotiation)
    # fastcgi-script: рассматривать файл как сценарий fastcgi (mod_fastcgi)
    ###########
    
    ### PARSE AS CGI ###
    #AddHandler cgi-script.cgi .pl .spl
    
    ### ЗАПУСТИТЬ PHP КАК МОДУЛЬ APACHE ###
    #AddHandler application / x-httpd-php .php .htm
    
    ### ЗАПУСТИТЬ PHP как CGI ###
    #AddHandler php-cgi .php .htm
    
    ### CGI PHP WRAPPER ДЛЯ ПОЛЬЗОВАТЕЛЬСКОГО PHP.INI ###
    #AddHandler phpini-cgi .php .htm
    # Действие phpini-cgi /cgi-bin/php5-custom-ini.cgi
    
    ### БЫСТРАЯ НАСТРОЙКА CGI С ПОМОЩЬЮ PHP-CGI WRAPPER ДЛЯ ПОЛЬЗОВАТЕЛЬСКОГО PHP.INI ###
    #AddHandler fastcgi-script .fcgi
    #AddHandler php-cgi .php .htm
    # Действие php-cgi / cgi-bin / php5-wrapper.fcgi
    
    ### ПОЛЬЗОВАТЕЛЬСКАЯ БИНАРНАЯ НАСТРОЙКА PHP CGI ###
    #AddHandler php-cgi .php .htm
    # Действие php-cgi /cgi-bin/php.cgi
    
    ### СПЕЦИАЛЬНЫЕ ФАЙЛЫ ПРОЦЕССА С CGI-SCRIPT ###
    # Action image / gif /cgi-bin/img-create.cgi
    
    ### СОЗДАТЬ ПОЛЬЗОВАТЕЛЬСКИЙ ОБРАБОТЧИК ДЛЯ ОПРЕДЕЛЕННЫХ РАСШИРЕНИЙ ФАЙЛОВ ###
    #AddHandler custom-processor .ssp
    # Действие custom-processor /cgi-bin/myprocessor.cgi
    
    # =================================================== ============================ #
    # ЗАГОЛОВКИ, КЭШЕР И ОПТИМИЗАЦИЯ
    # =================================================== ============================ #
    # -> http: // www.htaccesselite.com/htaccess/cache-control-http-headers-vt65.html
    # 300 5 M
    # 2700 45 M
    # 3600 1 H
    # 54000 15 H
    # 86400 1 D
    # 518400 6 D
    # 604800 1 Вт
    # 1814400 3 Вт
    # 2419200 1 М
    # 26611200 11 M
    # 29030400 1 Y (бессрочно)
    ###########
    
    #### Кеширование заголовка ####
    # -> http://www.htaccesselite.com/htaccess/caching-using-header-vt2.html
    # 
    # Заголовочный набор Cache-Control "max-age = 2592000"
    # 
    # 
    # Заголовочный набор Cache-Control "max-age = 604800"
    # 
    # 
    # Заголовочный набор Cache-Control "max-age = 600"
    # 
    # 
    # Заголовок не установлен Cache-Control
    # 
    
    ### АЛЬТЕРНАТИВНЫЙ СРОК КЭШИНГА ###
    # -> htaccesselite.com/d/use-htaccess-to-speed-up-your-site-discussion-vt67.html
    #ExpiresActive On
    #ExpiresDefault A604800
    #ExpiresByType image / x-icon A2592000
    #ExpiresByType application / x-javascript A2592000
    #ExpiresByType text / css A2592000
    #ExpiresByType text / html A300
    # 
    # ExpiresActive Off
    # 
    
    ### ЗАМЕНА META HTTP-EQUIV ###
    # 
    # Заголовок установлен для imagetoolbar "no"
    # 
    
    # =================================================== ============================ #
    # ПЕРЕПИСАТЬ И ПЕРЕПИСАТЬ
    # =================================================== ============================ #
    # СПОСОБЫ ЗАПРОСА: GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND,
    # PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK
    ###########
    
    ### ПЕРЕПИСАТЬ ПО УМОЛЧАНИЮ ###
    #RewriteEngine On
    #RewriteBase /
    
    ### ТРЕБУЕТСЯ ПОДДОМЕН ###
    #RewriteCond% {HTTP_HOST}! ^ $
    #RewriteCond% {HTTP_HOST}! ^ Subdomain \.. * $ /error.php [L]
    
    ### ПРАВИЛА SEO ###
    #Redirect 301 /2006/oldfile.html http: //subdomain.domain.tld/newfile.html
    #RedirectMatch 301 /o/(.*)$ http: //subdomain.domain.tld/s/dl/$1
    
    # =================================================== ============================ #
    # АУТЕНТИФИКАЦИЯ И БЕЗОПАСНОСТЬ
    # =================================================== ============================ #
    # http://www.htaccesselite.com/htaccess/basic-authentication-example-vt17.html
    #
    # Требовать (пользователь | группа | допустимый пользователь) (имя пользователя | имя группы)
    ###########
    
    ### ОСНОВНАЯ ЗАЩИТА ПАРОЛЕМ ###
    #AuthType basic
    #AuthName "prompt"
    #AuthUserFile /.$ "хорошо
    # 
    # Order Deny, Allow
    # Запретить всем
    # Разрешить от env = good
    # ErrorDocument 403 http://www.google.com/intl/en_ALL/images/logo.gif
    # ErrorDocument 403 /images/you_bad_hotlinker.gif
    # 
    
    ### ОГРАНИЧЕНИЕ РАЗМЕРА ФАЙЛА ЗАГРУЗКИ ДЛЯ ЗАЩИТЫ ОТ АТАКИ DOS ###
    #LimitRequestBody 10240000 #bytes, 0-2147483647 (2 ГБ)
    
    # =================================================== ============================ #
    # БЕЗОПАСНОСТЬ SSL
    # =================================================== ============================ #
    # -> http: // htaccesselite.com / d / перенаправление-все-или-часть-сервера-на-SSL-VT61
    ###########
    
    ### САМЫЙ БЕЗОПАСНЫЙ СПОСОБ ТРЕБУЕТСЯ SSL ###
    # -> http://www.askapache.com/htaccess/apache-ssl-in-htaccess-examples.html
    #SSLOptions + StrictRequire
    #SSLRequireSSL
    #SSLRequire% {HTTP_HOST} eq "domain.tld"
    #ErrorDocument 403 https: //domain.tld
    
    # =================================================== ============================ #
    #          САЙТ В СТАДИИ СТРОИТЕЛЬСТВА
    # =================================================== ============================ #
    # Вот отличный htaccess, который можно использовать при разработке сайта
    ###########
    
    ### КОМБИНИРОВАННЫЙ КОД HTACCESS РАЗРАБОТЧИКА - ИСПОЛЬЗУЙТЕ ЭТО ###
    # 
    # Заголовочный набор Cache-Control "max-age = 5"
    # 
    #AuthType basic
    #AuthName "Ой! Временно в разработке ..."
    #AuthUserFile /.htpasswd
    #AuthGroupFile / dev / null
    # Запрашивать запрос действительного пользователя # пароль для всех остальных
    #Order Deny, Allow
    # Отказываться от всех
    # Разрешить от 192.168.64.5 # Ваш IP-адрес разработчиков
    # Разрешить от w3.org # css / xhtml check jigsaw.w3.org/css-validator/
    # Разрешить с googlebot.com # Разрешить Google сканировать ваши страницы
    #Satisfy Any # пароль не требуется, если host / ip разрешены
    
    ### НЕ НУЖНО ОЧИЩАТЬ КЭШ ИЛИ ПЕРЕЗАГРУЗИТЬ, ЧТОБЫ УВИДЕТЬ ИЗМЕНЕНИЯ
    #ExpiresDefault A5 # При использовании mod_expires
    # 
    # Заголовочный набор Cache-Control "max-age = 5"
    # 
    
    ### РАЗРЕШИТЬ ДОСТУП С ПАРОЛЕМ ИЛИ БЕЗ ПАРОЛЯ ДЛЯ КОНКРЕТНЫХ IP / ХОСТОВ ###
    #AuthType basic
    #AuthName "Ой! Временно в разработке... "
    #AuthUserFile /.htpasswd
    #AuthGroupFile / dev / null
    # Запрашивать запрос действительного пользователя # пароль для всех остальных
    #Order Deny, Allow
    # Отказываться от всех
    # Разрешить от 192.168.64.5 # Ваш IP-адрес разработчиков
    # Разрешить с w3.org # css / xhtml проверить jigsaw.w3.org/css-validator/
    # Разрешить с googlebot.com # Разрешить Google сканировать ваши страницы
    #Satisfy Any # пароль не требуется, если host / ip разрешены
    
    ################################################ ############################
    #
    # Авторские права (c) 2007 AskApache.com. Все права защищены.
    #
    # Последний: http://z.askapache.com/p/htaccess.txt
    # В сети: http://www.askapache.com/htaccess/ultimate-htaccess-file-sample.html
    ############################################### ########################### 
    1. Для веб-мастеров
      • Когда сайт находится в стадии разработки
      • Перенаправить всех на другой сайт, кроме 1 IP
      • Перенаправить всех на другой сайт, кроме 1 IP
      • Перенаправить всех, кроме вас, на другую страницу вашего сервера.
      • Установить часовой пояс сервера
      • Установите адрес электронной почты администратора сервера
      • Выключите сервер Подпись
      • Принудительно загружать файлы, не отображаются в браузере
      • Обработка всех файлов .gif с помощью сценария cgi
      • Запросы процесса с определенными методами запроса
      • Сделать любой файл определенного типа
      • Используйте директиву IfModule для надежного кода
    2. Пользовательские заголовки HTTP
      • Предотвратить кеширование 100%
      • Удалить IE imagetoolbar без метатега
      • Добавьте заголовок конфиденциальности (P3P) на свой сайт
      • Добавьте языковой заголовок «en-US» и «UTF-8» без метатегов!
        • Использование AddType
        • Использование директивы о файлах
        • Использование директивы FilesMatch
    3. советов по htaccess PHP
      • Когда php работает как CGI
      • Используйте собственный файл php.ini с mod_php или php в качестве cgi
        • Когда php запускается как модуль Apache (mod_php)
        • При запуске cgi php с оболочкой (FastCGI)
    4. SEO редиректов для поисковых систем без mod_rewrite
      • Для одиночного перемещаемого файла
      • Перенаправить главную страницу в новый домен
      • Для нескольких файлов, таких как блог / this.php? Gh
      • Перенаправить весь сайт в один файл
    5. mod_rewrite советы и хитрости
      • В основном.Примеры перезаписи htaccess должны начинаться с:
      • Проверить ключ в QUERY_STRING
      • Удаляет QUERY_STRING из URL-адреса
      • Исправление для бесконечных циклов
      • Требуется www
      • Не требовать www
      • Перенаправление файлов .php в файлы .html (оптимизировано для SEO)
      • Перенаправить файлы .html в реальные файлы .php (оптимизировано для SEO)
      • блокировать доступ к файлам в определенные часы дня
      • Заменить подчеркивание на дефис для SEO URL
      • Требовать www без жесткого кодирования
      • Не требовать поддомена
      • Не требовать поддомена
      • Перенаправление лент WordPress на Feedburner
      • Разрешить только методы запроса GET и PUT
      • Предотвратить хотлинкинг изображений / файлов файлов и кражу полосы пропускания
      • Остановить предварительную загрузку браузера
      • Сделайте подсказку по предварительной загрузке для Firefox.
    6. Ускорьте свой сайт с помощью кеширования и управления кешем
      • Шпаргалка по времени htaccess
      • Кеширование с использованием обоих mod_expires + mod_headers
      • Кеширование с помощью mod_headers
      • Кеширование с помощью mod_expires
    7. Аутентификация Apache в htaccess
      • Требовать пароль только для 1 файла
      • Защита нескольких файлов:
      • Использование директивы Apache Allow в htaccess
        • пара сеть / маска сети
        • IP-адрес
        • Более 1 IP-адреса
        • Частичные IP-адреса, первые 1-3 байта IP-адреса, для ограничения подсети
        • сеть / nnn Спецификация CIDR
        • IPv6-адресов и подсетей
        • Запретить поддомены
        • Разрешить с IP без запроса пароля, а также разрешить с любого адреса с запросом пароля
        • Скелет.htaccess, чтобы начать с
    8. Безопасность с Apache htaccess
      • CHMOD ваши файлы
      • Запретить доступ к файлам .htaccess и .htpasswd
      • Показать исходный код вместо выполнения
      • Защита каталогов: убрать возможность выполнения сценариев
      • ErrorDocuments
        • Общие коды состояния и реализации ошибок в документе
        • При использовании CGI PHP, пример ошибки php 404
        • Пример страницы ошибки 404 в perl cgi
        • ErrorDocuments, созданные Apache
    9. Пример использования SSL в htaccess
      • Перенаправить запросы без https на https-сервер
      • Перепишите non-https на HTTPS без mod_ssl!
        • На основе переменной HTTPS (наилучшее)
        • На основе SERVER_PORT
        • Перенаправить все, что обслуживается на порт 80, на HTTPS URI
        • Перенаправить определенные URL-адреса в безопасную версию с помощью метода SSL SEO
        • Проверить, установлена ​​ли переменная среды HTTPS.
        • Перепишите на SSL или NON-SSL, используя относительный URL!
    10. Apache Variable fun (mod_env)
      • Использование переменных среды, зависящих от посетителя:
      • Переменные среды специального назначения
      • SetEnvIf
        • SetEnvIfNoCase, пример
        • SetEnvIfNoCase, пример 2

    Нравится:

    Нравится Загрузка…

    Связанные

    .
  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *