2009-03-18 4 views
0

다음과 같은 URL을 사용할 수 있기를 원합니다 :mod_rewrite : URL의 'Folders'를 쿼리 매개 변수로 변환

http://www.example.com/valOne/valTwo/valThree/valFour/valFive 

그리고

http://www.example.com/index.php?one=valOne&two=valTwo&three=valThree&four=valFour&five=valFive 

정규 표현식에 이러한 5 가지가있을 수 있기 때문에 하드 코딩되었지만 추가 '폴더'가 URL에 추가되면 새로운 쿼리 매개 변수를 동적으로 만들 수 있다면 좋을 것입니다. 또한 5 개의 폴더 또는 QP가 항상 존재하지는 않으므로이를 적절하게 처리 할 수 ​​있어야합니다.

답변

6

다음은 사용자의 요구 사항을 충족하는 mod_rewrite는 규칙이다 :

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?one=$1&two=$2&three=$3&four=$4&five=$5 

그러나 대신 PHP로 요청 된 URI 경로를 분석하면 확실히 쉬울 것 :이 위대한 작품을

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

$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); 
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/')); 
var_dump($segments); 
+0

감사합니다! 한 가지 질문이 무엇입니까? RewriteCond % {REQUEST_FILENAME}! -f ?? – macinjosh

+0

요청 된 URI가 기존 파일 ('-f')에 매핑 될 수 있는지 확인합니다. 그렇다면 규칙이 적용되지 않습니다. 그렇지 않으면 모든 URI는'index.php' ('[^ /] * '에 의해 매치 될 것이기 때문에'index.php'조차도)로 리다이렉션됩니다. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond – Gumbo

+0

PHP 스크립트는 어디에 두어야합니까? 사이트 /Dir1/default.php에 URL을 넣으면 Dir1/결코 실행하지 않는 site.com/Dir1/Dir2/default.php라는 URL이있는 것처럼 보입니다 (빠른 테스트를 통해). –

관련 문제