Может ли .htaccess вызвать зацикливание? - PullRequest
4 голосов
/ 05 декабря 2011

Я не герой с .htaccess, но у меня возникла проблема, которая, я думаю, может быть вызвана этим.Первые симптомы: простые изменения в моей базе данных (например, отслеживание IP-адресов пользователей) выполнялись несколько раз за запрос, в то время как выходные данные сайта выглядят просто отлично.

После нескольких часов отслеживания проблемы я наконец пришел к выводучто это не было вызвано самой базой данных (уверен на 100%), а также не чрезвычайно простым фрагментом кода PHP, который я написал (также уверен на 100%).Тем не менее проблема возникла на разных серверах.Мой единственный вывод заключается в том, что это связано с моими файлами .htaccess.Мне кажется, что каждый запрос обрабатывается пару раз перед запуском, который фактически приводит к выводу.

В моей папке public_html я поместил следующий файл .htaccess, который должен перенаправлять каждый запрос на "public"folder:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    public/    [L]
        RewriteRule    (.*) public/$1    [L]
    </IfModule>

В этой" общей "папке у меня есть еще один файл .htaccess:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?requestedurl=$1 [PT,L]
    </IfModule>

Этот файл предназначен для обработки каждого запроса с использованием файла index.php.Примечание. Если я переименую файл index.php и получу прямой доступ к нему, проблема не возникнет.

Я просто не понимаю, как это происходит, и я надеялся, что кто-нибудь на этой планете это сделает.Заранее спасибо, Ганс

Ответы [ 2 ]

4 голосов
/ 05 декабря 2011

Вы можете прочитать этот предыдущий ответ: RewriteRule вызывает перезагрузку страницы дважды

The. htaccess может зацикливаться, даже бесконечные зацикливания, но в конце есть только один запрос на сервер. Так что это не твоя проблема. Проверьте ссылку, чтобы узнать, что может сделать запрос отправленным браузером несколько раз (это происходит чаще, чем мы обычно думаем).

3 голосов
/ 05 декабря 2011

Теоретически нет, все правила перезаписи обрабатываются до того, как какой-либо файл будет выполнен. Единственное, что может вызвать многократные обращения к базе данных, это неисправный код PHP, который может вызывать строку несколько раз или, возможно, перенаправить страницу после вызова, а затем htaccess перенаправляет ее обратно на ту же страницу. Один файл htaccess никогда не сможет этого сделать.

Я бы не исключил такой возможности, потому что программы и тому подобное иногда могут делать очень случайные вещи, но вам нужно больше отлаживать свой PHP-код, чтобы исключить его в качестве источника. Самый простой способ - просто пройтись, и каждый раз, когда PHP делает что-то важное, добавьте строку печати, чтобы указать, что он выполняет какую-то определенную функцию, особенно для команд MySQL. Это быстрый способ увидеть, что все это делает для загрузки этой страницы. Вы можете быть удивлены тем, что иногда находите.

Кроме того, просмотрите журнал доступа Apache. Он будет печатать новую строку для каждого запроса GET, отправленного пользователем. Если страница никогда не перенаправляется, невозможно, чтобы пользователь запускал сценарий несколько раз (как указано выше, файл не выполняется до тех пор, пока не будет определен окончательный путь). Если вы видите несколько запросов GET с одного IP-адреса одновременно, что-то перенаправляет или перезагружает страницу.

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