Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с mod_rewrite

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
SergeyS
Отправлено: 03 Апреля, 2013 - 15:48:05
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Проблема заключается в двойном запуске php скрипта, точнее:
Есть файл index.php в котором 3 строчки кода, которые записывают значение в файл:
PHP:
скопировать код в буфер обмена
  1. $fp = fopen("counter.txt", "a");
  2. $test = fwrite($fp, "Запуск. \n\r");
  3. fclose($fp);

при использование mod_rewrite:
CODE (text):
скопировать код в буфер обмена
  1. Options +FollowSymLinks
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteCond %{REQUEST_FILENAME} !-d
  6. RewriteRule ^(.*)$ index.php [L]

Файл counter.txt содержит 2 записи, а если отключить mod_rewrite, то одну.
Почему-то mod_rewrite запускает скрипт 2 раза. Подскажите, в каком направлении копать?
Версия: Apache/2.2.24 (FreeBSD) PHP/5.4.13 mod_ssl/2.2.24 OpenSSL/1.0.1e

(Отредактировано автором: 03 Апреля, 2013 - 15:51:19)

 
 Top
SergeyS
Отправлено: 03 Апреля, 2013 - 19:16:34
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Целый день сижу над этой проблемой, не могу найти решение Огорчение , думаю может дело в версии apache .
Кто может проверить на других версиях apache?
Напишите о результате.
 
 Top
dubasua
Отправлено: 03 Апреля, 2013 - 20:47:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Скорее всего у вас в index.php идет какой нибудь include() на не существующий файл, проверьте все подключаемые файлы. А для простоты просто запишите в файл counter.txt переменную query_string и все станет ясно.
PHP:
скопировать код в буфер обмена
  1. $fp = fopen("counter.txt", "a");
  2. $test = fwrite($fp, $_SERVER['QUERY_STRING']." \n\r");
  3. fclose($fp);
 
 Top
SergeyS
Отправлено: 03 Апреля, 2013 - 21:35:00
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Спасибо за ответ, отличная идея с $_SERVER['QUERY_STRING'], но она возвращала пустоту, я заменил ее на $_SERVER['SCRIPT_FILENAME'] и в результате получил два обращения к /home/phpms/data/www/…/index.php
В index.php находятся только 3 строчки, include() нету.
 
 Top
Мелкий Супермодератор
Отправлено: 04 Апреля, 2013 - 11:35:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Возьмите сниффер трафика, проверьте, не отправляет ли сам браузер 2 запроса подряд (и такое бывает). И на один и тот же урл ли? Может, второе обращение - подгрузка фавиконки, которой нет на диске и запрос передаётся скрипту по правилам реврайта как раз.


-----
PostgreSQL DBA
 
 Top
SergeyS
Отправлено: 05 Апреля, 2013 - 11:40:15
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Мелкий Спасибо большое, дело оказалось в favicon.ico, скопировав иконку на сервер, получил один запрос.
 
 Top
DelphinPRO
Отправлено: 05 Апреля, 2013 - 12:11:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Однако проблема не решена. При запросе несуществуюшей картинки (шрифта, архива, любого другого файла) сервер будет отдавать "200 OK" вместо "404 Not Found". Посмотрите в файрбаге - ни одного 404 при обращении к несуществующим ресурсам.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
SergeyS
Отправлено: 05 Апреля, 2013 - 13:43:17
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Проблему решил так:
CODE (text):
скопировать код в буфер обмена
  1. Options +FollowSymLinks
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteCond %{REQUEST_FILENAME} !-d
  6. RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|jpeg|png|css|swf|flv|mp4|mp3|htc|htm|zip|pdf)
  7. RewriteRule ^(.*)$ index.php [L]

Указав расширения файлов.
 
 Top
DelphinPRO
Отправлено: 05 Апреля, 2013 - 13:49:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




уже лучше )
SergeyS пишет:
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|jpeg|png|css|swf|flv|mp4|mp3|htc|htm|zip|pdf)

в конце следует $ поставить, ибо расширение файла должно учитываться, только если оно указано в конце.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Apache и другие веб-серверы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB