我遇到了一些让我头疼的服务器请求问题。情况是,我的一些表单可以毫无问题地 POST 到服务器,但其他表单则从 HTTPS 重定向到 HTTP,重定向到相同的 URL,但采用 GET 请求,因此,当我的脚本收到请求时,没有 POST 数据。
我已经检查了我的 .htaccess,看起来没什么问题,但是,我也不明白为什么会导致这种情况(我承认我不是 Apache 超级明星)。
我添加了一个调试器来暂停应用程序的第一行代码,而此时的请求已经发生改变,这就是我来到这里的原因。
第一张图片显示了从页面发送的安全 POST 请求
第二张图片展示了不安全的重定向作为 GET 请求
我的.htaccess
样子是这样的
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Redirect all HTTP requests to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Ensure the correct handling of index.php, site.php, and cp.php
RewriteRule ^(index|site|cp)\.php$ - [L]
RewriteRule ^(css|js|img)/ - [L]
RewriteRule ^favicon.ico$ - [L]
# Redirect all other requests to the appropriate PHP file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [NC,L,QSA]
</IfModule>
如您所见,我有 3 个进入应用程序的入口点index.php
,分别用于访客请求、site.php
经过身份验证的用户和cp.php
管理员(控制面板)。这些入口点有助于路由,并且非常相似(引导系统、身份验证、处理请求)。
我现在正在重写的表单是发生这种情况的第二个表单,除了动作属性之外,它们看起来相同。我尝试过使用和不使用 enctype,尝试过不同的浏览器,并且我重新启动并重建了 docker 容器来查找此问题的原因。
除了我构建的框架之外没有其他框架,这是原始的 PHP,但我认为我们可以看到这不是代码问题。
7
.htaccess
而不是将其内容包含到<Directory>
主配置中的适当块中?)–
header(
调用并对其进行检测。–
–
–
.htaccess
)?如果没有,为什么没有?但如果有,为什么没有重定向循环(或者有)?初始 302 重定向的完整 HTTP 响应标头是什么?你看到Server
标头了吗?当“浏览器”遇到 302 重定向时,“浏览器”(不是服务器)会将 POST 请求转换为 GET,并且 POST 数据自然会丢失 – 这是预期的行为。问题在于触发此 302 的位置 – 您发布的内容中没有任何内容可以在这方面提供帮助。(标Server
头可能会提供线索。)–
|