Forum Webscript.Ru
Программирование => Perl => Тема начата: Eugene2001 от 01 Августа 2002, 18:49:02
-
А можно определить с какой страницы пришел человек и зависимости от ее адреса (тот, который нужен или любой другой) вы вести ему одну из 2-х html страницу:
если зашел с нужного адреса - то первую страницу,
если с любого другого - то вторую...
или это не относится к cgi?
-
$ENV{HTTP_REFERER}
-
как бы мне хотелось, что бы мне это о чем-то сказало...
я только догадываюсь, что надо писать, что-то типа "Если $ENV{HTTP_REFERER} = "нужный адрес", то делать то-то, если...
но я совсем не разбираюсь в скриптах (максимум, что я могу так это установить уже готовый...)
...
большая просьба, если этот код займет всего несколько строчек и отнимет пару минут вашего времени, то, пожалуйста, приведите его в форуме или мне на почту veb@zmail.ru
заранее спасибо,
с уважением,
Евгений
-
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if ($etalon_url eq $client_url){&ok}
else {&no_ok}
sub ok{
print "Location: http://vasia.doma.net/ok.htm\\n\\n";#куда идти если все ок
}
sub no_ok{
print "Location: http://vasia.doma.net/no_ok.htm\\n\\n";# куда идти в случае неудачного захода
}
в 99% будет работать
(не всегда удается поймать этот HTTP_REFERER)
-
СУПЕР!, спасибо!
поеду домой пробовать...
-
я совсем не разбираюсь в скриптах (максимум, что я могу так это установить уже готовый...)
Не забудь начать скрипт с #!/usr/bin/perl
:)
-
if ($etalon_url eq $client_url){&ok}
...
(не всегда удается поймать этот HTTP_REFERER)
:) А последний процент?
....
if (($etalon_url eq $client_url) and ($client_url ne \'\')){&ok}
...
-
А, ну да :)
Хотя подожди, если эталон совпал с визитером то визитер уже не может быть \'\' Не прав?ИМХО прав! Следовательно, я подозреваю что это была очепятка вместо and нужен or а вместо ne -> eq!
Во блин, чисто писание
А вообще вот что мне удалось как-то выудить на этот HTTP_REFERER -> Field blocked by Outpost (http://www.agnitum.com)
Тоесть я так понял, последнее время люди стремятся всячески себя "зашифровать" в сети
-
спасибо всем за помощь!
тут возник еще один маленький вопрос по модификации этого скрипта...
а можно ли сделать так чтобы эти две страница (когда какая нужна, конечно) грузились бы с ОДНОГО И ТОГО ЖЕ адреса, например, http://vasia.doma.net/check.htm, а не редиректилось на
http://vasia.doma.net/ok.htm или http://vasia.doma.net/no_ok.htm
или это нельзя сделать с помощью cgi?
---
Евгений
-
Ну почему нельзя, можно! Фреймом или
предположим, что check.htm содержит всего одну строку
где check.pl и есть твой новый скрипт
модифицируем скрипт вот так:
print "Content-type: text/html\\n\\n";
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if (($etalon_url eq $client_url) or (!$client_url)){&ok}
else {&no_ok}
sub ok{
open C,"../ok.htm";# ну вот тут надо правильно расчитать путь к ok.htm
print ;close C
}
sub no_ok{
open C,"../no_ok.htm";и соответственно к no_ok.htm
print ;close C
}
все, работает 100% :)
варианты от папки cgi-bin - 1) ../ok.htm
2) ../www/ok.htm
3) ../html/ok.htm
4) ../htmldoc/ok.htm
-
грузились бы с ОДНОГО И ТОГО ЖЕ адреса, например, http://vasia.doma.net/check.htm, а не редиректилось на
http://vasia.doma.net/ok.htm или http://vasia.doma.net/no_ok.htm
Так - нет.
Но можно сделать страницу:
http://vasia.doma.net/cgi-bin/check.cgi
В этом случае страница динамически генерируется скриптом. В зависимостит от полученных данных
Хотя... можно инклудить скрипт, но тогда придётся использовать Явускрипт и это не есть очень большой гут (у юзверя он может быть отключён).
-
Ну я несколько другой вариант предлагаю, забирать готовую страницу и выводить ее. Причем можно их в каталог cgi-bin поместить вместе с скриптом. Тогда путь убираем вообще и пишем
open C,"ok.htm";
print ;
close C;
-
ESE контакт:-)
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
гм. а разве при инклуде скрипт не выдаёт страницу, в которую он инклудится?
-
Ну я несколько другой вариант предлагаю
Я тебя понял, просто не успел прочесть твою мессагу:-)
Просто я думаю что при инклуде в $ENV{\'HTTP_REFERER\'} будет check.htm? Хотя я могу очень глубоко заблуждаться.
-
Во блин, а ведь ты прав! Все подаю в отставку :)
[застрелился :) ]
-
Хотя подожди, если эталон совпал с визитером то визитер уже не может быть \'\' Не прав?ИМХО прав!
Это я не прав. Не вник в смысл :(.гм. а разве при инклуде скрипт не выдаёт страницу, в которую он инклудится?
именно так...
-
Да относится к CGI и Perlу
$ENV{\'HTTP_REFERER\'}
-
В общем скорее всего невыйдет ничего из этого ( а может и не кчему все это,ЛУЧШЕБЫ ВОДКИ ВЫПИЛИ) :)
/глеб, приелось,но сейчас в тему :beer: /
-
В общем скорее всего невыйдет ничего из этого
Ну не совсем так. Можно выловить перловым скриптом $ENV, сгенерить фрейм, который будет скриптом с переданным значением. Через ж@пу, конечно, но работать будет...:)
(Это был NeoNox)
-
Ну я тоже об этом думал :) и мне тоже показалось это через ж
но всеже достигнуть цели любыми средствами !
ЗЫ: Помойму автор сабжа уже нашел выход на ПХП
if (strstr(getenv(\'HTTP_REFERER\'),\'yandex.ru\')) {
include(\'yandex_pages.php\');
}else {
include(\'not_yandex_pages.php\');
}
?>
-
как раз собирался скинуть вам этот php код...
но может все-таки подскажите как это сделать на cgi "через ж@пу"?
Евгений
-
Гм... Не знаю что именно имел в виду NeoNox, предполагаю следующее:
сделать этот файл в виде фреймсета, один "невидимый фрейм" - размеры ноль (грузится пустая страничка, ну или твои философские размышления о сущности бытия, только в урезанном варианте, чтоб особо не тормозило, а большой фрейм будет ссылкой на скрипт, т.е. http://www.domen.ru/cgi-bin/script.cgi который как раз и будет анализировать $ENV{\'HTTP_REFERER\'} (как я помню он не будет возвращать файл фреймсета) и в зависимости от этого генерировать соответствующую страничку.
ЗЫ. Обожаю фреймы:-). Рулез фор эвер.
ЗЫЗЫ. Кстати эту трабл можно решить с помощью яваскрипта, в принципе даже без использования Перла... Но это уже история совсем другого форума:-)
-
NeoNox имел ввиду скорее всего такую конструкцию:
Генерится фрейм, ты прав глеб, только большой фрейм является уже прямо ссылкой на ок.htm или no_ok.htm
Но мне кажется автору сабжа показалось некрасивым то что страница, вернее адрес в броузере будет кривоват и поэтому он хочет, А давайте ка лучше его спросим, чего он хочет и почему простой редирект его не устраивает. Эй, Eugene2001
чего думаешь по этому поводу?
-
простой редирект не устраивает только по одной причине... человек один раз попадет на страницу, а потом будет (и все, кому он даст ссылку) заходить спокойно сразу на нее...
-
а потом будет (и все, кому он даст ссылку) заходить спокойно сразу на нее...
а почему не подходит вариант генерирования страницы скриптом, ведь это проще простого? И посторонние не пройдут:-).
-
сорри... я прочитал переписку других участников ("В общем скорее всего невыйдет ничего из этого") и cтормозил...
подумал, что ваш способ, когда человек заходит на http://vasia.doma.net/cgi-bin/check.cgi тоже не работает...
----
вы предлагаете, чтобы посетитель заходил на http://vasia.doma.net/cgi-bin/check.cgi, где генерировалась бы нужная страница... и адрес бы не изменился, а так и остался бы... да?
подскажите пожалуйста, что мне написать в этом скрипте, чтобы подгрузить ok.htm или no.htm (в них будут грузиться и картинки и текст) - вариант, который предложил ESE (работающий в 99%) + исправления внесенные NeoNox и потом подправленные опять ESE?
Евгений
-
человек заходит на http://vasia.doma.net/cgi-bin/check.cgi тоже не работает...
работает!
Вот что надо написать в скрипте:
#!/usr/bin/perl
print "Content-type: text/html\\n\\n";
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if (($etalon_url eq $client_url) or (!$client_url)){&ok}
else {&no_ok}
sub ok{
open C,"ok.htm";# ну вот тут надо правильно расчитать путь к ok.htm
print ;close C;
}
sub no_ok{
open C,"no_ok.htm";и соответственно к no_ok.htm
print ;close C;
}
Файлы могут называться и по-другому но находится в каталоге скрипта.
-
Это был glebushka:)
-
СПАСИБО ОГРОМНОЕ ВСЕМ ЗА ПОМОЩЬ!!!
у вас очень полезный и дружелюбный для новичков форум!
с уважением,
Евгений