Записать реферер с помощью htaccess

Bu-Bu

Любитель PHP
Автор оригинала: dimagolov
подумай головой, для разнообазия :)
тебе все, что надо, это собрать полный путь к файлу для ключика -f (вернее для его отрицания) в RewriteCond. раз ты большой знаток mod_rewrite, то склеить для этого аж две переменные сможешь?
Я не пойму: ты прикалываешься или как? Ну написал я как в доках
RewriteCond %{REQUEST_URI} ^$ !-r
RewriteCond %{REQUEST_URI} ^$ !-R
RewriteCond %{REQUEST_URI} ^$ !-U
И что? Или ошибка 500 или просто на это не реагирует. Эти ключики вообще нигде толком не документированы. Ты мне предлагаешь неделю заниматься этим? Сомнительный совет однако. Или уже покажи свое мудрое решение или забудем про mod_rewrite
 

dimagolov

Новичок
Bu-Bu, у меня все заняло час с учетом того, что я никогда до этого не одного правила mod_rewrite сам не писал (чтение доки и чужих не в счет). Что тебе надо сделать, я тебе сказал - использовать !-f (is regular file, хотя по логике тебе и "просто директории" надо проверять, но это еще один RewriteCond). Кроме того, тебе надо понять, что %{REQUEST_URI} отношение к пути в ФС имеет весьма посредственное, в лучшем случае это часть пути. Поэтому потрать немного умственной энергии и найди решение сам, поняв что и для чего в RewriteCond/RewriteRule предназначено, а не повторяя вычтитанные заклинания.
 

Monah IRH

Новичок
Если я правильно понял, что вы хотите, то это делается одной стройкой (пример)

PHP:
ErrorDocument 404 /error404.php
в файле .htaccess. Любая не найденная страница на сайте буедтп еренаправляться сюда. А этот error.php файл позволяет оставить посетителя на сайте.
 

dimagolov

Новичок
Monah IRH, я уже это предлагал. Но Bu-Bu жалуется, что при этом режется referer. Не знаю, не проверял, может и режеться.

-~{}~ 09.08.08 21:28:

Bu-Bu, кстати, а покажи где в доках можно найти такой бред:
RewriteCond %{REQUEST_URI} ^$ !-r

На крайний случай поясни что такое %{REQUEST_URI}, а что такое ^$ и что наконец обозначает !-r. Пока не поймешь, что из себя каждое представляет и какое касательство они имеют к RewriteCond заявлять об опыте с реврайтом прямо скажем не стоит :)

не удивительно, что сервер отдал 500 после такого :)
 

Bu-Bu

Любитель PHP
Автор оригинала: dimagolov
Monah IRH, я уже это предлагал. Но Bu-Bu жалуется, что при этом режется referer. Не знаю, не проверял, может и режеться.

-~{}~ 09.08.08 21:28:

Bu-Bu, кстати, а покажи где в доках можно найти такой бред:
RewriteCond %{REQUEST_URI} ^$ !-r

На крайний случай поясни что такое %{REQUEST_URI}, а что такое ^$ и что наконец обозначает !-r. Пока не поймешь, что из себя каждое представляет и какое касательство они имеют к RewriteCond заявлять об опыте с реврайтом прямо скажем не стоит :)

не удивительно, что сервер отдал 500 после такого :)
Во-первых, я тут не жалуюсь а просто попросил совета у бывалых htaccess-щиков. Сам я пользуюсь этим файлом редко по причине того, что у меня один сервер свой и я любитель(!!!) а не профи, как некоторые тут. Насчет того, чтобы вникать в rewritecond - будет время, вникну, пока что некогда
 

MiRacLe

просто Чудо
Пациенту необходимо отдать 404-ый статус перед своим волшебным текстом, оставляющим посетителя на сайте. Но он этого не поймёт потому что "некогда".
 

Bu-Bu

Любитель PHP
Автор оригинала: MiRacLe
Пациенту необходимо отдать 404-ый статус перед своим волшебным текстом, оставляющим посетителя на сайте. Но он этого не поймёт потому что "некогда".
Доктор что ли? Не надо мне отдавать статус - у меня давно уже Errordocument 404 работает как надо, просто этот вариант режет реферер, который я хочу записать. Хорош уже тут разводить треп - нечего сказать, так не засоряйте эфир!

-~{}~ 10.08.08 14:46:

Rewritecond запустил, но рефереры все равно пустые
 

dimagolov

Новичок
Bu-Bu, специально проверил передаются ли реферереры. передаются. причем что через ErrorDocument, что через mod_rewrite. Если они у тебя пустые, значит или ты их не умеешь смотреть, или они реально пустые приходят.
 

Bu-Bu

Любитель PHP
А чего там смотреть? Я и через вывод попробовал - только remote_address прописывается, а реферер и реквест ури пустые, в файл 1 байт записывается и все.

