Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Apache HTTP Server: Настройка .htaccess (http://forum.oszone.net/showthread.php?t=30949)

Agent Comanche 12-10-2003 17:47 212257

Возможно ли с помощью .htaccess запретить загрузку графики на других хостах(т.е. как на народ.ру)?

Если это делается не через .htaccess, то как?

Sean Ingumsky 13-10-2003 03:08 212258

Agent Comanche
С других хостов? Ты это имеешь в виду?

Agent Comanche 13-10-2003 10:25 212259

Т.е. у меня например на серве лежит картинка http://site.com/image.jpg

Если я на осзоне прописываю [ img ] http://site.com/image.jpg [ /img ], то здесь картинки не должно быть видно.

И нужно сделать один каталог, чтобы с него можно было грузить картинки. Вот что я имел ввиду. :)

Sean Ingumsky 14-10-2003 02:26 212260

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

Agent Comanche 14-10-2003 10:21 212261

Посмотрел насчет HTTP_REFERER, нашел доку. (ничего не понял:) )

И вот чего нашел:

Код:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^.*sitename\.ru.*$ [NC, OR]
RewriteCond %{HTTP_HOST}    !^.*sitename\.ru.*$ [NC]
RewriteRule .*\.(gif|jpg)$ - [F]

Вроде бы это то, что мне надо. Или нет? Всё ли тут правильно?

И как я понимаю, это будет для всего сайта в целом.
А как сделать, чтобы с директории, например http://site.com/temp/ можно было загружать картинки с других серверов?
Т.е. со всех нельзя, кроме temp.

Sean Ingumsky 15-10-2003 03:02 212262

Agent Comanche
Здесь можно воспользоваться перловым скриптом:
Код:


my $picdir="/usr/local/apache/pics";
my $ref=$ENV{'HTTP_REFERER'};
my $myhost= quotemeta($ENV{'HTTP_HOST'}||$ENV{'SERVER_NAME'});
 * * * *if ($ref and $ref !~m|^http://$myhost/|)
 * * * *{
 * * * * * * * *display_image("copyright.gif");
 * * * *}
 * * * * else
 * * * * {
 * * * * * * * *my ($image_file)=$ENV{'PATH_INFO'}=~/^([\w+.]+)$/;
 * * * * * * * *display_image($image_file);
 * * * * }
 
sub display_image
{
 * * * * my $file=shift;
 * * * * my $full_path="$picdir/$file";
 * * * * open IMG, $full_path;
 * * * * print "Pragma: no-cache\n";
 * * * * print *"Content-type: image/gif\n\n";
 * * * * binmode;
 * * * * my $buffer="";
 * * * * while (read(IMG, $buffer, 16_384))
 * * * * {
 * * * * * * * * *print $buffer;
 * * * * *}
 * * * * * * * * *close IMG;
}
 
sub not_found
{
 * * * * *print <<END_OF_ERROR;
 * * * * *Status: 404 Not Found
 * * * * *Content-type: text/html
 * * * * *<HTML>
 * * * * *<HEAD>
 * * * * *<TITLE>Файл не найден</TITLE>
 * * * * *</HEAD>
 * * * * *<BODY>
 * * * * * ...
 * * * * *</BODY>
 * * * * *</HTML>
 * * * * *END_OF ERROR
 * * * * *exit;
}

Я сам с этим не сталкивался, поэтому этот пример я взял из книги "CGI-программирование на Perl" (O'Reilly)
Может я тут чего напутал, поэтому про непонятные места спрашивай подробнее, постараюсь помочь.

Agent Comanche 15-10-2003 10:48 212263

Спасибо, Sean Ingumsky
Но чесное слово, понятия не имею, что делать с этим скриптом.

И настараживает это строка(для каждой картинки?):
Код:

if ($ref and $ref !~m|^http://$myhost/|)
{
                display_image("copyright.gif");
}

Задачу нужно решить наиболее оптимальным способом и меньшим количеством кода.

Сегодня затестю тот код для .htaccess, по идее это он.
Вопрос теперь в другом, как разрешить загрузку картинок из директории temp для запросов с других серверов?

Agent Comanche 16-10-2003 00:37 212264

Ситуация такая.

Прописал вот это:
Код:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^.*site\.region\.ua.*$ [NC, OR]
RewriteCond %{HTTP_HOST} !^.*site\.region\.ua.*$ [NC]
RewriteRule .*\.(gif|jpg)$ - [F]

При запросе моего урла выкидывает ошибку 500
Цитата:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Кто знает, что в коде не так?

Sean Ingumsky 16-10-2003 01:20 212265

Agent Comanche
Кода не так много - два маленьких оператора логического ветвления и две фунуции вывода.
Цитата:

И настараживает это строка(для каждой картинки?):
Код:

if ($ref and $ref !~m|^http://$myhost/|
{ * * * * * * * *
display_image("copyright.gif");
}


А что тут непонятного? Если $ref (переменная окружения с адресом страницы, откуда пришёл запрос) существует, и $ref не является твоим разрешённым хостом, тогда запускается функция disply_image с атрибутом copyright.gif, т.е. отсылается картинка с твоим копирайтом. :-))

Guest 16-10-2003 19:35 212266

Дык, все просто. А Вы столько всего нагарадили :)


<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>


Спасибо можете не говорить :)

