2015-01-25 6 views
1

나는 특히 일반적인 문제라고 생각되는 것에 대한 해결책을 찾기 위해 모든 곳에서 수색을 시도했지만 작동하는 것을 찾을 수없는 것 같습니다.예외가있는 모든 요청을 index.php로 리디렉션

저는 mod_rewrite를 사용하여 모든 요청을 내 CMS (index.php)를 통해 리디렉션합니다. 여기에 htaccess로 코드입니다 :

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /blog/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

은 (위의 mod_rewrite를 정확히 내가 난처한 해요 왜 표준 워드 프레스 설치에있는 코드와 동일합니다 내가 다음과 같은 문제에 대한 해결책을 찾을 수없는 방법에 대한)

내 비디오 미리보기 이미지에 일부 이미지 처리를 추가하고 싶습니다. 나는 위대한 작품 PHP 스크립트 (비디오 image.php)를 작성했지만 index.php 리디렉션을 그대로 유지하면서 이미지 URL을 리디렉션하는 수단을 찾을 수없는 것 같습니다. 내가 찾고 코드는 다음과 같이 수행합니다

RewriteRule ^images/video/(.*)/(.*).jpg /images/video/video-image.php?video_image_id=$2&video_image_width=$1 [NC] 

을하지만 위의 코드는 index.php를 내 요청을 보내는 mod_rewrite를와 충돌 것으로 보인다. 그것은 이미지를 video-image.php로 보내거나 내 페이지를 index.php로 리디렉션 할 수 있지만 둘 다 할 수있는 방법일까요?

나 자신을 명확하게 설명하지 못하면 항상 mod_rewrite가 혼란 스럽기 때문에 사과합니다. 모든 PHP 스크립트는 mod_rewrite없이 완벽하게 작동하므로 PHP 문제가 아니라고 확신합니다.

누구든지이 문제에 대해 밝히거나 답변을 제시 할 수 있다면 정말 고맙겠습니다!

+0

기존 RewriteCond/RewriteRule 블록 위에 새 규칙을 주문하십시오. 그리고 일반적으로 모든 곳에서 RewriteRule *을 사용하지 않는 것이 좋습니다. 좀 더 자세하게 설명하거나 해당 copypasta 대신 [FallbackResource] (http://httpd.apache.org/docs/trunk/rewrite/remapping.html#fallback-resource)를 사용하십시오. – mario

+0

@mario 남자, 나는 방금 나 자신을 비웃어야했다. 3 시간 동안 검색하고 시도해 본 결과는 매우 간단하고 총체적으로 이해할 수 있습니다. 당신의 도움을 주셔서 대단히 감사합니다! – Lewis

답변

3

문제의 요지는 다시 쓰기 블록의 순서입니다. 일반적으로 더 구체적인 규칙을 일반 규칙 위에 배치합니다. 귀하의 경우 :

RewriteRule ^images/video/(.*)/(.*).jpg /image 
FallbackResource index.php 

두 가지 더 :

<IfModule mod_rewrite.c> 
</IfModule> 

인가

나중에
# specific 
RewriteRule ^images/video/(.*)/(.*).jpg /images/… 
# generic 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

아파치 2.4을위한 더 나은 방법 대신한다 RewriteCond/규칙 방울의 FallbackResource을 사용하는 것입니다 뭔가해야합니다 일반적으로 사용합니다. Apache 코어 설정에서 조건 적 지시어는 의미가 있습니다. .htaccess RewriteRule 블록은 적당하지 않습니다. mod_rewrite가 런타임에 임의로 해제되는 경우는 거의 없습니다. 그리고 혹시라도 404 Not Found 결과를 보는 대신 사용자 로그에서 HTTP 500 오류를 원합니다.

RewriteBase도 일부 규칙을 단축하거나 거주지를 요약 할 수 있습니다. 그러나 습관적으로 사용해서는 안됩니다. 대신 일치 규칙에 blog/을 붙이고 DOCUMENT_ROOT/.htaccess (또는 성능 향상을 위해 더 나은 VirtualHost 섹션)에서 모든 재 작성을 조합하십시오.

+0

모든 도움을 위해 다시 한번 감사드립니다. @mario이 게시물에서 많은 것을 배웠습니다.내 호스트가 이전 버전의 아파치를 실행해야하므로 FallbackResource 메소드가 작동하지 않는 것 같습니다. 당신이 제안한대로 재 작성 블록을 재정렬함으로써 작동하게 만들었지 만, 내 호스트가 아파치 업데이트에 착수 할 때마다 계속 FallbackResource를 염두에 두겠다. – Lewis

관련 문제