Правило фронтальной загрузки mod_rewrite приводит к двойной загрузке index.php - PullRequest
3 голосов
/ 07 января 2011

Я работал над проектом, который использует фронтальный загрузчик для обработки всех запросов (Routing domain.com/args/go/here to Index.php? Req = args / go / here), и он работал очень хорошо. .. Или я должен сказать, я думал, что это сделал - я недавно добавил новый регистратор, и чтобы проверить его, я поместил тестовое сообщение журнала в index.php. Это сообщение записывалось в мой файл журнала дважды, каждый раз, когда я перезагружал страницу, и после большой отладки я обнаружил, что причиной является мой файл .htaccess - по любой причине он загружает index.php дважды для каждого запроса.

Вот мой .htaccess:

RewriteEngine On
RewriteBase /site/beta/ #I added this after I discovered the bug
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^index\.php$ #This too. Doesn't work
RewriteRule ^(.*)$ index.php?args=$1 [L]

Я также пробовал:

FallbackResource /site/beta/index.php

Что не работает (Index.php просто не загружается, если вы пытаетесь перейти, скажем, на 127.0.0.1/site/beta/admin/controls/ - но если вы просто идете в / index .php) и по-прежнему загружается дважды.

Кто-нибудь может мне помочь? Я провел несколько часов в IRC, и никто не мог найти решение, которое сработало. (Только два из предложенных выше)

Ответы [ 2 ]

6 голосов
/ 07 января 2011

Вы полностью уверены, что это ошибка mod_rewrite? Если вы включите файл RewriteLog с высоким rewriteLogLevel (9), вы увидите, что одни и те же запросы обрабатываются 2 раза?

Для меня каждый раз, когда я вижу «тот же запрос, выполненный 2 раза», я думаю о другой странной веб-ошибке: Пустая ошибка IMG src .

Если у вас есть где-то в вашем HTML

<IMG SRC="">

или в одном из css (сложнее найти) a:

url()

Тогда у вас это есть. Протокол HTTP предписывает, что пустой URL-адрес GET (а изображение или url () в css - это неявный запрос GET) ДОЛЖЕН быть вызовом того же URL-адреса, что и тот, который отображает исходную страницу (и это также может быть POST, если Вы получаете свою страницу как POST-запрос).

На самом деле мало причин, чтобы mod_rewrite отвечал 2 раза на один единственный запрос. Проверьте с помощью Firebug или LiveHTTP Requests, что вы не всегда отправляете запрос index.php 2 раза. Или вручную протестируйте свой сервер с помощью HTTP-запроса в режиме telnet, поскольку он обязательно отправит только один запрос.

1 голос
/ 05 апреля 2014

Это также может быть браузер, пытающийся загрузить (невидимо, если вы не проверяете логи доступа apache) favicon.ico.У меня была такая же проблема, пока я не поместил ее в корневой каталог своих сайтов.Я знаю, что проблема была решена для первоначального спрашивающего, я помещаю это здесь для людей как я, ищущих ответ на тот же вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...