PHP URL rewrite 구현해보기
PHPPHP URL rewrite 구현해보기
fancy url 이라고도 하는 건데요.
보통 php 페이지를 보면 주소가 /user_edit.php 이런식으로 파일명.php 로 끝납니다.
이런거 대신에 /user/edit 로 끝나게 바꿔 보자는 거죠.
물론 codeigniter나 라라벨처럼 프레임워크를 쓰면 단방에 해결됩니다만,
프레임워크를 쓸 만큼은 아니지만 url rewrite를 구현해보고자 하는 분들께 도움이 되었으면 좋겟습니다.
디렉토리 구조
Root
|- .htaccess
|- index.php
|- inc
|- 404.php
|- 기타 action 파일들.php
아파치 .htaccess 수정하기
우선 아파치에서 url write를 할 수 있게 수정해 줍니다.
웹 프로그램 루트에서 .htaccess 파일을 찾습니다.
숨김파일이라서 안보일 수도 있으니 숨김을 해제하시고 수정해 주세요.
물론 웹 서버에 따라서는 .htaccess 파일 자체가 없는 경우도 있습니다.
그럴 경우 그냥 텍스트 파일로 utf-8 형식으로 만들어 주세요.
RewriteEngine On
RewriteRule ^inc/.*$ index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
이 내용을 적어주세요.
index.php 만들기
웹 루트에 index.php 파일을 만들고 다음 내용을 복사합시다.
"/picture/(?'text'[^/]+)/(?'id'\d+)", // '/picture/some-text/51'
'album' => "/album/(?'album'[\w\-]+)", // '/album/album-slug'
'category' => "/category/(?'category'[\w\-]+)", // '/category/category-slug'
'page' => "/page/(?'page'about|contact)", // '/page/about', '/page/contact'
'post' => "/(?'post'[\w\-]+)", // '/post-slug'
'home' => "/" // '/'
);
$uri = rtrim( dirname($_SERVER["SCRIPT_NAME"]), '/' );
$uri = '/' . trim( str_replace( $uri, '', $_SERVER['REQUEST_URI'] ), '/' );
$uri = urldecode( $uri );
foreach ( $rules as $action => $rule ) {
if ( preg_match( '~^'.$rule.'$~i', $uri, $params )) {
foreach ($params as $key => $value) {
if (is_int($key) == false){
$_GET[$key] = $value;
}
}
if (! @include_once( INCLUDE_DIR . $action . '.php' )){
include( INCLUDE_DIR . '404.php' );
}
exit();
}
}
include( INCLUDE_DIR . '404.php' );
?>
$rules 에는 어떤 규칙을 적용할 지 적어주세요.
'picture' => "/picture/(?'text'[^/]+)/(?'id'\d+)", // '/picture/some-text/51'
picture 를 예로 들어보면
url이 '/picture/some-text/51' 일 때 작동하고, 파라미터는 text와 id 라는 뜻입니다.
실제 작동할 파일 만들기
index.php 파일 가장 위에 이렇게 적어주었죠?
define( 'INCLUDE_DIR', dirname( __FILE__ ) . '/inc/' );
그래서 우리는 /inc 디렉토리 아래에 관련 파일을 만들어 줄 꺼에요.
picture 파일 만들기
/inc/picture.php
echo "text :" . $_GET['text'] . " id : " . $_GET['id'];
내용은 적당히 알아서 적어주세요 :)
파일은 기존과 동일하게 파라미터를 $_GET 으로 받으셔서 만들어 주시면 됩니다.
404 파일 만들기
/inc/404.php
echo "오류가 발생했습니다.";
뭐 적당히 html 파일로 만들어 주시면 됩니다.
보안 적용하기
/inc/.htaccess
order deny,allow
deny from all
allow from 127.0.0.1
이 설정은 유저가 /inc/picture.php 를 웹 브라우저에 입력해도 작동하지 않게 해 줍니다.
127.0.0.1 은 로컬호스트, 즉 자신의 컴퓨터입니다.
즉 자신의 컴퓨터에서만 파일을 실행할 수 있다는 뜻입니다.
외부에서 접속하면 아파치 웹서버에서 막아줍니다.
'PHP' 카테고리의 다른 글
php 업로드 용량 설정 변경 (0) | 2017.11.17 |
---|---|
php로 gmail 보내기 (0) | 2017.11.17 |
PHP 리다이렉트 구현 (0) | 2017.11.16 |
PHP 날짜 차이 계산하기 (0) | 2017.11.15 |
PHP JSON 다루기 (0) | 2017.11.14 |