Показаны сообщения с ярлыком htaccess. Показать все сообщения
Показаны сообщения с ярлыком htaccess. Показать все сообщения

четверг, 29 мая 2014 г.

How to block shells in 777 directories

Add this to your httpd.conf file. Change directory name.
<Directory "/www/site.ru/images">

php_flag engine off
RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp

</Directory>

php_flag engine off - disable php

 RemoveHandler - disable processing of files with given extensions. This directive removes any handler associations for files with the given extensions. Consequently, .htaccess files in subdirectories can undo any associations inherited from parent directories or the server configuration files.

AddType - AddType добавит Content-Type в HTTP-заголовок - это нужно, чтобы браузер показывал исходный код PHP как текст, а не пытался сохранить.
AddType "text/html" 

AllowOverride

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

None. Сервер игнорирует файлы .htaccess в этом каталоге. Если вы не намерены использовать для каталога файлы .htaccess, вам следует явно установить эту опцию, поскольку это повысит производительность сервера.

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

Options. Разрешает использование директивы Options (см. ниже раздел ?Options¦),

Filelnfo. Разрешает использование в файлах .htaccess директив Add-Туре и AddEncoding (см. раздел ?srm/conf: карта ресурсов сервера¦, содержащий полное описание).

AuthConfig. Разрешает использование директив AuthName, AuthType, AuthUserFile и AuthGroupFile, необходимых для защиты каталогов паролями.

Limit. Разрешает использование директивы секционирования <Limit>. См. раздел, посвященный директиве <Limit>, в котором приведено подробное описание.

Options

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

None. В указанном каталоге не разрешается использование каких-либо функций.

All В указанном каталоге разрешается использование всех возможностей (принимается по умолчанию).

FollowSymLinks. Сервер следует символьным ссылкам, имеющимся в указанном каталоге.

SymLinksIfOwnerMatch. Сервер следует символьным ссылкам, только если каталог назначения принадлежит тому же пользователю, что и сама ссылка.

ExecCGI. В указанном каталоге разрешается выполнение сценариев CGI.

Includes. В указанном каталоге разрешено использование серверных включений. Использование серверных включений требует, чтобы сервер производил синтаксический разбор всех HTML-файлов перед отправкой их клиентам. Нечего и говорить, что это крайне нагружает сервер, поэтому мы бы порекомендовали отключить эту опцию. Если вам необходимы серверные включения, разрешите их на уровне отдельных файлов при помощи директивы AddType, как это описано в разделе ?srm/conf: карта ресурсов сервера¦

Indexes. Сервер разрешает пользователям заказывать индексную страницу указанного каталога. Выключение этой опции запрещает передачу только списка файлов в каталоге, но не файла index.html.

IncludesNoExec. Эта директива разрешает использование в указанном каталоге серверных включений, но запрещает запуск из них внешних программ.

 

Order, Deny, Allow

Директива Order управляет состоянием доступа по умолчанию и порядок, в котором доступ разрешается или запрещается. Order может принимать 3 значения:
  • Allow,Deny - доступ по умолчанию запрещен, кроме хостов, указанных в строке после Allow from.
  • Deny,Allow - доступ по умолчанию разрешен, кроме хостов, указанных в строке после Deny from
  • Mutual-failure - разрешен доступ только для тех хостов, которые присутствуют в Allow и отсутствуют в Deny.
Следующий пример отличается только значением Order: "Deny,Allow" вместо "Allow,Deny". Но логика предоставления прав доступа Apache изменится, на первый взгляд, весьма не ожиданно. Доступ будет открыт абсолютно ко всем доменам, даже к поддомену foo.apache.org, явно запрещенному строкой "Deny from foo.apache.org". Это происходит потому, что порядок строк "Allow from ..." и "Deny from ..." не имеет значения. Порядок установки правил задается директивой Order, изходя из чего Апач сначала запрещает доступ к foo.apache.org, а потом перезаписывает это правило, изходя из директивы "Allow from apache.org".

Order Deny,Allow
Allow from apache.org
Deny from foo.apache.org

суббота, 7 сентября 2013 г.

FilesMatch

<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>
<FilesMatch "config.php|function.php|include.php">
  Order allow,deny
  Deny from all
  Allow from 173.11.227.73 108.222.245.179
</FilesMatch> 

<FilesMatch "\.(gif|jpeg|jpg|png)$"> 
<FilesMatch "\.php$">
<FilesMatch "index[0-9]?\.php$">
   
