2011-03-04 4 views
0

루트 디렉토리의 파일로 리디렉션되는 하나의 하위 도메인에 대한 규칙을 만들고 싶습니다. 규칙이 일치하지 않으면 사용자가 원래 도메인으로 리디렉션되어야합니다.기존 파일에 대한 규칙이 작동하지 않습니다.

둘 다 하위 도메인과 도메인이 같은 디렉토리에 연결됩니다. 그러나 지정된 REQUEST_URI의 첫 번째 하위 디렉토리가 디렉토리의 파일 이름과 일치하면 내 규칙이 REQUEST_URI와 일치하지 않는 것처럼 보입니다.

정보 :

  • HTTP : //sub.domain.tld -> 루트 디렉토리는
  • HTTP : //domain.tld -> 루트 디렉토리는
  • 파일 test.php는 루트 레벨에 존재 디렉토리로 내용 : print_r ($ _ SERVER [ 'QUERY_STRING']); test.php 출력 "DIR = XYZ 데이터 = & 무언가"http://sub.domain.tld/xyz/something 함께

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^sub\. [NC] 
RewriteCond %{REQUEST_URI} ^/([a-z]+)/ [NC] 
RewriteRule ^test/ http://domain.tld/ [L,R=301] 
RewriteRule ^([a-z]+)/(.*)$ test.php?dir=$1&data=$2 [L] 

.

그러나 http://sub.domain.tld/test/something을 사용하면 빈 페이지 만 표시됩니다. 그러나 이것 역시 "dir = test & data = something"을 출력해야합니다.

내 실수는 무엇입니까? 내 규칙을 최적화 할 수 있습니까?

+0

거기에있는 세 번째 규칙은 무엇입니까? (RewriteRule^test/...) – yoavmatchulsky

+0

예, 두 번째 RewriteRule이 일치하지 않아 request_uri에서 파일 이름을 찾았습니다. 하지만 그것은 문제를 해결하기 위해 추가 한 첫 번째 RewriteRule입니다. 아직 성공하지 못했습니다. –

+0

serverfault에 속해 있습니다. 이것은 프로그래밍 문제가 아니기 때문에 여기에서 주제를 벗어난 것입니다. –

답변

1

알 수 있습니다. 기본적으로 활성화 된 MultiView를 비활성화해야했습니다. MultiView는 확장자없이 파일을 호출 할 때 유용합니다. 그러므로 http://domain.tld/file은 file.EXT로 다시 작성됩니다 (파일의 확장명은 서버에 저장 됨).

내 서버는 서버에 저장된 파일을 호출하면 REQUEST_URI가 /file.EXT/subdir/subfile.html으로 수정되었습니다.

예 : test.php는 유효한 파일입니다. http://domain.tld/test/something -> REQUEST_URI :

이 htaccess로 파일에 추가 /test.php/something :

Options -MultiViews 

를 비활성화하고 작업을 받으실 수 있습니다!

관련 문제