http://www.webmasterbase.com/article.php/999/12

 

아파치를 이용해서 위와 같은 url로 스크립트를 실행시킬 수 있는
3가지 방법에 대해 알아보겠습니다.

 

1. 아파치의 look back 기능을 이용한다.
아파치는 기본적으로 사용자가 요청한 리소스가 없을 경우 backward 방식으로 url을 탐색합니다.
http://www.webmasterbase.com/article.php/999/12” URL의 경우 12라는 디렉토리나 파일이

없으면 다시 999라는 디렉토리나 파일을 찾고 그것도 없으면 article.php를 실행하게 되죠.

 

따라서 “http://www.webmasterbase.com/article.php?article=999&number=12” 와 같은 url을
http://www.webmasterbase.com/article.php/999/12” 처럼 단순하게 바꿀수 있습니다.

이 경우 $_SERVER[’PATH_INFO’]에서는 “/999/12″ 라는 문자열이 저장되는데 이것을

article.php에서 원하는 방식으로 파싱하면 됩니다.

 

예제)
$uri = explode(”/”, $_SERVER[’PATH_INFO’]));
$article = $uri[1];
$number = $uri[2];

 

단점:

검색엔진에 해당페이지(http://www.webmasterbase.com/article.php/999/12)가 등록이 안될

가능성이 있습니다. 참고로, google 에서는 정상적으로 등록이 됩니다.

2. 두번째 방법은 .htaccess 파일을 이용하는 겁니다.
.htaccess 파일내에

 

ErrorDocument 404 /article.php

 

이렇게 적어 놓으면 아파치가 요청받은 리소스를 찾지 못할경우 에러메세지를 출력하는 대신에
자동으로 /article.php 파일로 리다이렉트를 시켜버리게 됩니다.

그러므로 홈페이지의 루트디렉토리 밑에 article.php 파일을 만들어서 아래와 같이 입력해 주면…

 

<?php
header(”HTTP/1.1 200 OK”);
echo $_SERVER[’REQUEST_URI’];
?>

 

http://www.webmasterbase.com/999/12 와 같은 문서를 요청받은 아파치는 마찬가지로 12라는

디렉토리 혹은 파일을 찾게 됩니다. 물론 12라는 디렉토리나 파일은 없죠. 그러므로 이때에는

url을 look back 하는게 아닌 .htaccess 파일에 명시해 놓은데로 요청을 /articles.php로

리다이렉트 시키게 됩니다. 이때 header()함수를 이용해서 요청이 성공적으로 처리되었다는

(200 OK) 것을 강제로 브라우저에게 전송해줍니다.

 

위 방식을 사용할 때는 $_POST[’PATH_INFO’] 변수를 사용할 수 없고 대신에

$_SERVER[’REQUEST_URI’]을 이용하면 됩니다. 마찬가지로 위 변수안에는 /999/12 이라는

문자열이 저장되게 됩니다. 1번 방법보다 URL이 더 간단해 졌죠?

 

단점 : Apache 서버는 위와 같은 형태의 URL 요청을 에러 페이지(article.php)로 보내버리기

때문에 서버의 error logs 가 급격히 증가하게 됩니다.-_-;;;

그리고 article.php에서는 적절한 처리를 해주는 루틴을 추가해줘야겠죠.

 

3. 마지막 3번째 방법은 ForceType Directive 를 이용하는겁니다.
ForceType directive는 기본 설정된 MIME 타입을 오버라이드 해버립니다. 즉, html 페이지를

php로 해석하게도 만들 수 있다는거죠. 여기서 사용할 방법은 확장자가 없는 article 파일을

php 파일로 인식하게끔 하는거죠. 이렇게 된다면…

http://www.webmasterbase.com/article.php/999/12 형태의 URL을
http://www.webmasterbase.com/article/999/12 와 같이 바꿔줄 수 있게됩니다. 더 보기좋죠?

 

2번 방법과 마찬가지로 .htaccess 파일을 손봐주면 됩니다.

 

<Files article>
 ForceType application/x-httpd-php
</Files>

 

위와 같이 “<Files>” 내에 article 이라는 파일명을 적어주는거죠. 그리고 article이라는 파일을

ForceType directive를 이용해서 php 파일로 인식시키는겁니다.

 

단점 : 2번 방법보다 URL이 약간 길어졌습니다.-_-;

총평 :

방법 2와 3의 가장 큰 문제점은 .htaccess 파일을 이용해야 한다는 건데…
현재 제가 사용중인 cafe24의 경우 .htaccess 파일을 사용하지 못하도록 되어있기 때문에
전혀 도움이 안됐다는…ㅠㅠ

 

그리고 위 방법을 이용하면 개인별 서비스를 제공하는 척 하게끔 만들수가 있게됩니다.

예를 들어 블로그 형태의 URL을 이용할 수 있는거죠.

http://www.raysoda.com/comethunter

 

위와 같이 해줄려면 방법 2를 이용해서 처리해주면 되겠죠?

참고 문헌 : http://www.sitepoint.com/article/search-engine-friendly-urls