运行 现有 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>
在 apislim/public 文件夹中,我有如下所示的 .htaccess 文件。
重写引擎开启
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.)::\2$
重写规则 ^(.) - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-f
重写规则 ^(.*)$ %{ENV:BASE}index.php [QSA,L]
我在 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
我是 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>
在 apislim/public 文件夹中,我有如下所示的 .htaccess 文件。
重写引擎开启
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.)::\2$ 重写规则 ^(.) - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^(.*)$ %{ENV:BASE}index.php [QSA,L]
我在 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