С наилучшими пожеланиями,
Клименко Данил aka Switch
*ICQ:
176299915
*Emails:
[ switch@mail.zp.ua ] & [ admin@switch.pp.ru ]
*Web
[ http://www.switch.pp.ru ]

Добавлено:

Сорри, комменты :

Надо это в .htaccess засунуть, а сам файл в директорию, из которой нельзя картинки грузить кинуть. Из других директорий файлы грузиться будут, а из этой - нет. Жаль времени не было... не помню, какой код ошибки выдает :)

С наилучшими пожеланиями,
Клименко Данил aka Switch
*ICQ:
176299915
*Emails:
[ switch@mail.zp.ua ] & [ admin@switch.pp.ru ]
*Web
[ http://www.switch.pp.ru ]
.HTACCESS - :up:

Agent Comanche 16-10-2003 19:51 212267

195.230.136.*
Значит вот так вот. В мыле фиг достанешь, а он по форумам шарится :gigi:

Цитата:

Надо это в .htaccess засунуть, а сам файл в директорию, из которой нельзя картинки грузить кинуть.
Какой файл?
Цитата:

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

И вообще. Объясни, почему это не работает:
Код:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} !^.*site\.region\.ua.*$ [NC, OR]
RewriteCond %{HTTP_HOST} !^.*site\.region\.ua.*$ [NC]
RewriteRule .*\.(gif|jpg)$ - [F]

Мне этот вариант больше нравится :)

Guest 16-10-2003 22:06 212268

Файл - .htaccess. :gigi:
Можно на одну ветвь выше .htaccess кинуть, а в директории, где лежать файлы, которые надо скачивать создать .htaccess и в нем написать:


<Files>
order allow,deny
allow from all
</Files>


Этот код не проверял, но должен работать :)

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

Agent Comanche 16-10-2003 23:13 212269

Guest
Я наверное лучше на мыло черкану.

Guest 18-10-2004 15:21 212270

А как узнать полный путь на сервере - хочу поставить пароль на папку, но полного пути к .htpasswrd я не знаю.

mar 18-10-2004 16:41 212271

Guest
Цитата:

А как узнать полный путь на сервере - хочу поставить пароль на папку, но полного пути к .htpasswrd я не знаю
и не надо -  просто .htpasswrd  надо положить туда же, куда и .htaccess

Guest 18-10-2004 18:02 212272

mar
Я положил туда же, но что надо написать в строке
AuthUserFile "полный путь"
Вот этого полного пути я и не знаю. Чтобы узнать его, я создал файлик test.php с одной строчкой phpinfo() и обратил внимание на SERVER["PATH_TRANSLATED"], который максимально напоминал этот самый путь: /usr/local/.../www/news/test.php (соответственно .htpasswd).
Но авторизация не проходит.
Вот и решил узнать, что не так.

mar 18-10-2004 18:41 212273

Guest
пардон, давно этим не занималась
действительно надо поставить AuthUserFile /usr/local/.../www/news/.htpasswd
Но дальше надо воспользоваться командой
htpasswd для создания этого самого пароля


[s]Исправлено: mar, 19:14 18-10-2004[/s]

Guest 18-10-2004 18:58 212274

mar
Файл с паролем создан с помощью утилиты htpasswd.exe. В общем - проблема у меня только в определении полного пути, так как во всех руководствах что я встречал не говорится как его определить, лишь пишут Спроси у сис.админа и т.д. А вот хотелось бы его (путь) определить самому.

mar 18-10-2004 19:11 212275

Guest
ты совершенно прав - запусти из каталога скрипт phpinfo() и посмотри на полнуй путь к этому самому скрипту.

Guest 18-10-2004 19:19 212276

Guest
Вообщем-то, я так и сделал, но авторизация не проходит...

archy 18-10-2004 23:16 212277

Guest
А что в логах то пишет?
Agent Comanche
А RewriteEngine включен? Опять же, что в логах?


Время: 10:25.

Время: 10:25.
© OSzone.net 2001-