我是瘦框架的新手。目前在我现有的位于 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)
在 apislim/public 文件夹中,我有这个 .htaccess 文件,如下所示。
重写引擎开启
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(. )::\2$ RewriteRule ^(. ) - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L]
我在公共文件夹中还有 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 间隔服务器错误。
以下步骤是您的 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);方法。更多细节