짧은주소 RewriteRule에서 파일확장자 삭제 문의
본문
안녕하세요.
위와 같은 주소를 http://XXX.com/about 이런 식으로 url에서 .php 파일 확장자를 삭제하고 싶습니다.
현재 'Apache 설정' 기본형태로 되어 있고,
검색을 해보니
RewriteRule ^([0-9a-zA-Z_]+)$ $1.php [NC,L]
대충 위와 비슷한 형식으로 수정하는 것 같던데,
위 코드를 삽입하면 제대로 적용이 되지 않네요.
RewriteCond 이것도 따로 추가해주어야 하는지, 그리고 위 코드도 어떻게 변형을 해야하는지
궁금합니다.
답변 2
그누보드의 짧은 주소와 같이 사용하기는 어렵습니다.
다음과 같이 하는 경우, php 확장자 제거는 되지만..
그누보드 짧은 주소 적용에는 문제가 됩니다.
/about 이 게시판 about 룰과, /about.php 룰이 서로 충돌될 수 있기 때문입니다.
#### 그누보드5 rewrite BEGIN #####
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(.*)$ $1.php
RewriteRule ^content/([0-9a-zA-Z_]+)$ bbs/content.php?co_id=$1&rewrite=1 [QSA,L]
RewriteRule ^content/([^/]+)/$ bbs/content.php?co_seo_title=$1&rewrite=1 [QSA,L]
RewriteRule ^rss/([0-9a-zA-Z_]+)$ bbs/rss.php?bo_table=$1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)$ bbs/board.php?bo_table=$1&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/write$ bbs/write.php?bo_table=$1&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$ bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 [QSA,L]
</IfModule>
#### 그누보드5 rewrite END #####
둘 중 하나를 포기해야 될 수 있습니다. (일반 파일 확장자 제거 & 그누보드 짧은주소)
꼭 같이 적용하고 싶다면 다음과 같은 방법을 생각해 볼 수 있습니다.
#### 그누보드5 rewrite BEGIN #####
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(about|company)$ $1.php
RewriteRule ^content/([0-9a-zA-Z_]+)$ bbs/content.php?co_id=$1&rewrite=1 [QSA,L]
RewriteRule ^content/([^/]+)/$ bbs/content.php?co_seo_title=$1&rewrite=1 [QSA,L]
RewriteRule ^rss/([0-9a-zA-Z_]+)$ bbs/rss.php?bo_table=$1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)$ bbs/board.php?bo_table=$1&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([^/]+)/$ bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/write$ bbs/write.php?bo_table=$1&rewrite=1 [QSA,L]
RewriteRule ^([0-9a-zA-Z_]+)/([0-9]+)$ bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 [QSA,L]
</IfModule>
#### 그누보드5 rewrite END #####
=> /about 은 /about.php 로, /company 는 /company.php 로 적용됩니다.
rewritecond 는 지금상황에서는 핵심 원인이 아닙니다.
RewriteCond %{REQUEST_FILENAME} !-d
는 '실제 디렉토리명이 아닌 경우일 때' 아래 조건을 실행하라는 의미입니다. (about 이라는 디렉토리가 있다면.. about 디렉토리 찾기가 우선이 되게 해주는 조건입니다.)
RewriteCond %{REQUEST_FILENAME} !-d
는 '실제 파일명이 아닌 경우일 때' 아래 조건을 실행하라는 의미입니다.
웹 루트에 .htaccess 파일을 다음과 같이 생성하시면 됩니다.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php