我在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中的应用程序?也许我错过了两个程序默认添加的标题中的内容,但我用来发出请求的模块不是吗?
答案 0 :(得分:1)
您的主规则始终匹配所有内容,并始终修改URL。理解L
标志只是停止在当前迭代中寻找更多匹配规则,并且它再次使用重写的URL循环。请参阅重写实际执行的explanatory diagram。在像您这样的简单情况下,使用END
标志就足够了,否则您的规则必须与初始请求匹配且不与重写的URL匹配。
P.S。:不要对任何进行更改的内容使用GET请求,这是POST等的用途。
P.P.S。您不需要添加查询字符串的路径,PHP应该能够在$_SERVER['REQUEST_URI']