If you'd like to deny all but a few files, this would read as
Order deny,allow
Deny from all
<FilesMatch "index.php|index.html">
Allow from all
</FilesMatch> 

<Limit GET POST> 
Order Allow,Deny 
Deny from 100.99.69.1, 100.99.69.2
Allow from All 
</Limit>

понедельник, 22 июля 2013 г.

Порядок выполнения деректив mod_rewrite

  1. RewriteRule
  2. RewriteCond (хоть он и идет первым в конфигах, но выполняется после RewriteRul)
  3. RewriteBase (в конце обработки RewriteBase дописывает к результату указанный путь)
При составлении более-менее сложных конфигураций mod_rewrite важно понимать, что изменение запроса не заканчивается на последнем RewriteRule. После того, как сработало последнее правило RewriteRule и был добавлен RewriteBase, mod_rewrite смотрит, изменился запрос или нет. Если запрос изменился, его обработка начинается заново с начала файла .htaccess.

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

— Постойте, но ведь есть флаг [L], который останавливает обработку запроса mod_rewrite'ом!

Не совсем так. Флаг [L] останавливает текущую итерацию обработки запроса. Однако если запрос был изменен теми RewriteRule, которые все-таки успели отработать, Apache запустит цикл обработки запроса заново с первого RewriteRule.

http://habrahabr.ru/company/sprinthost/blog/129560/

htaccess 6 - RewriteBase

После того как все преобразования произведены и выполнено последнее RewriteRule, вступает в силу RewriteBase.

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

    images/logo.gif — относительный.
    /images/logo.gif — абсолютный (в начале слеш).
    http://example.com/images/logo.gif — самый абсолютный из всех.

Что будет, если не указать RewriteBase? По умолчанию Apache делает его равным абсолютному пути на файловой системе до .htaccess (например, /var/www/example.com/templates/).

htaccess 5 - RewriteMap

Директива RewriteMap - ассоциативный массив преобразований, который может быть использован в правилах преобразований.
http://httpd.apache.org/docs/current/rewrite/rewritemap.html

Cache control with apache

mod_expires - модуль Apache, позволяющий указывать HTTP-заголовки Expires, давая указания кешировать статические файлы в пользовательском браузере. В результате работы модуля имеем снижения трафика и увеличение скорости отображения страниц. По умолчанию, Apache собирается уже с поддержкой mod_expires. Мы можем проверить его наличие командой:
httpd -M | grep mod_expires

Расположение файла httpd.conf:
httpd -V | grep ROOT

# кеширование в браузере на стороне пользователя
<IfModule mod_expires.c>

#Подключаем модуль
ExpiresActive On

ExpiresDefault "access 7 days"
#по умолчанию кеш в 5 секунд
    ExpiresDefault "access plus 5 seconds"
    #кэшировать флэш и изображения на месяц
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/jpg "access plus 1 year"
    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/x-javascript "access 1 year"
    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>
Короткая запись:
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
</filesmatch>
</ifmodule>


Запретить любое кеширование:

<IfModule mod_headers.c>Header set Cache-Control: "no-cache, pre-check=0, post-check=0, max-age=0"
Header set Expires "Thu, 15 Apr 1999 20:00:00 GMT"
Header set Pragma: no-cache
Header unset ETag
Header unset Last-Modified
FileETag None</IfModule>
 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault "now"
</IfModule>  

mod_headers - this module provides directives to control and modify HTTP request and response headers. Headers can be merged, replaced or removed

http://httpd.apache.org/docs/2.2/mod/mod_headers.html
<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> 
Pragma: no-cache - из старой версии протокола HTTP/1.0. Практически все браузеры и прокси игнорируют.  

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

FileETag MTime Size

Syntax: FileETag component ...

INode
    The file's i-node number will be included in the calculation
MTime
    The date and time the file was last modified will be included
Size
    The number of bytes in the file will be included
All
    All available fields will be used. This is equivalent to:

    FileETag INode MTime Size
None
    If a document is file-based, no ETag field will be included in the response

Директивы, допускаемые в запросах
Директива Описание
no-cache Сервер не должен использовать кэшированный ответ.
no-store Ответ на этот запрос не должен кэшироваться.
max-age=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд; клиент не требует его валидации.
max-stale=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд.
min-fresh=delta-seconds Клиент допускает кэшированный ответ, если он будет оставаться действительным не менее delta-seconds секунд от момента запроса.
no-transform К запрашиваемому документу не должны применяться преобразования.
only-if-cached Допускается только кэшированный ответ. Если подходящего ответа нет в кэше, то не нужна ни валидация старого ответа, ни получение нового.


