[컴][웹][php] klein 설치

klen / klein 사용 방법 / klein installation / klein 설치 및 아파치 설정


klein

현재 web page 에 restful api 를 추가하려고 찾다가 보니, route library 로 klein 가 좋다고 해서 한 번 사용해 보려 한다.
보통 아주 옛날에 php 를 쓰시는 분들은 file path 로 url 을 mapping 시켜서 사용하는 경우가 많다. 하지만 이 route library 를 이용해서 모든 url 에 대한 request 를 하나의 .php 로 모으고, 여기서 다시 routing 을 해주는 방식이다. 그래서 아파치 설정도 같이 필요하다.


klein library 설치

composer(https://getcomposer.org/) 로 설치하는 것을 권하고 있다. 그래서 composer 로 설치했다.
c:\proj>composer require klein/klein


RewriteEngine on

mod_rewrite

httpd.conf 에서 mod_rewrite 를 사용하도록 지정하자.
LoadModule rewrite_module modules/mod_rewrite.so


RewriteEngine On

그리고 httpd-vhosts.conf 에서
모든 url 을 index.php 로 오도록 하자. 이것은 apache 에서 설정 해 주면 된다.

아래처럼 RewriteEngine 을 사용하면 된다. 

<VirtualHost *:8081>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "c:/proj/src"
    ServerName localhost
    ServerAlias gnuboard.com
    RewriteEngine On
    RewriteRule "^/.*" "c:/proj/src/api.php"
    ErrorLog "logs/gnuboard-error.log"
    CustomLog "logs/gnuboard-access.log" common
    <Directory "c:/a/programming/php/gnuboard/src">
        #
        # Possible values for the Options directive are 


RewriteRule 을 아래처럼 설정하면 모든 URL 이 c:/proj/src/api.php 로 연결된다.
RewriteRule "^/.*" "c:/proj/src/api.php"
아래 처럼 해도 똑같다.
RewriteRule "." "c:/proj/src/api.php"

RewriteRule 을 아래처럼 설정하면 모든 api 로 시작하는 URL 이 c:/proj/src/api.php 로 연결된다.
RewriteRule "^/api/.*" "c:/proj/src/api.php"

즉,
http://localhost:8080/api/hello-world
를 입력하면
c:/proj/src/api.php
가 호출될 것이다.


klein hello-world

위처럼 "^/api/.*" 를 설정했을 때 klein 에서도 url 은 "/api/hello-world" 처럼 해줘야 한다.

<?php
// klein  - c:/proj/src/api/api.php

require_once __DIR__ . '/../vendor/autoload.php';

$klein = new \Klein\Klein();

$klein->respond('GET', '/hello-world', function () {
    return 'Hello World!';
}); // not working
$klein->respond('GET', '/api/hello-world', function () {
    return 'Hello World!';
});
$klein->dispatch();
?>


See Also


  1. composer 의 autoload 에 자신의 namespace 를 추가하는 방법



References

  1. [HOWTO] Rewrite all urls to one index.php in Apache · GitHub

댓글 없음:

댓글 쓰기