2010-06-29 1 views
0

카테고리별로 제품을 나열하는 디렉토리가 있습니다. 변수 _GET이 있으면 쿼리에 사용됩니다. example/a/1/b/2/c/3/d/4 나는 단지 _GET 값을 대체 할 변수를 사용하여 참조 example/index.html?a=1&b=2&c=3&d=4.htaccess 예쁜 URL 문제 (mod_rewrite)

가장 .htaccess 사례가된다, 그러나 나는 다음과 같은 규칙을 사용할 수 있습니다 : 내가 좋아하는, "예쁜 URL의"를 사용하고 싶습니다

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4&$5=$6 [L] 
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4 [L] 
RewriteRule ([^/]+)/([^/]+)$ index.html?$1=$2 [L] 

그리고 작품 ...하지만, 내가 더 이상 RewriteRules (밖으로 같은 &17=$18에)을 추가, 작동을 멈 춥니 다. 이전 값을 기준으로 배열의 일종으로 체인 차례의 마지막 변수 (위의 index.html?a0=a1&a3=a4을 구축 할 것입니다) ...

  • 이 할 수있는 더 좋은 방법이 있나요?
  • 비효율적입니까?
  • 변수 개수에 제한이 있습니까 .htaccess
  • 규칙은 얼마나 오래있을 수 있습니까?

감사합니다.

답변

1

mod_rewrite는 $9%9까지만 지원합니다.

스크립트를 수정하여 $_SERVER['PATH_INFO']을 사용하거나 RewriteMap을 사용하여 경로를 쿼리 문자열로 변환하는 것이 좋습니다.

+0

고마워요! Google은 .htacces에 허용되는 변수의 수에 대한 결과를 보여주지 않았으므로 이제 다른 방향으로 시도 할 것을 알았습니다 ... 다시보고 할 것입니다. – amos

1

mod_rewrite만이 10 개의 역 참조를 허용하며, 그 중 하나는 전체 일치 가능 부분입니다 (결국 9 개의 정의 가능한 캡처 그룹 만 남게됩니다).

그러나, 나에게 당신의 스크립트 파일에서 서버의 REQUEST_URI/SCRIPT_NAME/PATH_INFO 변수를 검토하는 것이 훨씬 더 의미를 확인하고 URL에서 키 - 값 쌍을 얻을 것을 분석한다.

RewriteRule On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.html [L] 

을 그리고 스크립트는 나머지를 다룰 것입니다 : 그렇다면, 당신은 단순히 당신의 .htaccess이있을 것입니다. 나는 당신이 의 많은 변수 인 GET을 가지고 있다면 "pretty"URL로 만들어 졌다면 실제로 더 읽을 수 있을지 궁금합니다. URL에 스물 세 개 슬래시가있는 경우 정상적인 쿼리 문자열을 전달하면됩니다. 그것은 귀하의 응용 프로그램과 사용자가 이러한 URL을 사용하여 인터페이스하는 방식에 따라 다르므로 이러한 방식으로 사용자가 원하는 방식으로 수행 할 수 있습니다.

+0

감사합니다 ... 둘 다 ... REQUEST_URI와 Tim을 시작했습니다. 예제 규칙을 사용하고 있습니다. 구현하기 쉽습니다 (RewriteMaps는 나를 상하게했습니다!). 당신은 URL이 다소 더 예쁘다고 생각하지만, 고객에게 큰 이점이 아닙니다 (특히 길거나 특정한 URL의 경우). 그러나 우리 제품 범주에 익숙한 직원의 경우 물건을 쉽게 찾을 수 있고 입력하기가 쉽습니다! 그리고 간단한 쿼리를 위해, URL은 꽤 있습니다 :) 다시 한번 감사드립니다! – amos