2011-08-03 7 views
0

나는 $ _SERVER [ 'PATH_INFO']하지만 이상한 서버 문제가 그것을 사용에서 저를 방해하는 비슷한을 얻기 위해 노력하고 있어요 ...htaccess로 디렉토리, 파일 및 변수

내 응용 프로그램에서

, 링크 모양을 수 htaccess로와

www.domain.com/folder/file/variable 
www.domain.com/folder/file 
www.domain.com/file/variable or 
www.domain.com/file/ 

, 나는 적절한 페이지를 얻기 위해 노력하고, 아닌 index.php에 또는 유사한로 리디렉션.

지금까지, 나는이 작동되지 않는이,이 :)

RewriteRule ^(.+)$ /$1.php # page only 
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 # page + variable 
RewriteRule ^(.+)/(.+)$ /$1/$2.php # folder/page 
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 # folder/page + variable 

내가 요청이 파일 이름 또는 디렉토리인지 확인하기 위해 -f을한다 RewriteCond % {REQUEST_FILENAME}를 사용할 필요가 확신합니다. ..하지만 그것을 작동시킬 수 없습니다 ...

변수는 모든 이상한 문자가 포함될 수 있습니다 - 그래서 내가 도트와 일치하는 이유는 ... 아마 파일/폴더 이름을 az와 만 일치 시키려고해야합니다 (이후 나는 그들이 az, _ 또는 -)를 포함 할 것이라고 생각하지 않는다. 지금 고통의 그것되어 거의 이일 :

+1

1) 패턴을 사용하기 때문에 더 긴 패턴으로 시작하는 것은'/ (/ +) $'는'/ file /'뿐만 아니라'/ file/variable'과'/ folder/file/변수 '; 2)'^ (. +) $ '대신'([^ /] +)'를 사용하십시오 - 이것은 # 1에 도움이 될 것입니다 – LazyOne

답변

0

@ LazyOne의 힌트 덕분에이 문제를 해결할 수있었습니다.

RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1/$2.php?x=$3 
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)/$ /$1/$2.php 
RewriteRule ^([-a-zA-Z0-9_]+)/([-a-zA-Z0-9_]+)$ /$1.php?x=$2 
RewriteRule ^([-a-zA-Z0-9_]+)/$ /$1.php 

모든 폴더 또는 파일 경로가 "/"있는 동안 변수가되지해야 끝나야합니다 :

htaccess로 파일은 이제 다음과 같이 보입니다. 내 프레임 워크에서는 문제가되지 않지만 다른 사람들에게는 유용하지 않을 수 있습니다.

1
는 재 작성이 첫 번째로 가장 구체적인 규칙 역

이후

어떤 도움

이 크게 감사합니다.

RewriteEngine On 
RewriteRule ^(.+)/(.+)/(.+)$ /$1/$2.php?x=$3 [L] 

# RewriteRule to check that the file is exists here 
RewriteCond %{REQUEST_URI} ^(.+)/(.+)$ 
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}.php -f 
RewriteRule ^(.+)/(.+)$ /$1/$2.php [L] 

# If file is not exists, then check by put to the variable 
RewriteRule ^(.+)/(.+)$ /$1.php?x=$2 [L] 
RewriteRule ^(.+)$ /$1.php [L] 
+0

예, 죄송합니다. 자세한 내용을 알 수 없으므로 죄송합니다. 모든 것이 있습니다. RewriteEngine On , etc ... 내 htaccess 설정은 기본적으로 작동하지만 한 번만 할 수 있습니다. 한 줄을 제외한 모든 줄에 주석을 달고 해당 URL을 클릭하면 작동합니다. – dvdbrk

0

대부분의 사람/프레임 워크는 확장명이 지정되지 않은 모든 항목을 단일 PHP 프런트 컨트롤러에 전달하여 수행 할 작업을 수행합니다. 나는 대부분의 사람들이이 길을가는 한가지 이유는 간단하게 mod_rewrite가 얼마나 복잡한가하는 이유라고 생각한다.