2012-12-10 2 views
1

Ubuntu 12.04 서버에서 mod_rewrite를 사용하여 URL을 읽기 쉽게하려고하지만 이미지 및 CSS 파일에 대한 예외를 추가하려고합니다.RewriteConding가 무시되고 있습니까?

내 입력 URL의 형식은 \controller\action이며이 URL은 index.php?controller=controller&action=action으로 다시 작성됩니다. 이미지 또는 CSS 파일을 지정하면 URL을 다시 쓰지 않도록 예외를 추가하고 싶습니다. \images\image.jpg은 다시 쓰지 않습니다. 다음과 같이

내 htaccess로 코드는 다음과 같습니다

RewriteEngine on 
RewriteCond %{REQUEST_URI} !(\.gif|\.jpg|\.png|\.css)$ [NC] 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L] 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L] 

내 다시 쓰기 코드가 잘 작동하고 URL이 의도 한대로 나오고있다, 그러나 나는 이미지를 요청할 경우에도 URL이 계속되고있는 재 -쓴. 내 RewriteCond가 무시되고있는 것처럼 보입니다. 그 이유는 무엇입니까?

답변

0

rewriteCond 규칙은 다음 RewriteRule에만 적용됩니다.

따라서 최소한 secondRewriteRule에 대해 rewriteCond를 반복해야합니다.

아니요 더 나은 할 일은 분명 있습니다. 예를 들어 일반적인 방법은 URL이 실제 정적 ressource와 일치하는지 테스트하는 것입니다. 모든 PHP 코드가 웹 디렉토리 (index.php를 제외한 라이브러리 디렉토리) 외부에 있으면 문서 루트에서 직접 사용할 수있는 모든 정적 자원은 js 파일, css 파일 또는 이미지 파일 일 수 있습니다.

그래서이 그 일의 일반적인 방법입니다

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L] 

그러나 이것은 출발점이 될 것입니다. 우리는 확실히 이것에 대한 2 가지 규칙을 피하는 것을 발견 할 수 있습니다. (아마도 나중에 살펴볼 것입니다)

0

RewriteCond는 첫 번째 RewriteRule에만 적용되며, 두 번째 규칙에 따라 재현되어야합니다. 그러나 기존 저작물을 제외하기 전에 다시 작성하지 않는 규칙을 추가하는 것이 더 좋습니다.

# Do nothing for files which physically exist 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

# your MVC rules 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)$ test.php?controller=$1&action=$2 [L] 
RewriteRule ^([a-zA-z]+)/([a-zA-z]+)/([^/]*)$ test.php?controller=$1&action=$2&$3 [L] 
관련 문제