您好我正在尝试从我的localhost请求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文件包含以下网址规则:
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 [&#34; REQUEST_METHOD&#34;]请求方法保持零值。
答案 0 :(得分:0)
添加它以禁用MultiViews:
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]