Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скрипт исполняется 2 раза, если есть .htaccess 
:(
    Опции темы
Chuck
Дата 25.8.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 1
Всего: 9



Привет всем!
У меня возникла такая проблема.
Есть скрипт, есть .htaccess файлик
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)[/]?([^/]*)?[/]?([^/]*)?[/]?$ /index.php?part=$1&p1=$2&p2=$3&%{QUERY_STRING}

Все бы хорошо, да заметил я, что скрипт исполняется 2 раза, т.е. первый раз он исполняется, но результат работы куда то девается (надеюсь в /dev/null), ну а второй раз уже отдается в браузер!

Как избежать 1 запуска?
PM MAIL WWW GTalk   Вверх
Mal Hack
Дата 25.8.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Запускаешь на локальном сервере через браузер?
Какой показатель показывает, что идет два раза выполнение?
PM ICQ   Вверх
Chuck
Дата 25.8.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 1
Всего: 9



Запускаю на сервере http://chuck.freemail.uz/
Показатели: в базе поле хитов увеличивается не на 1, а на 2!
Так же в конце скрипта вставил такой вот код
Код

$f = fopen("counter.txt", "a");
fwrite($f, $_SERVER['REMOTE_ADDR']."\n");
fclose($f);

Результаты тут http://chuck.freemail.uz/counter.txt
Как видите, заходя 1 раз, ваш IP записывается 2 раза!
PM MAIL WWW GTalk   Вверх
Mal Hack
Дата 25.8.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Поставь в конце правила [L]
PM ICQ   Вверх
Chuck
Дата 25.8.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 1
Всего: 9



Поставил, результат тот же!
PM MAIL WWW GTalk   Вверх
Mal Hack
Дата 25.8.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Так, а если в index.php оставить ТОЛЬКО код записи в файл, и проверить, результат - тот же?
Полностью .htaccess приведи.
PM ICQ   Вверх
Chuck
Дата 25.8.2005, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 1
Всего: 9



вот скрипт
Код

<?
$f = fopen("counter.txt", "a");
fwrite($f, time()." - ".$_SERVER['REMOTE_ADDR']."\n");
fclose($f);
?>


Вот файл .htaccess
Код

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)[/]?([^/]*)?[/]?([^/]*)?[/]?$ index.php?part=$1&p1=$2&p2=$3&%{QUERY_STRING}[L]


Может забить на этот RewriteRule и парсить $_SERVER["REQUEST_URI"]?
PM MAIL WWW GTalk   Вверх
Irokez
Дата 25.8.2005, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 1
Всего: 53



имхо - не поможет ничего, это так mod_rewrite работает..
PM   Вверх
Mal Hack
Дата 25.8.2005, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(Irokez @ 25.8.2005, 21:37)
имхо - не поможет ничего, это так mod_rewrite работает..

Это почему?

Цитата(Chuck @ 25.8.2005, 21:35)
Может забить на этот RewriteRule и парсить $_SERVER["REQUEST_URI"]?

Ну это конечно было бы лучше
RewriteRule ^.*$ index.php [L.QSA]
PM ICQ   Вверх
Irokez
Дата 25.8.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 1
Всего: 53



Цитата(Mal @ 25.8.2005, 20:45)
Это почему?

потому что у меня была такая же проблема, решил только через запоминание времени в сессии..
PM   Вверх
Mal Hack
Дата 25.8.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(Irokez @ 25.8.2005, 21:50)
потому что у меня была такая же проблема, решил только через запоминание времени в сессии..

Не, ты объясни почему реврайт так работает?
Этого не может быть. Значит где-то есть логическая ошибка ;)
PM ICQ   Вверх
Irokez
Дата 25.8.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 1
Всего: 53



Цитата(Mal @ 25.8.2005, 20:54)
Не, ты объясни почему реврайт так работает?

mod_rewrite - модуль для обработки запросов, при переделывании запроса (RewriteRule) мод реврайт получает один запрос, составляет второй и отправляет результат его выполнения браузеру, но при этом то первый запрос он тоже выполняет (?), но просто браузеру он не передает.. хотя логичнее предположить что первый запрос никуда не отправляется, но тогда как может модуль узнать что
Код

RewriteCond %{REQUEST_FILENAME} !-d

если сервер не выполняет первый запрос... тогда и получается:
выполняется первый запрос, получаются все данные (является ли запращиваемый ресурс файлом, директорией, линком итп), переделывается согласно правилу и результат отправляется обратно браузеру..
таковы мои рассуждения, возможно я неправ.. чтобы разобраться надо в очередной раз прочитать мануал по мод_реврайту..
PM   Вверх
Mal Hack
Дата 25.8.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(Irokez @ 25.8.2005, 22:01)
но при этом то первый запрос он тоже выполняет

не может такого быть, т.к. тогда бы mod_rewrite'ом никто не пользовался, ну сам подумай.

PM ICQ   Вверх
Irokez
Дата 25.8.2005, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 1
Всего: 53



Цитата(Mal @ 25.8.2005, 21:11)
не может такого быть, т.к. тогда бы mod_rewrite'ом никто не пользовался, ну сам подумай.

да вот думаю... просто практика показывает обратное... возможно запрос идет "неполный" smile но достаточный чтобы скрипт выполнился... глупо звучит конечно
PM   Вверх
Chuck
Дата 26.8.2005, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

Репутация: 1
Всего: 9



Цитата
и отправляет результат его выполнения браузеру

Нифига он браузеру не может отрпавлять, глупость!
mod_rewrite подобен процедуре, которая перехватывает у apache URI, переделывает его по правилам и, тут самое интересное, посылает запрос (GET, POST, HEAD) (как будто это браузер) опять апачу!

Так вот вопрос, как это избежать, как избежать первого запроса ....
PM MAIL WWW GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.