index.php не распознает маршрут при загрузке с узла - PullRequest
0 голосов
/ 10 мая 2018

Я создаю своего рода прокси в Nodejs для шлюза оплаты, чтобы соединиться с приложением, которое у меня есть в PHP.

Сейчас я пытаюсь достичь конечной точки в моем приложении PHP с моего сервера узловс запросом GET, но я получаю ту же ошибку "Too Many Redirects".

Поиск в Google Я обнаружил, что эта ошибка обычно связана с модулем перезаписи в моем файле .htaccess, который может бытьбесконечное перенаправление моего маршрута, никогда не выпадая из условий перезаписи.

Взглянув на мой файл .htaccess, он выглядит довольно стандартно, и я не знаю, что могло вызвать этот бесконечный цикл перенаправления.

<IfModule mod_rewrite.c>
  RewriteEngine On
  # !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading
  #  slashes. If your page resides at http://www.example.com/mypage/test1 then use RewriteBase /mypage/test1/
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
  # If we don't have mod_rewrite installed, all 404's can be sent to index.php, and everything works as normal.
  # Submitted by: ElliotHaughin
  ErrorDocument 404 /index.php
</IfModule>

Самое странное, если я попробую точно такой же маршрут, используя Postman или браузер, все будет отлично!Контроллер поражен, и я получаю свой ответ.

Кроме того, при дальнейших исследованиях мне удается зарегистрировать объект запроса в моем файле index.php для рабочего запроса от Postman и отказавшего от моего сервера nodejs.Они кажутся почти одинаковыми почти во всех полях, кроме полей, описывающих URL-адреса.В запросе на успешное выполнение я получаю следующие поля:

   // this is logged once
   [REDIRECT_QUERY_STRING] => /notifica
   [REDIRECT_URL] => /notifica
   [QUERY_STRING] => /notifica
   [REQUEST_URI] => /notifica

Но при извлечении из nodejs я получаю следующие поля:

   // this is logged many times until I reach my redirect limit
   // [REDIRECT_QUERY_STRING] doesn't exist
   // [REDIRECT_URL] doesn't exist
   [QUERY_STRING] =>
   [REQUEST_URI] => /

Кто-нибудь знает, что может быть причиной такого поведения?Почему запрос работает от Почтальона и браузера, а не от приложения в Nodejs?Может быть, я что-то упускаю в заголовках, которые две программы добавляют по умолчанию, но модули, которые я использую для запросов, этого не делают?

1 Ответ

0 голосов
/ 15 мая 2018

Ваше основное правило всегда соответствует всему и всегда изменяет URL.Поймите, что флаг L просто прекращает поиск более подходящих правил в текущей итерации, и он снова зацикливается с переписанным URL-адресом.См. пояснительную схему того, что на самом деле делает переписывание.В таких простых случаях, как ваш, достаточно использовать флаг END, в противном случае ваше правило должно совпадать с первоначальным запросом, а не - с переписанным URL.

PS: не использоватьGET запрашивает все, что вносит изменения, для чего нужны POST и т. Д.

PPS Вам не нужно добавлять путь к строке запроса, PHP должен видеть запрос в $_SERVER['REQUEST_URI']

...