POST请求在URL末尾使用/,但不能没有/

时间:2019-05-28 15:22:07

标签: apache http

我的服务器上有一个小脚本来捕获POST请求,如下所示:

<?php

$jsonformat = json_encode($_POST);

$jsonFile = fopen("data.json", "w") or die("Unable to open file!");
fwrite($jsonFile, $jsonformat);
fclose($jsonFile);
echo "success";

?>

上面的脚本名为index.php,并放置在http://example.com/data/report/

我还有另一个用于发送POST请求的脚本,如下所示:

<?php

$url = 'http://example.com/data/report/';

$data = array('key1' => 'value1', 'key2' => 'value2');

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

var_dump($result);

?>

这两个脚本效果很好。但是在另一种情况下,$ url像这样:'http://example.com/data/report'请注意,URL末尾没有“ /”。在末尾没有“ /”的情况下,仍会生成服务器上的json文件,但它为空。

我无法在网址中添加“ /”。它是一个我无法编辑代码的设备,但我知道它的末尾缺少“ /”,因此上面的代码仅是我的示例。我想我已转载了这个问题。

所以我的问题是: -为什么使用“ /”而不是不使用? -我可以在服务器上执行任何操作,因此http://example.com/data/reporthttp://example.com/data/report/相同

我可以访问服务器上的.htaccess

1 个答案:

答案 0 :(得分:0)

您是否有.htaccess文件或正在重写网址的任何内容?

例如,我在我的一行中像这样:

RewriteRule ^([^\.]+)$ $1.php [L,NC,QSA]

这将从浏览器URL栏中删除文件扩展名。因此,如果我转到mywebsite.com/mydirectory/myfile,它将自动假定为mywebsite.com/mydirectory/myfile.php

如果我去mywebsite.com/mydirectory,它将尝试将其重写为mywebsite.com/mydirectory.php,除非我将/放在末尾,以便它知道它是一个目录。