Директивы, допускаемые в ответах
Директива Описание
public Ответ разрешается сохранять в любом кэше.
private Ответ разрешается сохранять только в закрытом кэше (т.е. только для этого пользователя).
no-cache Кэшированный ответ не должен использоваться без предварительной его валидации.
no-store Ответ не разрешается сохранять в кэше.
no-transform К передаваемому документу не должны применяться преобразования.
must-revalidate Если кэшированный ответ устарел, то к нему должна применяться процедура валидации. Эта директива отменяет действие max-stale.
max-age=delta-seconds Клиент допускает кэшированный ответ, если его возраст не превышает delta-seconds секунд; клиент не требует его валидации.
s-maxage=delta-seconds То же, что max-age, но действует только на открытые кэши.
proxy-revalidate То же, что must-revalidate, но действует только на прокси-сервера.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.5.1
http://www.mnot.net/cache_docs/#PRAGMA
http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP
http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%B0-%D1%82%D0%B5%D0%B3%D0%B8#.D0.9Ce.D1.82a-.D1.82e.D0.B3_Pragma 

воскресенье, 21 июля 2013 г.

Prevent hotlinking with .htaccess

RewriteEngine on
//Disallow blank referrers, but I recommend to not use it.
RewriteCond %{HTTP_REFERER} !^$ [NC,OR]
//Sites allowed to link your images
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC,OR]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain2.com [NC]
//Change ‘http://hpmouse.googlepages.com/hotlink.gif‘ to a image you’ve set, and whenever image hotlinking is detected,
RewriteRule \.(jpg|jpeg|png|gif)$ http://hpmouse.googlepages.com/hotlink.gif [NC,R,L]

суббота, 20 июля 2013 г.

Sign your hotlinks - Watermark on the Fly in PHP

Yon need PHP 4+ and GD 2.0+ on your server
<?php  

header('content-type: image/jpeg');  

$watermark = imagecreatefrompng('watermark.png');  

$watermark_width = imagesx($watermark);  

$watermark_height = imagesy($watermark);  

$image = imagecreatetruecolor($watermark_width, $watermark_height);  

$image = imagecreatefromjpeg($_GET['src']);  

$size = getimagesize($_GET['src']);  

$dest_x = $size[0] - $watermark_width - 5;  

$dest_y = $size[1] - $watermark_height - 5;  

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);  

imagejpeg($image);  

imagedestroy($image);  

imagedestroy($watermark);  

?>

“RewriteCond $1 ^.*.(jpg|jpeg|gif|png|bmp)$”

Or with no rewritecond the rewriterule should be:

“RewriteRule ^.*.(jpg|jpeg|gif|png|bmp)$ /scripts/watermark.php?src=%{REQUEST_URI} [L]”

Шпаргалки cheat sheats Mod Rewrite .htaccess

Mod Rewrite .htaccess

пятница, 19 июля 2013 г.

Secure your site with htaccess

Некоторые правила в файле .htaccess могут значительно уменьшить количество "опасных" запросов на вашем сайте и отразить атаки скрипткиддисов.

