[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Директива Files в htaccess
zaxar
Давненько я тут не был, и не отвечал на вопросы smile.gif Рад приветствовать.

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

Подскажите, как инвертировать регулярное выражение в директиве Files.

Поясню. Например, задача: установить авторизованный доступ ко всем файлам с расширением jpg. Решается так:

Код
<Files ~ \.jpg$>
AuthName Secret
AuthType Basic
AuthUserFile /path/to/.htpasswd
require valid-user
</Files>


Это понятно. А как установить авторизованный доступ ко всем файлам, кроме файлов с расширением jpg? Блин, весь моск схавался.



Спустя 2 часа, 12 минут, 33 секунды (4.02.2009 - 16:30) Sylex написал(а):
Код
<Files ~ [^\.jpg]$>
AuthName Secret
AuthType Basic
AuthUserFile /path/to/.htpasswd
require valid-user
</Files>

Спустя 22 часа, 50 минут, 31 секунда (5.02.2009 - 15:21) zaxar написал(а):
да, это первое что я попробовал. В том числе и без слеша. К сожалению, не работает.

Спустя 3 минуты, 29 секунд (5.02.2009 - 15:24) Sylex написал(а):
zaxar
странно, приду домой - проверю...
можно попробывать в кавычки взять

Спустя 37 секунд (5.02.2009 - 15:25) Sylex написал(а):
zaxar
проверь еще раз, СКОПИРУЙ ПРЯМ ПЛИЗ!

Спустя 6 часов, 42 минуты, 27 секунд (5.02.2009 - 22:07) kirik написал(а):
Sylex, у меня тоже не работает.
Немного погуглил, похоже что нельзя указать условие "НЕ" в Files директиве.
Можно перечислить все расширения, к которым доступ запрещен
Код
<FilesMatch "\.(php|html|htm)$">

Спустя 8 часов, 16 минут, 14 секунд (6.02.2009 - 06:24) Sylex написал(а):
kirik
да тож проверил, такая же фигня.. но должен быть же валидный способ smile.gif

Спустя 5 часов, 18 минут, 20 секунд (6.02.2009 - 11:42) zaxar написал(а):
Да уж. Непонятно. Режим инвертирования есть в мод_реврайте. Например, можно сделать вот так:

Код
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !\.jpg$
RewriteRule .* - [F]


Здесь восклицательный знак в регулярке как раз и означает инвертирование. Но в RewriteRule из наиболее подходящих флагов я нарыл только флаг [F], который означает запрет доступа (403 Forbidden). То есть, данный пример иллюстрирует возможность запрета получения всех файлов, кроме имеющих расширение jpg. Почти то, что надо. Осталось только додумать, как вместо 403 выдавать 401, чтобы запрашивать пароль, а не тупо блокировать. Похоже, в реврайте нет такой возможности. Или я ошибаюсь? По крайней мере, я не нашел. Видимо, придется *бстись с редиректами на скрипт авторизации на основе сессий, чего совершенно не хотелось. Жаль.

Спустя 2 часа, 1 минута, 3 секунды (6.02.2009 - 13:43) Sylex написал(а):
все дело в том, что там POSIX выражения.. фиг знает как там будет регулярка

Спустя 15 минут, 32 секунды (6.02.2009 - 13:59) FatCat написал(а):
Маски там работают?
Конструкция, конечно, длинная выйдет, но все же.
Сначала делаем авторизацию по первой букве кроме j: a*|b*|...
Потом по второй букве кроме p: ja*|jb*|...
И наконец по третьей то же...

Спустя 8 часов, 22 минуты, 5 секунд (6.02.2009 - 22:21) kirik написал(а):
Цитата (zaxar @ 6.02.2009 - 03:42)
Видимо, придется *бстись с редиректами на скрипт авторизации на основе сессий, чего совершенно не хотелось.

А ведь можно сделать ту же basic авторизацию на основе скрипта на которые редиректит..?
PHP
header('WWW-Authenticate: Basic realm="Login"');
header('HTTP/1.0 401 Unauthorized');
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.