【问题标题】:Request method GETS Zero value请求方法GETS 零值
【发布时间】:2018-04-14 22:14:42
【问题描述】:

您好,当从本地主机请求 URL 时,我正在尝试获取请求方法。我已经完成了 URL 重写,因此 http://localhost/API2/products.php?product_id=1 变为 http://localhost/API2/products.php/products/1 结果 $request_method=$_SERVER["REQUEST_METHOD"];应该持有 GET 作为方法。而是每次都为零。

my.htaccess 文件包含以下 url 规则:

      RewriteEngine On # Turn on the rewriting engine
      RewriteRule ^products/?$ products.php [NC,L]
      RewriteRule ^products/([0-9]+)/?$ products.php?product_id=$1 [NC,L]

我在 learn.php 中的 curl 命令是:

   <?php
    $url = 'http://localhost/API2/products';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response_json = curl_exec($ch);
    curl_close($ch);
    $response=json_decode($response_json, true);

   ?>

因此,当我运行我的 curl 命令时,它是 learn.php,它既不会向我显示任何数据,因为 $request_method=$_SERVER["REQUEST_METHOD"] 请求方法的值为零。

【问题讨论】:

  • 您的问题是从 product.php?product_id=1products/1,但您的重定向代码却相反...?无论如何,如果 URL 的格式为 ?key=value,$_GET 将只包含值。在 /page/key/value 上,$_GET 将没有任何内容。
  • 没有问题是当我运行我在 learn.php 文件中的 curl 命令时,它不会进入 switch 案例,例如,如果它的 POST post case 应该运行显示 request_method 没有得到正确的值.
  • 或者我猜我的 curl 请求没有被执行。有什么想法吗?

标签: php .htaccess curl


【解决方案1】:

添加它以禁用多视图:

Options -MultiViews

Apache docs on mod_negotiation 描述了多视图选项在启用时的作用:

如果 服务器收到对 /some/dir/foo 的请求,而 /some/dir/foo 没有 存在,然后服务器读取目录查找所有名为 foo.*,并有效地伪造了一个类型映射,其中命名了所有这些 文件,为它们分配相同的媒体类型和内容编码 如果客户按名字要求其中一个,就会有。那么它 选择最符合客户要求的匹配项,然后返回 文件。

用途:

# disable products -> products.php
Options -MultiViews
# Turn on the rewriting engine
RewriteEngine On
RewriteRule ^products/?$ products.php [NC,L]
RewriteRule ^products/([0-9]+)/?$ products.php?product_id=$1 [NC,L]

【讨论】:

  • 这不起作用,而是当我尝试从我的存储库运行任何 php 文件时,它会给出内部服务器错误。问题是 curl 命令没有被执行,这意味着 server_request 方法不持有 GET、POST、PUT 或 DELETE。所以如果你能帮忙的话。
  • 因为 mod_negotiation(即 MultiViews)在 mod_rewrite 之前处理 URL。
  • 清空缓存或者换个浏览器试试!
  • 它不工作。问题是我正在从 curl 命令中检索数据,这意味着它是一个 GET 方法。在我的其他产品 .php 文件中,我无法获得 $request_method=$_SERVER["REQUEST_METHOD"];这样我就可以使用 switch case 根据请求类型返回数据。请同时考虑 url 重写。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多