2014-09-15 3 views
1

우리는 특정 URL이 호출 될 때 표시되어야하는 클라이언트 용 웹 응용 프로그램을 만들었습니다. 다른 모든 URL은 기존 Typo3 설치에서 처리해야합니다. 아쉽게도 Apache2 구성에 액세스 할 수 없기 때문에 다시 쓰기 로그에 액세스하거나 VirtualHost 정의를 변경할 수 없습니다.Apache2 htaccess 다중 규칙

은 htaccess로는 다음과 같이 약 같습니다

RewriteEngine On 

# http://example.com/sub/foo/ 
RewriteCond %{REQUEST_URI} ^/sub/foo/.* 
RewriteRule .* special.php [L] 

# http://example.com/sub/bar/year/2014/ 
RewriteCond %{REQUEST_URI} ^/sub/bar/.* 
RewriteRule .* special.php [L] 

# Everything else should be typo3 
RewriteRule .* general.php [L] 

그러나 모든 통화는 general.php 파일로 라우팅됩니다. this page에 따르면 .htaccess는 예상대로 작동해야합니다. 서버는 Apache 2.2입니다.

아이디어가 있으십니까?

답변

1

마지막 규칙에서 special.php을 제외해야합니다. 또한 한 규칙과 규칙 2는 다음과 같이 하나로 결합 할 수 있습니다

RewriteEngine On 

# http://example.com/sub/foo/ 
RewriteRule ^sub/(foo|bar)/ special.php [L,NC] 

# Everything other than /special.php should be typo3 
RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule !^special\.php$ general.php [L,NC] 

업데이트 (라스) : 솔루션 작동 -flag 방법 [L]의 이해했다. 전체 루프를 다시 실행하기 때문에 모든 재구성 규칙은 이미 다시 작성된 부분을 무효화하는 방식으로 작성되어야합니다. 또한, 나는 모든 규칙을 넣어 /sub/ -directory에있는 .htaccess - 파일의보기에서 첫 번째 디렉토리과 같이 생략 할 수있다 :이 날 중 하나가 작동하지 않습니다

RewriteEngine On 

# http://example.com/sub/foo/ 
RewriteRule ^(foo|bar)/ special.php [L,NC] 

# Everything other than /special.php should be typo3 
RewriteRule !^special\.php$ general.php [L,NC] 
+0

- 일반한다. php는 url이 무엇이든 관계없이 항상 호출됩니다. 나도 이해하지 못한다. 왜 두 번째 규칙에서 URL이'special.php'로 다시 작성되어야 하는가? 첫 번째 규칙이 일치하지 않는다면, 왜 그렇게 될까? 첫 번째 규칙이 일치하면 [L] - 플래그는 평가되는 모든 항목에서 두 번째 다시 쓰기 규칙을 중지해야합니다. – Lars

+1

'[L] -flag는 평가되는 모든 것에서 두 번째 다시 쓰기 규칙을 중지해야합니다. '이것은 오해의 소지가 많은 사람들입니다. 'L' 플래그는'mod_rewrite'가 루프를 다시 실행하도록 만합니다. 따라서 2 차 요청 uri는'special.php'가되고 결국에는'general.php'로 다시 작성됩니다. – anubhava

+0

내 업데이트 된 규칙을 사용해보십시오. 작동하지 않으면 작동하지 않는 URL을 제공하십시오. – anubhava