echo $HTTP_SERVER_VARS['REMOTE_ADDR'].'<br />';
echo $HTTP_SERVER_VARS['USER_AGENT'].'<br />';
echo $HTTP_SERVER_VARS['REDIRECT_STATUS'].'<br />';
echo $HTTP_SERVER_VARS['REFERER'].'<br />';
echo $SERVER['REMOTE_ADDR'].'<br />';
echo $SERVER['USER_AGENT'].'<br />';
echo $SERVER['REDIRECT_STATUS'].'<br />';
echo $SERVER['HTTP_REFERER'].'<br />';
 

dimagolov

Новичок
PHP:
<?php
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
echo "<html><title>Page not exist</title><body>";
echo "Page http".(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] ? "s" : "")."://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']} does not exist on this server";
echo "<br />Referer is: {$_SERVER['HTTP_REFERER']}";
echo "<!-- Data for IE ".str_repeat('#',2048)."-->"
?>
 

dimagolov

Новичок
Bu-Bu, а как ты проверяешь? ты сделал страничку
Код:
<html><head><title>Referer test</title></head>
<body><a href='/incorrect.html'>Incorrect</a><br /><a href='/error.php'>Correct</a></body>
и тыцая с нее по ссылкам смотришь результат? или из броузера на прямумю адрес вбиваешь?
 

Bu-Bu

Любитель PHP
адрес вбиваю в адресную строку, да еще у меня полсуток на сайте уже стоит rewrite а до этого неделю ловил errordocument и все равно по 1 байту пишет
 

dimagolov

Новичок
Bu-Bu, ты вообще понимаешь, что такое реферер и что он означает? а какой он может быть, если ты ссылку в броузере руками вбил? какой по-твоему он должен быть?
 

Bu-Bu

Любитель PHP
Я написал, что на сайте не руками написан, да еще request_uri добавлено, однако записывает только 1 байт
 

dimagolov

Новичок
Bu-Bu, сделай так, как я скажу: положи в корень мой php, пропиши его как ErrorDocument, или как направление rewrite для несуществующих, рестартани сервер (если прописываешь в конфиге или не делай этого, если в .htaccess), создай html, который я выложил, открой его в броузере и потыцй по ссылкам. вывод (в обоих случаях) выложи на форум.
только сделай точно, как я написал, слово в слово, ок?
 

Bu-Bu

Любитель PHP
Ну так рефереры пишет, однако не может быть, чтобы поисковики руками набирали битые ссылки. Ведь весь изврат я и начал от того, что по релевантности страница 404 почти приблизилась к заглавной странице сайта. Почему тогда от них рефереры не остаются?
 

dimagolov

Новичок
Bu-Bu, вот поправь мой код так, чтобы писать рефереры не юзерам, а в лог и смотри, что туда попадет. Сам справишся?

по релевантности страница 404 почти приблизилась к заглавной странице сайта. Почему тогда от них рефереры не остаются?
ну откуда я знаю что ты там наделал? у тебя и сейчас рефереров никаких не было, пока не сделал, как я тебе сказал. я знаю только, что мой php отдает правильно код 404 и умеет отобразить полностью то, что запросил юзер и реферер. а это значит, что:
1. индексироваться он не будет
2. если кто-то будет приходить на кривые ссылки и реферер не будет отсутствовать по каким-то причинам (это от тебя не зависит), то ты его увидишь в логе (если запись в лог правильно сделаешь, но тебе есть на чем тестить)
Du verstehst?
 

Bu-Bu

Любитель PHP
Я по-немецки не бум-бум. Буду ждать визита поисковика. Запись в лог у меня той же байды была, просто писало по 1 байту. Вывод мне для юзера не нужен, ибо я эти ссылки пока перебрасываю на индексный файл. Ну все равно спасибо за потраченное время!
 

dimagolov

Новичок
ибо я эти ссылки пока перебрасываю на индексный файл
НЕЛЬЗЯ ЭТОГО ДЕЛАТЬ!!! именно поэтому у тебя и проблемы. ты ОБЯЗАН вернуть не переадресацию, а 404
сходи по ссылке: http://www.bmwclub.ua/sdfsd
вот заголовки, которые получаются:
Код:
[url]http://www.bmwclub.ua/sdfsd[/url]

GET /sdfsd HTTP/1.1
Host: [url]www.bmwclub.ua[/url]
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-gb;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cache-Control: max-age=0

[b]HTTP/1.x 404 Not Found[/b]
Date: Sun, 10 Aug 2008 14:18:35 GMT
Server: Apache/2.2.8 (EL)
X-Powered-By: PHP/5.2.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=cp1251
я тебе это сказал в первом ответе, но ты ведь самый знающий, да? в общем ССЗБ.
 
Сверху