2010-02-12 7 views
0

내가 다시 작성 일부 URL을하고 그리고 난 내가 다음에해야 할 일을 수행 할 수 있습니다아파치 URL은 n 개의 인수를 재 작성

RewriteRule ^([^/]*)/([^/]*)$ index.php?arg1=$1&arg2=$2 [L,QSA] 
RewriteRule ^([^/]*)$ index.php?arg1=$1 [L,QSA] 

당신은 기본적으로 내가 원하는, 내가 여기서 할 노력하고있어 것을 얻을 전체 URL을 가져 와서 개별적인 인수로 파싱합니다. 그래서/blah/test/asdf/hi는 arg1 = blah, arg2 = test 등으로 올 것입니다.

이제 4 개 또는 5 개의 인수로 확장하려는 경우 더 깨끗한 방법이 있는지 궁금합니다. arg1 = $ 1 & arg2 = $ 2 & arg3 = $ 3 등등. 사람들은 이것을 프로그램 적으로 (그냥 전체 문자열을 슬래시로 가져 와서 코드에서 구문 분석하여) 보았습니다. 그러나 나는 궁금합니다. 아파치로 할 수있는 방법이있었습니다.

답변

1

당신은 그렇게 PHP를 사용할 수 있습니다

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 

$pathSegments = array_map('rawurldecode', explode('/', substr($_SERVER['REQUEST_URI_PATH'], 1))); 

첫 번째 줄은 요청 URL에서 바로 URL 경로를 얻을 수 있습니다. 다른 행은 슬래시 (substr)를 제거하고 세그먼트 (explode)로 분할하고 각 세그먼트()를 디코딩합니다.

지금 당신은 당신의 의 index.php에 대한 모든 요청을 전달해야

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^index\.php$ index.php [L] 

추가 조건이 기존 파일에 매핑 할 수있는 요청을 제외합니다.

+0

내가 언급 한 프로그래밍 방식을 설명해 주셔서 감사합니다. 이 유연성을 원한다면 그렇게해야 할 것 같습니다. –

+0

@epalla : 예, 물론입니다. 애플리케이션은 URL 해석 방법을 가장 잘 알고 있습니다. 따라서 mod_rewrite가 아닌 URL 해석을 수행해야합니다. – Gumbo