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

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
м Откат правок 217.118.81.236 (обс.) к версии Apple-Coffee Well
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 3: Строка 3:
==== На другой адрес ====
==== На другой адрес ====


<source lang="apache">
<syntaxhighlight lang="apache">
Redirect /index.php http://example.com/index.php
Redirect /index.php http://example.com/index.php
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
Redirect /data http://www.example.com/data
Redirect /data http://www.example.com/data
Redirect /forum http://forum.example.com
Redirect /forum http://forum.example.com
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
RewriteEngine On
RewriteEngine On
RewriteRule !.(gif|jpg)$ index.php
RewriteRule !.(gif|jpg)$ index.php
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
SetEnvIf REMOTE_ADDR 192.168.11.1 REDIR="redir"
SetEnvIf REMOTE_ADDR 192.168.11.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteCond %{REDIR} redir
RewriteRule ^/$ /data.html
RewriteRule ^/$ /data.html
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
RewriteEngine on
RewriteEngine on
RewriteCond %{REMOTE_ADDR} (192.168.11.1|192.168.11.2)
RewriteCond %{REMOTE_ADDR} (192.168.11.1|192.168.11.2)
RewriteRule .* http://example.com [R=301,L]
RewriteRule .* http://example.com [R=301,L]
</syntaxhighlight>
</source>


Работает только при наличии '''mod_rewrite'''.
Работает только при наличии '''mod_rewrite'''.
Строка 47: Строка 47:
==== В зависимости от [[w:реферер|реферера]] (ссылающейся страницы) ====
==== В зависимости от [[w:реферер|реферера]] (ссылающейся страницы) ====


<source lang="apache">
<syntaxhighlight lang="apache">
RewriteCond %{HTTP_REFERER} http://example.com
RewriteCond %{HTTP_REFERER} http://example.com
RewriteRule ^/original.html$ /another.html [L]
RewriteRule ^/original.html$ /another.html [L]
</syntaxhighlight>
</source>


В данном случае все посетители пришедшие с сайта example.com вместо файла original.html получат файл another.html.
В данном случае все посетители пришедшие с сайта example.com вместо файла original.html получат файл another.html.
Строка 58: Строка 58:
Перенаправление с <code><nowiki>http://www.mydomain.com</nowiki></code> на <code><nowiki>http://mydomain.com</nowiki></code>:
Перенаправление с <code><nowiki>http://www.mydomain.com</nowiki></code> на <code><nowiki>http://mydomain.com</nowiki></code>:


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


Работает только при наличии '''mod_rewrite'''.
Работает только при наличии '''mod_rewrite'''.
Строка 70: Строка 70:
==== Переопределение индексного файла ====
==== Переопределение индексного файла ====


<source lang="apache">
<syntaxhighlight lang="apache">
DirectoryIndex index.html index.php index.shtml
DirectoryIndex index.html index.php index.shtml
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
Options -Indexes
Options -Indexes
</syntaxhighlight>
</source>


=== Типы файлов ===
=== Типы файлов ===
Строка 85: Строка 85:
Пример переопределения [[w:HTML|HTML]]-файлов для обработки их с помощью [[w:PHP|PHP]]:
Пример переопределения [[w:HTML|HTML]]-файлов для обработки их с помощью [[w:PHP|PHP]]:


<source lang="apache">
<syntaxhighlight lang="apache">
RemoveHandler .html .htm
RemoveHandler .html .htm
AddType application/x-httpd-php .php .htm .html .phtml
AddType application/x-httpd-php .php .htm .html .phtml
</syntaxhighlight>
</source>


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


<source 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>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
AddDefaultCharset windows-1251
AddDefaultCharset windows-1251
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
CharsetSourceEnc windows-1251
CharsetSourceEnc windows-1251
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
AddCharset windows-1251 .js
AddCharset windows-1251 .js
</syntaxhighlight>
</source>


Вместо '''.js''' можно указать несколько типов файлов, разделяя их пробелами.
Вместо '''.js''' можно указать несколько типов файлов, разделяя их пробелами.
Строка 127: Строка 127:
Запрет доступа ко всем файлам и каталогам в текущем каталоге:
Запрет доступа ко всем файлам и каталогам в текущем каталоге:


<source lang="apache">
<syntaxhighlight lang="apache">
Deny from all
Deny from all
</syntaxhighlight>
</source>




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


<source lang="apache">
<syntaxhighlight lang="apache">
<Files config.php>
<Files config.php>
Deny from all
Deny from all
</Files>
</Files>
</syntaxhighlight>
</source>




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


<source lang="apache">
<syntaxhighlight lang="apache">
<Files *.inc>
<Files *.inc>
Deny from all
Deny from all
</Files>
</Files>
</syntaxhighlight>
</source>


Спецсимволы для определения маски:
Спецсимволы для определения маски:
Строка 155: Строка 155:
Запрет доступа к файлам по [[w:регулярные выражения|регулярному выражению]]:
Запрет доступа к файлам по [[w:регулярные выражения|регулярному выражению]]:


<source lang="apache">
<syntaxhighlight lang="apache">
<Files ~ "\.(inc|conf|cfg)$">
<Files ~ "\.(inc|conf|cfg)$">
Deny from all
Deny from all
</Files>
</Files>
</syntaxhighlight>
</source>


==== Определение доступа по [[w:IP-адрес|IP]] ====
==== Определение доступа по [[w:IP-адрес|IP]] ====
<source lang="apache">
<syntaxhighlight lang="apache">
Order deny,allow
Order deny,allow
Deny from all
Deny from all
Allow from 192.168.11.1
Allow from 192.168.11.1
</syntaxhighlight>
</source>


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


<source lang="apache">
<syntaxhighlight lang="apache">
Order Allow,Deny
Order Allow,Deny
Allow from all
Allow from all
Deny from 192.140.170.219
Deny from 192.140.170.219
Deny from 10.10.220.201
Deny from 10.10.220.201
</syntaxhighlight>
</source>


В этом примере наоборот запрещается доступ с определённых IP-адресов.
В этом примере наоборот запрещается доступ с определённых IP-адресов.
Строка 181: Строка 181:
==== Закрытие каталогов [[w:пароль|паролем]] ====
==== Закрытие каталогов [[w:пароль|паролем]] ====


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


Пароли хранятся в файле [[w:.htpasswd|.htpasswd]].
Пароли хранятся в файле [[w:.htpasswd|.htpasswd]].

Версия от 16:06, 16 апреля 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

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

    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.