2012-10-24 4 views
1

해결 : I는보기의 index.php/제어기/액션 내부 요청 http://example.com/controller/action 열고 ModRewrite 경로 수 있도록리디렉션 루프없이 index.php/컨트롤러/액션을 컨트롤러/액션으로 리디렉션하는 방법은 무엇입니까?

RewriteCond %{THE_REQUEST} index.php 
RewriteRule index.php(.*)$ http://%{HTTP_HOST}$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php/$1 [L] 

난 리디렉션 구성.

이제 http://example.com/index.php/controller/action을 index.php/controller/action (301 리디렉션)에 자동으로 열어서 사용자를 리디렉션하고 싶습니다. 하지만 이제는 무한 루프가 반복됩니다.

부트 스트랩 index.php로 내부 리다이렉트를 분리하여 한 사용자가 index.php 서브 패스로 URL을 열지 못하게 할 수 있습니까?

나는이 시도하지만 나던 일 (enless 루프) : PHP 측에서이 문제를 해결하기 위해

RewriteCond %{REQUEST_URI} index.php/(.*) 
RewriteRule ^index.php/(.*)/$ http://%{HTTP_HOST}/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php/$1 [L] 
+0

당신은 정말 야해 그 첫 번째 조건/규칙을 다시 작성해야 ... 모두 URL은 ** 정확히 같은 일을 **해야하기 때문이다. 그들이 나쁜 구현을 가지고 있지 않다면 ;-) – prodigitalson

+0

첫 번째 규칙은 두 번째 내부 리디렉션 (301)을 만듭니다. 그래서 그것은 동일하지 않습니다;). 사용자가 index.php로 URL을 열면 index.php가없는 버전으로 리디렉션해야합니다. 그러나 index.php가없는 버전은 내부적으로 부트 스트랩 파일 인 index.php로 리디렉션되어야하며 충돌을 의미합니다. – Mike

+0

Opps ... 당신은 정확합니다 ... 완전히 그것을 놓쳤습니다. 그러나 새 호스트로 URL을 리다이렉트하는 것과 동일한 shceme을 사용하는 경우 동일한 작업을 수행해야합니다. 나는'/ index.php/controller/action'이 라우터가 염려해야하는 한'/ controller/action'과 실질적으로 동일하다는 것을 의미합니다. 일반적으로 마지막 규칙은 다음과 같습니다 :'RewriteRule^(. *) $ /index.php [L]'캡처 그룹이 부족하지 않습니다. – prodigitalson

답변

0

일반적인 방법은 모든 리디렉션으로 증가 카운터를하는 것입니다. 예컨대 : https://github.com/vjousse/symfony-1.4/blob/master/lib/controller/sfController.class.php

if ($this->getActionStack()->getSize() >= $this->maxForwards) 
{ 
    // let's kill this party before it turns into cpu cycle hell 
    throw new sfForwardException('Too many forwards have been detected for this request.'); 
} 
+0

하지만 루프를 멈추는 솔루션을 찾지 않습니다. 다시 쓰기 조건에서 내부 라우팅과 외부 라우팅을 구별하여 루프를 방지하기 위해 차이를 만들고 싶습니다. :) – Mike

관련 문제