运行 现有 apache 网络服务器上的 slim 框架

Running slim framework on existing apache web server

我是 slim 框架的新手。目前在我现有的 centos 7 网络服务器上,我还有其他基于 php 的应用程序 运行。所以目前我的目录结构是这样的。

var/www/html
    phpapp1
    phpapp2
    apislim

我为 apislim 创建的文件夹是用于 slim 框架的。 以下是我所做的确切步骤 1.作曲家创建项目slim/slim-skeleton
2. 我将 slim-skeleton 文件夹重命名为 apislim 3. 我确定所有者是 apache chown -R apache:apache apislim 4. 在 httpd.conf 中,我确保此 AllowOverride 已启用为 All

<Directory "/var/www">
    AllowOverride All
    # Allow open access:
    Require all granted
    Options -Indexes
</Directory>

还有下面我启用了全部

<Directory "/var/www/html">   
    Options -Indexes -FollowSymLinks
    AllowOverride All
</Directory>
  1. 在 apislim/public 文件夹中,我有如下所示的 .htaccess 文件。

    重写引擎开启

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.)::\2$ 重写规则 ^(.) - [E=BASE:%1]

    RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^(.*)$ %{ENV:BASE}index.php [QSA,L]

  2. 我在 public 文件夹中也有 index.php 文件,它也 link 到路由的 src 和主文件夹 apislim 我创建了另一个 .htaccess 文件并添加了这个。

    重写引擎开启 重写规则 ^$ public/ [L] 重写规则 (.*) public/$1 [L]

现在的问题是我希望我现有的应用程序与基于 slim 框架的其余 api 一起工作。所以当我去这个 link

http://*.*.*.*/apislim/
http://*.*.*.*/apislim/public/
http://*.*.*.*/apislim/public/index.php

这两个都不起作用,都给我 403 禁止。然后我检查错误日志,它显示有关 FollowSymLinks 的错误 所以我加了 选项 -Indexes +FollowSymLinks 进入

所以我现在得到的下一个错误是 500 间隔服务器错误。

要使您的 Slim 3 应用程序在子目录中工作,必须执行以下步骤。

目录结构:

  • public/ Web 服务器文件(DocumentRoot
    • .htaccess 前端控制器的 Apache 重定向规则
    • index.php 前端控制器
  • .htaccess 内部重定向到 public/ 目录

文件内容:.htaccess:

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] 

将此容器条目添加到文件中:dependencies.php:

// Activating routes in a subfolder
$container['environment'] = function () {
    $scriptName = $_SERVER['SCRIPT_NAME'];
    $_SERVER['SCRIPT_NAME'] = dirname(dirname($scriptName)) . '/' . basename($scriptName);
    return new Slim\Http\Environment($_SERVER);
};

编辑: 在 Slim 4 中你应该使用 $app->setBasePath($basePath); 方法。 More details