Slim Framework 删除 URL 中的 public 文件夹

Slim Framework remove public folder in URL

有一个类似的 ,但我仍然需要在我的 URL 中包含 public 文件夹。

当前 URL:https://my-domain.com/api/public/pins

我想要的:https://my-domain.com/api/pins

这是我的项目结构

如您所见,我有 2 个 .htaccess 文件,我应该在哪里以及如何编写 .htaccess 脚本来重定向 public 文件夹?

.htaccesspublic 文件夹中

# Redirect to front controller
RewriteEngine On

# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

.htaccessroot 文件夹中

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/ [L]

这是一个“内部重定向”到 public 目录的例子:

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/ [L]

public/ 目录中的 .htaccess 可能包含以下内容:

# Redirect to front controller
RewriteEngine On
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

在 Slim 4 中:确保设置正确的 Slim basePath。

$app->setBasePath('/api');

查看文档:https://www.slimframework.com/docs/v4/start/web-servers.html#apache-configuration

在 Slim 3 中:按如下方式修补 Slim 环境。

$container['environment'] = function () {
    $scriptName = $_SERVER['SCRIPT_NAME'];
    $_SERVER['REAL_SCRIPT_NAME'] = $scriptName;
    $_SERVER['SCRIPT_NAME'] = dirname(dirname($scriptName)) . '/' . basename($scriptName);

    return new Slim\Http\Environment($_SERVER);
};

Example