Slim Framework 매뉴얼 웹 서버

웹 서버

웹 서버가 수신하는 적절한 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

.htaccessindex.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_logroot 지시문을 자체 값으로 업데이트해야 합니다. 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.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")

이것은 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();