#Base rules of anti mysqli and another
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|’|"|;|\?|\*).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(&#x22;|&#x27;|&#x3C;|&#x3E;|&#x5C;|&#x7B;|&#x7C;).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} .*=http.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=https.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=ftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*=sftp.*(\:|%3A) [NC,OR]
RewriteCond %{QUERY_STRING} .*jos_.* [NC,OR]
RewriteCond %{QUERY_STRING} .*users\+where\+gid.* [NC,OR]
RewriteCond %{QUERY_STRING} .*proc/self/environ.* [NC,OR]
RewriteCond %{QUERY_STRING} .*union\+select.* [NC,OR]
RewriteCond %{QUERY_STRING} .*perl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*curl\+.* [NC,OR]
RewriteCond %{QUERY_STRING} .*SQL.* [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [NC]
RewriteRule .* - [F] 


#Remote File Inclusion Protection
RewriteCond %{QUERY_STRING} ^.*=(ht)|(f)+(tp)+(://|s://)+.*(\?\?)+ [NC]
RewriteRule .* - [F]

#XSS Protection
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [NC,OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ http://frost.de/trap.php [R,L]
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC]
RewriteRule .* - [F]

##Some else
RewriteCond %{QUERY_STRING} etc/passwd [NC,OR]
RewriteCond %{QUERY_STRING} echo.*kae  [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini  [NC,OR]
RewriteCond %{QUERY_STRING} \=\\%27$   [NC,OR]
RewriteCond %{QUERY_STRING} \=\\\'$    [NC,OR]
RewriteCond %{QUERY_STRING} \.\./      [NC]
RewriteRule .* - [F]
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo|config\.xml)
 
 
## Disallow access to htaccess.txt, configuration.php, configuration.php-dist and php.ini
RewriteRule ^(htaccess\.txt|configuration\.php(-dist)?|php\.ini)$ - [F]

## Disallow PHP Easter Eggs (can be used in fingerprinting attacks to determine
## your PHP version). See http://www.0php.com/php_easter_egg.php and
## http://osvdb.org/12184 for more information
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC]
RewriteRule .* - [F]


.htaccess for Joomla:
http://docs.joomla.org/Htaccess_examples_%28security%29

четверг, 18 июля 2013 г.

htaccess 4 RewriteRule

RewriteRule определяет правила для механизма преобразований.

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

В RewriteRule передается не ссылка, а путь до запрошенного файла.

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

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

    Запрос: http://example.com/templates/silver/images/logo.gif
    DocumentRoot: /var/www/example.com
    Путь до файла: /var/www/example.com/templates/silver/images/logo.gif
    .htaccess находится в: /var/www/example.com/templates/.htaccess
    В первый RewriteRule будет передано: silver/images/logo.gif
    Обратите внимание: «templates/» тоже отрезалось.


Путь до .htaccess отрезается вместе со слешем. Из этого есть следствие: строка, которая изначально передается на обработку RewriteRule никогда не начинается со "/".

RewriteRule Шаблон Подстановка

Шаблон это perl совместимое регулярное выражение которое применяется к текущему URL.
  1. Взяли строку.   
  2. Сравнили с регулярным выражением в первом аргументе.
  3. Если есть совпадение — заменили всю строку на значение второго аргумента.
  4. Передали строку следующему RewriteRule.
RewriteRule красивый url настоящий url [флаги]

Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:

RewriteRule ^([\w\d\-]+).html$ show.php?id=$1 [L,NC,QSA] 


RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

Этот URL не обязательно совпадает с первоначально запрошенным URL, потому что любое количество правил возможно уже были применены к нему и соответственно преобразовали его.
 Текст:
.(точка)     Любой одиночный символ
[chars]   Класс симвлолв: Один из символов
[^chars]  Класс симвлолв: Ни один из символов
text1|text2 Альтернатива: text1 или text2 


Кванторы (символы для обозначения количественных отношений):
?     0 или 1 из предшествующего текста
*     0 или N из предшествующего текста (N > 0)
+     1 или N из предшествующего текста (N > 1) 


Группировка:

(text)  Группировка текста
(либо установка границ альтернативы или для создания обратных связей где N группа, которая 
может быть использована в RHS директивы RewriteRule с $N)


Маркеры:
^     Маркер начала строки
$     Маркер конца строки


Экранирование:  \char экранирование конкретного символа
(к примеру для указания символов ".[]()" и т.д.)

Cимвол отрицания (NOT) - ('!') 

Если используются шаблоны с отрицанием, вы не можете использовать $N в строках подстановок! Подстановка в правиле преобразования это строка будет подставляться (или будет заменять) вместо оригинального URL, для которого есть совпадение Шаблону. Кроме простого текста вы можете использовать:

    1.обратные связи $N на шаблоны в RewriteRule
    2.обратные связи %N на последний соответствующий шаблон в RewriteCond
    3.переменные сервера в качестве проверяемых строк в условиях правил (%{VARNAME})
    4.вызовы запросов к массиву (${mapname:key|default})

Флаги

 

[R]
Redirect - останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (код 302 - MOVED TEMPORARY), также можно указать код редиректа самостоятельно, например R=301 (код 301 - MOVED PERMANENTLY).
[F]
Forbidden - возвращает ошибку 403.
[G]
Gone - возвращает ошибку 410.
[P]
Proxy - дает команду Apache выполнть подзапрос к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy отсутствует, то произойдет ошибка.
[L]
Last - останавливает процесс преобразования, и текущая ссылка считается окончательной.
[N]
Next - запускает процесс преобразования с первого по порядку правила.
[C]
Chain - объединяет несколько правил в цепочку. Если первое правило цепочки не срабатывает, то вся цепочка игнорируется.
[NS]
NoSubreq - разрешает срабатывание правила только для настоящих запросов, игнорируя подзапросы.
[NC]
NoCase - отключает проверку регистра символов.
[QSA]
Qsappend - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.
[PT]
PassThrough - останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке.
[S]
Skip - пропускает следующее правило, если данное правило сработало. Можно указать количество правил, например: S=2
[E]
Env - устанавливает переменную окружения, например: E=переменная:значение.

htaccess 3 RewriteCond

Директива RewriteCond - определяет условие, при котором происходит преобразование. RewriteCond определяет условия для какого-либо правила. Перед директивой RewriteRule располагаются одна или несколько директив RewriteCond. Следующее за ними правило преобразования используется только тогда, когда URI соответствует условиям этой директивы и также условиям этих дополнительных директив.

RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

$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  Адрес сервера, например, beget.ru
 HTTP_ACCEPT  Описываются предпочтения клиента относительно типа документа.
 REMOTE_ADDR  IP-адрес посетителя.
 REMOTE_HOST  адрес посетителя в нормальной форме — например, rt99.net.ru
 REMOTE_IDENT  Имя удаленного пользователя. Имеет формат имя.хост, например, kondr.www.rtt99.net.ru
 REMOTE_USER  Тоже, что и REMOTE_IDENT, но содержит только имя. Пример: kondr
 REQUEST_METHOD  Позволяет определить тип запроса (GET или POST). Должен обязательно анализироваться, т.к. определяет дальнейший способ обработки информации
 SCRIPT_FILENAME  Полный путь к веб-странице на сервере.
 PATH_INFO  Содержит в себе все, что передавалось в скрипт.
 QUERY_STRING  Содержит строчку, переданную в качестве запроса при вызове CGI скрипта.
Cтрока с набором переменных для PHP. Часть урла после знака вопроса (и до решётки якоря, если он есть).
 AUTH_TYPE  Используется для идентификации пользователя
 DOCUMENT_ROOT  Cодержит путь к корневой директории сервера.
 SERVER_ADMIN  Почтовый адрес владельца сервера, указанный при установке.
 SERVER_NAME  Адрес сервера, типа kondr.beget.ru
 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 для того чтобы выполнить собственные задачи.

htaccess 2 - RedirectMatch


RedirectMatch позволяет использовать регулярные выражения.

RedirectMatch /(.*)/(.*)/index.html$ http://mysite.ru/script.php?par1=&par2=

Круглые скобки () используются для выделения групп символов. В дальнейшем к ним можно обращаться по номеру.
Символ ^ обозначает начало строки.
Символ $ обозначает конец строки.
Символ . обозначает любой символ.
Символ | обозначает альтернативу. Например, выражения "A|B" означают "A или B".
Символ ? ставится после символа (группы), который может как присутствовать, так и отсутствовать.
Символ * ставится после символа (группы), который может отсутствовать или присутствовать неограниченное число раз подряд.
Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз.
Квадратные скобки [] используются для перечисления допустимых символов.
Квадратные скобки [^] используются для перечисления недоступных символов.
Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде.
Все, что расположено после символа '#', считается комментарием.

воскресенье, 14 июля 2013 г.

htaccess

Инструкции, направленные на переопределение (rewrite) должны всегда предваряться следующими строками:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Добавить в обработку как php другие форматы:

AddType application/x-httpd-php .php .php3 .php4 .phtml .html .jpg


Чтобы переадресовать запросы, созданные не по https протоколу на https, и решить проблему необходимости повторной авторизации при использовании htpasswd

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

Для группы файлов типа blog/this.php?gh

RedirectMatch 301 /blog(.*) http://www.askapache.com/$1

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

AddType application/octet-stream .mpg

Разрешение только методов GET и PUT при обращении к серверу.

Options -ExecCGI -Indexes -All +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} !^(GET|PUT)
RewriteRule .* - [F]
Обработка всех файлов gif скриптом cgi
Action image/gif /cgi-bin/filter.cgi

Запретить обработку php файлов.

<FilesMatch ".(php) $">
Order Allow,Deny
Deny from all
</FilesMatch>


Запрет доступа по IP

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

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

Разрешение доступа только с определенных IP к определенной папке (адреса записываются через пробел):

# Указываем папку, к которой запрещаем доступ по имени хоста и его IP

Order deny, allow
deny from all
#Адреса записываются через пробел
Allow from 198.69.144.98 198.69.144.94 198.69.144.92 
# неполный адрес, если необходимо закрыть доступ по маске то используем неполный адрес
Allow from 198.69.