首页 > 解决方案 > 如何在 PHP 中接受“子目录”作为参数

问题描述

我目前正在重新制作一个不再维护的封闭源 API。我很幸运暂时仍然能够使用 API,但我不确定它还能使用多久。

本质上,API 以 JSON 格式返回有关游戏的信息,应用程序使用此数据。

下面是一个示例 API 调用:

/api/updates/game/version

据我所知,他们不只是每个版本都有一个文件,我相信它将所有“子目录”作为获取请求处理(我可能是错误的)

我的问题是如何将一个文件夹中的所有子目录转到 PHP 文件,并提供有关调用的信息。

最后也是最困难的事情是,我如何在没有重定向的情况下做到这一点。由于应用程序的制作方式,它不遵循重定向,并且会在 301 处出错(正如我在尝试对每个版本文件夹使用 index.php 时发现的那样)。

谢谢!

标签: phpapachehttp

解决方案


.htaccess

您必须对您的.htaccess. 你想要的是一个 PHP 文件,它接收对里面目录的所有请求。把它放进你的.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api/
    RewriteRule ^api\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /api/api.php [L]
</IfModule>

这会将所有请求指向同一个文件:/api/api.php

例子:

/api/game/xy/ -> /api/api.php
/api/game/xy/version -> /api/api.php
/api/hello ->/api/api.php

/api/api.php

现在,在您的/api/api.php. 中获取请求的路径 $_SERVER['REQUEST_URI']

在下面的示例中,我添加了str_replace, 因为在 Windows 上路径包含\而不是/.

<?php
// /api/api.php
$requestURI = str_replace('\\', '/', $_SERVER['REQUEST_URI']);

推荐阅读