Войти

Показать полную графическую версию : Apache HTTP Server: Настройка .htaccess


Страниц : [1] 2

Agent Comanche
12-10-2003, 17:47
Возможно ли с помощью .htaccess запретить загрузку графики на других хостах(т.е. как на народ.ру)?

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

Sean Ingumsky
13-10-2003, 03:08
Agent Comanche
С других хостов? Ты это имеешь в виду?

Agent Comanche
13-10-2003, 10:25
Т.е. у меня например на серве лежит картинка http://site.com/image.jpg

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

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

Sean Ingumsky
14-10-2003, 02:26
Если ты хочешь запретить загрузку картинок с твоего сайта по ссылке, можно отслеживать HTTP_REFERER и запрещать загрузку для вызовов с другого сервера.

Agent Comanche
14-10-2003, 10:21
Посмотрел насчет HTTP_REFERER, нашел доку (http://httpd.apache.org/docs/misc/rewriteguide.html). (ничего не понял:) )

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


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
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
Спасибо, Sean Ingumsky
Но чесное слово, понятия не имею, что делать с этим скриптом.

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

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

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

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

Agent Comanche
16-10-2003, 00:37
Ситуация такая.

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

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
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
Дык, все просто. А Вы столько всего нагарадили :)


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


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


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

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

Agent Comanche
16-10-2003, 23:13
Guest
Я наверное лучше на мыло черкану.

Guest
18-10-2004, 15:21
А как узнать полный путь на сервере - хочу поставить пароль на папку, но полного пути к .htpasswrd я не знаю.

mar
18-10-2004, 16:41
Guest
А как узнать полный путь на сервере - хочу поставить пароль на папку, но полного пути к .htpasswrd я не знаю
и не надо -  просто .htpasswrd  надо положить туда же, куда и .htaccess

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

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


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

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

mar
18-10-2004, 19:11
Guest
ты совершенно прав - запусти из каталога скрипт phpinfo() и посмотри на полнуй путь к этому самому скрипту.

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




© OSzone.net 2001-2012