【问题标题】:Slim Framework remove public folder in URLSlim Framework 删除 URL 中的公用文件夹
【发布时间】:2021-10-07 02:30:18
【问题描述】:

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

当前网址: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/$1 [L]

【问题讨论】:

    标签: php .htaccess slim


    【解决方案1】:

    这是一个“内部重定向”到公共目录的示例:

    RewriteEngine on
    RewriteRule ^$ public/ [L]
    RewriteRule (.*) public/$1 [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

    【讨论】:

    • 但是还是不行。我将改为更新问题
    • 我也更新了答案。
    • 我用的是 slim 3 :(
    • 你能升级到 Slim 4 吗?我更新了 Slim 3 的答案。
    • 不,我不想升级到 Slim 4。它终于可以工作了,谢谢 :)
    猜你喜欢
    • 2018-04-22
    • 2014-12-04
    • 2018-05-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多