index.php从节点获取时不会识别路由

时间:2018-05-10 14:51:37

标签: php node.js apache .htaccess mod-rewrite

我在Nodejs中构建了一种代理,用于支付网关以连接我在PHP中使用的应用程序。

我现在尝试使用GET请求从我的节点服务器点击我的PHP应用程序中的端点,但我一直收到相同的错误"太多重定向"。

搜索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] => /

有谁知道可能导致此行为的原因是什么?为什么请求可以使用Postman和浏览器,但不能使用Nodejs中的应用程序?也许我错过了两个程序默认添加的标题中的内容,但我用来发出请求的模块不是吗?

1 个答案:

答案 0 :(得分:1)

您的主规则始终匹配所有内容,并始终修改URL。理解L标志只是停止在当前迭代中寻找更多匹配规则,并且它再次使用重写的URL循环。请参阅重写实际执行的explanatory diagram。在像您这样的简单情况下,使用END标志就足够了,否则您的规则必须与初始请求匹配且与重写的URL匹配。

P.S。:不要对任何进行更改的内容使用GET请求,这是POST等的用途。

P.P.S。您不需要添加查询字符串的路径,PHP应该能够在$_SERVER['REQUEST_URI']

中查看请求