
웹 서버
웹 서버가 수신하는 적절한 HTTP 요청을 단일 PHP 파일로 전달하기 위해 front-controller 패턴을 사용하는 것이 일반적입니다. 아래 지시사항은 PHP 전면 컨트롤러 파일로 HTTP 요청을 보내도록 웹 서버에 지시하는 방법을 설명합니다.
PHP 기본 제공 서버
.public/
가 index.php
파일로 공용 액세스 가능한 디렉토리라고 가정하고 터미널에서 다음 명령을 실행하여 localhost 웹 서버를 시작합니다.
cd public/
php -S localhost:8888
만약 index.php’를 진입점으로 사용하지 않을 경우 적절히 변경하십시오.
Warning: 빌트인 웹 서버는 애플리케이션 개발을 돕기 위해 설계되었다. 또한 테스트 목적이나 통제된 환경에서 실행되는 응용 프로그램 시연에도 유용할 수 있습니다. 모든 기능을 갖춘 웹 서버가 되도록 의도된 것은 아닙니다. 그것은 공중파에서 사용해서는 안 된다.
Apache 구성
Apache ‘mod_rewrite’ 모듈이 설치되고 활성화되어 있는지 확인합니다. ‘mod_rewrite’를 활성화하려면 터미널에 다음 명령을 입력하십시오.
sudo a2enmod rewrite
sudo a2enmod actions
.htaccess
및 index.php
파일이 공용 액세스 가능한 동일한 디렉터리에 있는지 확인하십시오. .htaccess
파일에는 다음 코드가 포함되어야 합니다.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
이 .htaccess
파일은 URL을 다시 작성해야 합니다.
.htaccess
다시 쓰기 규칙을 사용할 수 있도록 Apache의 mod_rewrite
모듈을 사용하도록 설정하고 가상 호스트가 AllowOverride
옵션으로 구성되어 있는지 확인하십시오. 이렇게 하려면 /etc/apache2/apache2.conf
파일을 루트 권한이 있는 편집기에서 열어야 합니다.
<Directory...>
에서 ‘AllowOveride None’에서 AllowOveride All로 지시합니다.
예
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
마지막으로 Apache의 구성을 다시 로드해야 합니다. Apache 웹 서버를 재시작하려면 다음을 입력하십시오.
sudo service apache2 restart
이 명령은 대부분의 데비안/우분투 변형에서 작동합니다. 다른 모든 Linux 배포의 경우 Apache를 다시 시작하는 방법에 대해 알아보려면 해당 Linux 배포 문서를 참조하십시오.
하위 디렉토리에서 실행
이 예에서는 front-controller가 public/index.php
에 위치한다고 가정합니다.
전면 컨트롤러의 하위 디렉토리를 “리디렉션”하려면 public/
디렉토리 위에 두 번째 .htaccess
파일을 생성합니다.
두 번째 .htaccess
파일에는 다음 코드가 포함되어야 합니다.
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
라우터가 라우트 등록에 설정된 경로와 브라우저의 URL을 일치시킬 수 있도록 기본 경로를 설정할 수도 있습니다. 이는 ‘setBasePath()’ 메소드를 사용하여 수행됩니다.
$app->setBasePath('/myapp');
Read more
Nginx 구성
도메인 example.com
에 대한 Nginx 가상 호스트 구성의 예입니다. 포트 80에서 인바운드 HTTP 연결을 수신합니다. PHP-FPM 서버가 포트 9123에서 실행 중인 것으로 가정합니다. server_name
,error_log
, access_log
및 root
지시문을 자체 값으로 업데이트해야 합니다. root
지시어는 응용 프로그램의 공용 문서 루트 디렉터리의 경로이며, 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;
}
}
HipHop 가상 시스템
HipHop Virtual Machine 구성 파일에는 필요한 다른 설정과 함께 아래의 코드가 포함되어 있어야 합니다. Slim 앱의 문서 루트 디렉터리를 가리키도록 ‘SourceRoot’ 설정을 변경해야 합니다.
Server {
SourceRoot = /path/to/public/directory
}
ServerVariables {
SCRIPT_NAME = /index.php
}
VirtualHost {
* {
Pattern = .*
RewriteRules {
* {
pattern = ^(.*)$
to = index.php/$1
qsa = true
}
}
}
}
IIS
Web.config
및 index.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")
이것은 Slim의 ‘index.php’가 프로젝트의 루트 폴더(www root)에 있다고 가정합니다.
하위 디렉토리에서 실행
가상 호스트를 생성하는 대신 서버의 루트에 있는 하위 디렉터리에서 Slim 애플리케이션을 실행하려면 AppFactory::create()
바로 뒤에 $app->setBasePath('path-to-your-app')
를 구성할 수 있습니다. 서버의 루트가 /var/ww/html/
이고 슬림 애플리케이션의 경로가 /var/ww/html/my-slim-app
이라고 가정하면 기본 경로를 $app->setBasePath('/my-lim-app')
로 설정할 수 있습니다.
<?php
use Slim\Factory\AppFactory;
use Slim\Middleware\OutputBufferingMiddleware;
// ...
$app = AppFactory::create();
$app->setBasePath('/my-slim-app');
// ...
$app->run();