在现有的 apache web 服务器上运行超薄框架

use*_*398 4 php apache slim

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

var/www/html
    phpapp1
    phpapp2
    apislim
Run Code Online (Sandbox Code Playgroud)

我创建的 apislim 文件夹是用于瘦框架的。以下是我所做的确切步骤 1. composer create-project 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>
Run Code Online (Sandbox Code Playgroud)

同样在下面我启用了所有

<Directory "/var/www/html">   
    Options -Indexes -FollowSymLinks
    AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)
  1. 在 apislim/public 文件夹中,我有这个 .htaccess 文件,如下所示。

    重写引擎开启

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

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

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

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

现在的问题是我希望我现有的应用程序与这个基于纤薄框架的 rest api 一起工作。所以当我去这个链接

http://*.*.*.*/apislim/
http://*.*.*.*/apislim/public/
http://*.*.*.*/apislim/public/index.php
Run Code Online (Sandbox Code Playgroud)

这两种方法都不起作用,都禁止给我 403。然后我检查错误日志它显示关于 FollowSymLinks 的错误所以我添加了 Options -Indexes +FollowSymLinks Into

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

oda*_*dan 8

以下步骤是您的 Slim 3 应用程序在子目录中工作所必需的。

目录结构:

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

文件内容.htaccess::

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
Run Code Online (Sandbox Code Playgroud)

文件内容public/.htaccess::

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

将此容器条目添加到文件中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);
};
Run Code Online (Sandbox Code Playgroud)

编辑:在 Slim 4 中,您应该使用该$app->setBasePath($basePath);方法。更多细节