본문 바로가기
Development/Web

[리눅스][CentOS] RewriteEngine 사용법 및 주의사항

by 푸민 2021. 7. 2.
반응형

안녕하세요 푸민입니다.

이번에 php 초기 설정하면서 한가지 막히던 부분이 있어서 기록 남깁니다.

 

1. RewriteEngine

아파치에서 사용되는 rewrite 모듈인 RewriteEngine은 정규식을 이용하여 다양한 작업을 할 수 있습니다.

  • URL 주소 수정 : 예를들어 test/article.php?article_id=32 와 같은 url을 test/article/32 와 같이 변경이 가능합니다.
  • 외부 링크 차단 : 주소를 확인하여 트래픽 차단이 가능합니다.
  • 주소 리다이렉트 : 페이지가 없을 경우 다른 주소로 이동이 가능합니다.(404페이지 처리)

리눅스 centos rewrite 모듈 - 아파치 사이트

 

2. Rewrite 모듈 사용 방법

# 설정값 변경을 위해서 vi 편집기로 실행합니다.
vi /etc/httpd/conf/httpd.conf

# Directory 설정에서 AllowOverride 설정을 변경합니다.
# 기존
<Directory "/var/www/html">
	Require all granted
    AllowOverride None
</Directory>
#변경
<Directory "/var/www/html">
	Require all granted
    AllowOverride All
</Directory>

# 저장 후 종료합니다.
:wq

이후 서버를 재시작합니다.

그리고 사용하기 원하는 경로에 .htaccess 파일을 만들어서 룰을 작성해줍니다.

# 루트 경로로 이동합니다.
cd /var/www/html

# .htaccess 파일을 생성합니다.
touch .htaccess

# vi 편집기로 실행
vi .htaccess

# 엔진 사용을 On 해주시고 원하는 룰을 작성합니다.
RewriteEngine On
RewriteRule ^article article.php [NC]

# 저장 후 종료합니다.
:wq

 

3. 룰 적용 확인

웹사이트에 article.php 페이지 접속시 기존에는 

http://{IP 또는 도메인}/article.php 로 접속을 하였는데 위 설정 후에는

http://{IP 또는 도메인}/article 로 접속을해도 동일하게 표시가 됩니다.

 

4. 주의사항

한가지 작업하다가 RewriteRule이 적용이 되는데 안되는게 발생하여 체크해본 사항입니다.

<Directory "/var/www/html">
	Require all granted
#    AddType application/x-httpd-php .php .jsp
    AllowOverride All
</Directory>

위와 같이 httpd.conf 에서 주석 처리된 부분은 주석 풀고 설정하게 되면 php 파일에 대해서 자동으로 비슷한 경로를 찾아서 실행해줍니다. 

RewriteEngine On
RewriteRule ^article/(.*)$ article.php?seq=$1 [NC]
RewriteRule ^article article.php [NC]

.htaccess 의 위 부분에서 문제가 되었습니다.

기존 코드중에서 article 상세 정보를 내려주는 방식으로 article/32 와 같이 seq 값을 던지면 변환하여 seq를 파라미터로 전달하였습니다. 즉 원하는 결과는 article > article.php 로 실행 article/32 > article.php?seq=32 였습니다.

하지만 주석 부분 설정을 하게되면 article/32로 호출을 하여도 자동으로 article > article.php 순으로 호출이 되어서 파라미터 전달이 안되었습니다. 

혹시 개발하시는데 참조가 되면 좋겠네요.

 

Rewrite 룰에 대한 자세한 사용법은 다시 올릴게요.

반응형

댓글