2012-11-03 2 views
4

를 통해 가상 디렉터리에 $ _GET 변수를 전달 내가 가지고있는 예를 들어, 매개 변수에 가상 디렉터리를 변환하는 작업 그 이하 .htaccess재 작성 규칙을 다음htaccess로

www.example.com/usa/ny/nycwww.example.com/index.php?path=usa/ny/nyc으로 PHP에 의해 해석됩니다.

내가 알아낼 수없는 것은 가상 디렉터리 자체의 매개 변수를 처리하기 위해 아래 regex을 어떻게 변경하는지입니다. 예를 들어, 다음과 같이 말합니다.

www.example.com/usa/ny/nyc/?display=off&settings=nonewww.example.com/index.php?path=usa/ny/nyc&param=display:off,settings:none입니다.

위의 예에서 사용한 두 가지 옵션이 매개 변수가 항상 동적 인 것은 아니라는 점이 더욱 까다로울 수 있습니다. 이것을 달성하는 방법에 대한 아이디어 나 제안?

RewriteRule ^/?([a-zA-Z_\-/]+)$ index.php?path=$1 [L] 
+0

추가 매개 변수를 추가 '_GET' 매개 변수로 전달하는 대신 새 형식으로 다시 작성해야하는 요구 사항입니까? – jheddings

+0

확실히 아닙니다! 어쨌든 문자열을 explode()해야하기 때문에 PHP 스크립트에서 작업하기가 혼란스럽지 않기 때문에 일반적인 형식으로 추가 매개 변수를 표시 할 수 있습니다. –

답변

2

당신은 당신이 그렇게 같은 [QSA] (쿼리 문자열 추가)합니다 옵션을 사용할 수 있습니다, 수정되지 않은 쿼리 문자열을 전달하려는 가정 :

RewriteRule /(.+)$ /index.php?path=$1 [L,QSA] 

당신은 QSA 옵션 here에 대한 문서를 찾을 수 있습니다. 에서 [QSA] 플래그

, 두 /page.php?page=123 = & 한 두 에 매핑된다/페이지/123 = 하나에 대한 요청 : 워드 프로세서. [QSA] 플래그가 없으면 동일한 요청이 /page.php?page=123에 매핑됩니다. 즉, 기존 쿼리 문자열은 삭제됩니다.

그래서 PHP 스크립트는 다른 수정 작업을 수행하지 않고 모든 매개 변수를 표준 _$_GET 매개 변수로 간주합니다. 좀 더 일반적인 경로 요소와 같은 결과를 처리하는 것을 선호하는 경우

, 당신은 다음과 같은 사용할 수 있습니다, 당신의 쿼리 문자열이 여전히 추가됩니다 위의 경우

RewriteRule /(.+)$ /index.php/$1 [L,QSA] 

을, 그러나 당신이 필요합니다 $_SERVER['PATH_INFO']을 사용하여 명시 적으로 경로를 처리하십시오.

+0

고마워요! 그게 정확히 내가하고 싶은 일 이었어. –

+0

QSA 플래그를 구현 한 후 가상 슬래시가없는 가상 디렉터리를 방문하면 URL이 "localhost : 8888 /? path =/Application/MAMP/project"로 리디렉션되는 것으로 나타났습니다. 이것을 피하는 방법에 대한 아이디어가 있습니까? –

+0

대신이 결과가 어떻게 보이길 기대합니까? – jheddings