웹 서비스를 운영하다 보면 URL 주소를 깔끔하게 관리해야 할 때가 있습니다. 예를 들어 아래의 두 URL 중 어떤 것이 더 직관적이고 간결해 보이나요?
- 기존 주소:
http://example.com/kakao/keyboard.php?q=keyword - 변경 주소:
http://example.com/kakao/keyboard?q=keyword
후자처럼 .php 같은 확장자를 숨기면 URL이 간결해져 가독성이 좋아질 뿐만 아니라, 서버에서 어떤 개발 언어를 사용하는지 숨길 수 있어 보안성도 향상됩니다. 또한 깔끔한 RESTful API 주소를 설계할 때도 필수적입니다.
이번 포스팅에서는 Apache 서버의 mod_rewrite 모듈과 .htaccess 파일을 활용하여 URL에서 확장자를 제거하는 방법을 알아보겠습니다.
1. Apache 설정에서 rewrite_module 활성화하기
가장 먼저 Apache 서버가 URL 재작성(Rewrite) 기능을 사용할 수 있도록 모듈을 활성화해야 합니다.
- Apache 설정 파일인
httpd.conf파일을 엽니다. rewrite_module을 검색하여 아래 라인을 찾습니다.- 만약 코드 앞에 주석 기호(
#)가 붙어 있다면 이를 제거해 줍니다.
# 주석(#)이 있다면 제거하여 활성화
LoadModule rewrite_module modules/mod_rewrite.so
💡 참고: 만약 해당 라인이 아예 검색되지 않는다면, Apache 서버에 rewrite 모듈이 설치되어 있는지 확인하고 먼저 설치를 진행해야 합니다. 설정을 변경한 후에는 Apache 또는 Tomcat 서버를 재기동해야 적용됩니다.
2. .htaccess 파일을 이용한 URL 라우팅 설정
모듈 활성화가 완료되었다면, 확장자를 숨기고자 하는 웹 서버의 특정 경로(루트 디렉토리 등)로 이동하여 .htaccess 파일을 생성합니다. (이미 파일이 있다면 아래 내용을 추가합니다.)
방법 A: 특정 파일(keyboard.php)을 매핑하는 방법
특정 API 경로로 들어오는 요청을 특정 PHP 파일로 연결하고 싶을 때 사용합니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 예외 처리: 특정 파일이나 폴더는 제외
RewriteCond $1 !^(keyboard\.php|kakao)
# 요청한 파일이나 디렉토리가 실제로 존재하지 않을 때만 적용
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 모든 요청을 /keyboard.php/주소 형식으로 내부 리다이렉트
RewriteRule ^(.*)$ /keyboard.php/$1 [L]
</IfModule>
방법 B: 모든 PHP 파일의 확장자를 자동으로 숨기는 방법 (추천)
매번 파일을 지정하지 않고, URL 끝에 .php를 붙이지 않아도 자동으로 해당 PHP 파일을 찾아 실행하도록 만드는 범용적인 설정입니다. 위의 방법이 잘 작동하지 않거나 전체 페이지에 적용하고 싶을 때 사용하세요.
<IfModule mod_rewrite.c>
# MultiViews 기능을 활성화하여 매칭 최적화
Options +MultiViews
RewriteEngine On
# 요청한 디렉토리나 파일이 실제로 존재하지 않는 경우
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# URL 끝에 확장자가 없다면 뒤에 .php를 붙여서 내부적으로 실행
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</IfModule>
3. 설정 점검 및 확인
모든 설정을 마치고 웹 서버(Apache/Tomcat)를 재시작한 뒤 브라우저에서 테스트를 진행합니다.
- 기존:
http://www.yourUrl.com/kakao/keyboard.php - 변경 후:
http://www.yourUrl.com/kakao/keyboard
이제 주소창에 .php를 입력하지 않고 /keyboard 만 입력해도 정상적으로 페이지가 로드되는 것을 확인할 수 있습니다. 주소가 한결 간결해져 API 설계나 웹사이트 SEO에도 큰 도움이 됩니다. 정규식 표현은 서비스 구조에 맞게 언제든 수정하여 활용해 보세요!