网络服务器

通常使用前端控制器模式将 Web 服务器接收到的适当 HTTP 请求汇集到单个 PHP 文件中。下面的说明解释了如何告诉您的 Web 服务器将 HTTP 请求发送到您的 PHP 前端控制器文件。

PHP内置服务器

在终端中运行以下命令以启动 localhost Web 服务器,假设./public/是带有文件的公共可访问目录index.php

cd public/
php -S localhost:8888

如果你不使用index.php作为你的入口点然后适当地改变。

警告:内置网络服务器旨在帮助应用程序开发。它还可用于测试目的或用于在受控环境中运行的应用程序演示。它无意成为功能齐全的 Web 服务器。它不应该在公共网络上使用。

阿帕奇配置

确保mod_rewrite安装并启用了 Apache 模块。为了启用,mod_rewrite您可以在终端中键入以下命令:

sudo a2enmod rewrite
sudo a2enmod actions

确保您的.htaccessindex.php文件位于同一个可公开访问的目录中。.htaccess文件应包含以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

为确保该public/目录不会出现在 URL 中,您应该 使用以下内部重定向规则在目录.htaccess上方添加第二个文件:public/

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

这些.htaccess文件需要重写 URL。

确保启用 Apache 的mod_rewrite模块,并且您的虚拟主机配置了该AllowOverride选项,以便.htaccess可以使用重写规则:为此,/etc/apache2/apache2.conf必须在具有 root 权限的编辑器中打开文件。

<Directory ...>指令从更改AllowOveride NoneAllowOveride All

例子

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

最后,必须重新加载 Apache 的配置。要重新启动 Apache Web 服务器,请输入:

sudo service apache2 restart

此命令适用于大多数 Debian/Ubuntu 变体。对于所有其他 Linux 发行版,请查阅特定 Linux 发行版的文档以了解如何重新启动 Apache。

在子目录中运行

此示例假定前端控制器位于public/index.php.

要将子目录“重定向”到前端控制器,请 在目录.htaccess上方创建第二个文件public/

第二个.htaccess文件应包含以下代码:

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

您还可以设置基本路径,以便路由器可以将来自浏览器的 URL 与路由注册中设置的路径相匹配。这是通过setBasePath()方法完成的。

$app->setBasePath('/myapp');

阅读更多

Nginx 配置

这是域的 Nginx 虚拟主机配置示例example.com它在端口 80 上侦听入站 HTTP 连接。它假设 PHP-FPM 服务器在端口 9123 上运行。您应该使用您自己的值更新server_nameerror_logaccess_log和指令。rootroot指令是您应用程序的公共文档根目录的路径;你的 Slim 应用程序的 index.php前端控制器文件应该在这个目录中。

server {
    listen 80;
    server_name example.com;
    index index.php;
    error_log /path/to/example.error.log;
    access_log /path/to/example.access.log;
    root /path/to/public;

    location / {
        try_files $uri /index.php$is_args$args;
    }

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9123;
    }
}

球童

Caddy 配置位于/etc/caddy/Caddyfile. Caddy 需要php-fpm并运行 FPM 服务器。假设 FPM 套接字位于/var/run/php/php-fpm.sock,而您的应用程序位于/var/www,以下配置应该开箱即用。

监听任何请求的 HTTP 配置

:80 {
        # Set-up the FCGI location
        php_fastcgi unix//var/run/php/php-fpm.sock
        # Set this path to your site's directory.
        root * /var/www/public
}

使用自签名证书的 HTTPS 配置

:443 {
        tls internal
        # Set-up the FCGI location
        php_fastcgi unix//var/run/php/php-fpm.sock
        # Set this path to your site's directory.
        root * /var/www/public
}

信息系统

确保Web.configindex.php文件位于同一公共可访问目录中。Web.config文件应包含以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="slim" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

lighttpd

您的 lighttpd 配置文件应该包含此代码(以及您可能需要的其他设置)。此代码需要 lighttpd >= 1.4.24。

url.rewrite-if-not-file = ("(.*)" => "/index.php/$0")

这假定 Slimindex.php位于项目的根文件夹中(www root)。

从子目录运行

如果您想从服务器根目录中的子目录运行您的 Slim 应用程序而不是创建虚拟主机,您可以$app->setBasePath('path-to-your-app')AppFactory::create(). 假设您的服务器的根目录是/var/www/html/并且您的 Slim 应用程序的路径是/var/www/html/my-slim-app您可以将基本路径设置为$app->setBasePath('/my-slim-app').

<?php
use Slim\Factory\AppFactory;
use Slim\Middleware\OutputBufferingMiddleware;
// ...
$app = AppFactory::create();
$app->setBasePath('/my-slim-app');
// ...
$app->run();