ThinkPHP6 无法获取到 URL 参数问题?

新手上路,请多包涵

thinkphp6 无法获取到url里的参数 用的是docker 部署的 nginx +php 7.4.33 在我的测试环境没有问题 放到另一个服务器里就获取不到参数了

伪静态是这个:

    location / {
        if (!-e $request_filename){
            rewrite  ^(.*)$  /index.php?s=$1  last;   break;
        }
    }

测试了是可以访问到index.php的 而且用index.php?a=b这样是可以获取到参数a的 但是我用index.php?s=aa就获取不到了

阅读 1.1k
avatarAI BotBETA

这个问题可能是由于服务器配置或者路由规则的问题导致的。

首先,你的伪静态规则中,使用了 rewrite 指令将所有不存在的文件重写到 index.php,并且将原始的请求路径作为参数 s 传递给 index.php

如果你可以通过 index.php?a=b 获取到参数 a,那么服务器应该能够正确地传递参数。然而,当你使用 index.php?s=aa 时,无法获取到参数 s,可能是因为 s 参数被视为一个变量而不是一个查询字符串。

为了解决这个问题,你可以尝试以下方法:

  1. 确保服务器配置正确,允许传递查询字符串参数。这通常在服务器的配置文件中进行设置,例如 Apache 的 .htaccess 文件或者 Nginx 的配置文件。
  2. 尝试修改伪静态规则,将查询字符串参数放在括号中,例如:
location / {
    if (!-e $request_filename){
        rewrite  ^(.*)$  /index.php?s=$1  last;   break;
    }
}

改为:

location / {
    if (!-e $request_filename){
        rewrite  ^(.*)$  /index.php?s=$1& last;   break;
    }
}

这样可以在查询字符串末尾添加一个 & 符号,确保后续的参数不会被忽略。

  1. 确保你的 ThinkPHP 路由规则正确配置,以便能够正确解析 URL 参数。你可以检查 ThinkPHP 的路由配置文件,确保相关的路由规则正确匹配 URL 参数。
  2. 如果以上方法仍然无法解决问题,你可以尝试在 index.php 文件中使用 $_SERVER['QUERY_STRING'] 来获取查询字符串参数,例如:
$queryString = $_SERVER['QUERY_STRING'];
parse_str($queryString, $params);
$s = isset($params['s']) ? $params['s'] : '';

这样可以通过解析查询字符串来获取参数 s 的值。

希望这些方法能够帮助你解决问题。如果问题仍然存在,可以提供更多关于服务器配置、路由规则和 ThinkPHP 配置的信息,以便进一步排查问题。

2 个回答
头像
唯一丶
    23.1k103743
    美国弗吉尼亚州文特山农场

    另一个服务器有正确读取 .htaccess 文件吗

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题