2012-05-10 4 views
1

존재하지 않는 디렉토리를 $ 1에 기반한 데이터베이스를 얻는 php 파일로 보내는 mod_rewrite 규칙이 있습니다.디렉토리가 존재하지 않는 한 mod_rewrite가 PHP 디렉토리에 존재하지 않습니다.

디렉토리가 존재하지 않으면 모든 것이 제대로 작동하지만 적절한 디렉토리를 표시하지만 필요하지 않은 경우 쿼리 문자열을 추가합니다.

나는 지난 몇 시간 동안 웹을 수색 해 왔으며 운이없는 다른 방법을 시도해 왔습니다.

누구나이 기능을 그대로 유지하는 방법을 알고 있지만 쿼리 문자열을 없앨 수 있습니까?

감사합니다. 여기

내 코드입니다 :

RewriteEngine On 
    Options +FollowSymlinks 
    RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9a-zA-Z\-]+)/$ $1 [R] 
RewriteRule ^([0-9a-zA-Z\-]+)$ product.php?product=$1 

은 무엇 끝나는 발생하면 브라우저가이 모든 과정을 반복하지 않고 자체 /을 제거하는 것을 시도 http://domain.com/existing_dir/?product=existing_dir

답변

2

로 URL을 표시입니다

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*?)/?$ product.php?product=$1 

특수 문자의 제한을 주장하는 경우 :

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9a-zA-Z\-]+?)/?$ product.php?product=$1 

+ 1 이상 repeatition입니다 * 0 이상, +?입니다 *? 배 안 매칭을위한 수정입니다 - 그것은 /? 아무것도에게 귀하의 예 또한

을 일치시킬 수 있습니다, 첫째 RewriteRule의 조건부 실행하고있다 (디렉토리가 존재하지 않는 경우), 두 번째 것은 항상 실행됩니다 (처음으로 프로세스를 중단시키지 않으면). 디렉토리가 있더라도

+0

두 번째 예제는 완벽하게 작동했습니다. 이번 주말에 내가 뭘 읽고 있는지 알아. – Jazzy

0

Mod_rewrite는 쿼리 문자열에 영향을 미치지 않으며, 항상 끝에 태그됩니다 mod_rewrite에 em이 없도록하지 않는 한 새 URL의 pty 쿼리 문자열. 이것은 단지? 새로운 문자열 끝에. 첫 번째 줄은 다음과 같아야합니다.

RewriteRule ^([0-9a-zA-Z\-]+)/$ $1? [R] 
관련 문제