2013-04-14 3 views
1

여기에 제가 가진 경우가 있습니다. 이미 며칠 동안 작성하는 방법에 대해 궁금해하며 너무 복잡합니다. 다음을 다시 작성하겠습니다.htaccess 동적 폴더 재 작성

http://demo.myurl.com/proevent/event1 to http://demo.myurl.com/index.php?url=proevent&path=event1 

http://demo.myurl.com/proevent/admin to http://demo.myurl.com/admin - when folders exist under that location I want to have them loaded and not falling to /index.php 

이제 "proevent"및 "event1"은 완전히 동적입니다!

내가 알고있는 폴더 : admin, inc, 기존 사진, 나머지는 동적입니다.

리다이렉션의 모든 경우에 어떤 경로에서 열렸는지 알고 싶거나 오류 메시지를 보내고 싶습니다. 여기

는 내가 지금까지 무엇을 가지고 :

사람들과 슬래시를 넣어하는 것을 잊지 건너 뛰고 폴더가없는 그것으로 작업을 수행 할 때 모르는 또한

RewriteCond %{REQUEST_URI} !(\.|/$) 
    RewriteRule (.*) /$1/ [R=301,L] 
if dir/file exists (doesn't really work) 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ([^/]*)/(.*) /$2%{REQUEST_URI} [R] 

존재 않습니다 이전 사례에 해당 될 수도 있습니다.

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/(/?.*?)([^/]*)$ index.php?url=$1&path=$2 [L] 

도움이 되었습니까?

+0

가능한 [[.htaccess 다시 쓰기 규칙을 디버깅하기위한 팁] (http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules)의 중복 –

답변

0
RewriteEngine On 

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

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/(/?.*?)$ index.php?url=$1&path=$2 [L] 

당신을 위해 할 것입니다.

첫 번째 부분은 전체 디렉토리 또는 하위 디렉토리가 파일인지 여부를 확인하고 첫 번째 부분이 실패하면 두 번째 부분이 리디렉션됩니다.

이로 시작하는 실제 파일 또는 dirctory이 있는지

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

확인 더 명확합니다.

RewriteCond %{REQUEST_URI} /([^/]*)$ 

귀하의 요청에 따라 URL의 마지막 부분을 가져옵니다.

RewriteCond %{DOCUMENT_ROOT}/%1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/%1 -d 

이러한 확인은/(URL의 마지막 부분)은 파일 또는 디렉토리입니다. 이것은 Rewrite의 역 참조 기능을 사용합니다. % 1은 (는) RewriteCond에서 마지막 RegEx의 첫 번째 청크를 참조합니다. 이 디렉토리가 있다면

RewriteRule /(.*)$ /%1/ [L] 

, 우리는 그렇지

를 다시 작성, 다음 부분은 분명하다 그냥 당신이 배치 가져 오기 조건을 다시 작성합니다.