Директивы .htaccess: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Метки: с мобильного устройства из мобильной версии
Метки: с мобильного устройства из мобильной версии
Строка 92: Строка 92:
=== Обработка ошибок ===
=== Обработка ошибок ===


<syntaxhighlight lang="apache">
#<syntaxhighlight lang="apache">
ErrorDocument 401 /401.html
#ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
#ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
#ErrorDocument 404 /404.html
#ErrorDocument 500 /500.html
#ErrorDocument 500 /500.html
</syntaxhighlight>
</syntaxhighlight>

Версия от 19:01, 15 июня 2020

Перенаправление (редирект)

На другой адрес

    Redirect /index.php http://example.com/index.php

При запросе определённых страниц

    Redirect /data http://www.example.com/data 
    Redirect /forum http://forum.example.com

По маске имени файла

Следующие строки определяют, что все запросы, кроме запросов к файлам с расширениями .gif и .jpg, будут перенаправлены на файл index.php:

    RewriteEngine On
    RewriteRule !.(gif|jpg)$ index.php

Работает только при наличии mod_rewrite.

По IP-адресам

Если посетитель имеет IP-адрес 192.168.11.1, то ему будет открыта страница data.html:

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

Если посетители имеют IP-адреса 192.168.11.1 и 192.168.11.2, то им будет открыт адрес http://example.com:

    RewriteEngine on
    RewriteCond %{REMOTE_ADDR} (192.168.11.1|192.168.11.2)
    RewriteRule .* http://example.com [R=301,L]

Работает только при наличии mod_rewrite.

В зависимости от реферера (ссылающейся страницы)

    RewriteCond %{HTTP_REFERER} http://example.com
    RewriteRule ^/original.html$ /another.html [L]

В данном случае все посетители пришедшие с сайта example.com вместо файла original.html получат файл another.html.

Удаление префикса «www.» из адреса

Перенаправление с http://www.mydomain.com на http://mydomain.com:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www.mydomain.com$ [NC]
    RewriteRule (.*) http://mydomain.com/$1 [R=301]

Работает только при наличии mod_rewrite.

Индексные страницы

Переопределение индексного файла

    DirectoryIndex index.html index.php index.shtml

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

    Options -Indexes

Типы файлов

Изменение обработчика по типу файла

Пример переопределения HTML-файлов для обработки их с помощью PHP:

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

Обработка ошибок

  1.     #ErrorDocument 401 /401.html 
        #ErrorDocument 403 /403.html 
        #ErrorDocument 404 /404.html 
        #ErrorDocument 500 /500.html
    

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

Кодировка

Отдаваемых файлов

    AddDefaultCharset windows-1251

Загружаемых файлов

    CharsetSourceEnc windows-1251

Отдаваемых файлов конкретного типа

    AddCharset windows-1251 .js

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

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

Запрет доступа к файлам

Запрет доступа ко всем файлам и каталогам в текущем каталоге:

    Deny from all


Запрет доступа к определённому файлу:

    <Files config.php>
        Deny from all 
    </Files>


Запрет доступа к файлам по маске:

    <Files *.inc>
        Deny from all
    </Files>

Спецсимволы для определения маски:

  • ? — любой одиночный символ
  • * — любая последовательность символов, исключая символ / (слэш)

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

    <Files ~ "\.(inc|conf|cfg)$">
        Deny from all
    </Files>

Определение доступа по IP

    Order deny,allow
    Deny from all
    Allow from 192.168.11.1

Строка order deny, allow определяет, в каком порядке следует выполнять директивы. Сначала выполняется директива запрета доступа, а затем разрешается доступ только для IP-адреса 192.168.11.1.

    Order Allow,Deny
    Allow from all
    Deny from 192.140.170.219
    Deny from 10.10.220.201

В этом примере наоборот запрещается доступ с определённых IP-адресов.

Закрытие каталогов паролем

    AuthName "Auth message"
    AuthType Basic
    require <valid-user | user <username1> [username2] ... [usernameN]>
    AuthUserFile "/full/path/to/.htpasswd"

Пароли хранятся в файле .htpasswd.