2012-08-27 3 views
3

내가 htaccess로한다 RewriteEngine을 사용하여 이상한 문제가 재 작성.의 PHP htaccess로 URL이 잘못된 매개 변수

: http://test.local/en-US/something.php를 호출 할 때, 내가 좋아하는 뭔가를 기대 그래서

echo('lang: '.$_GET['lang1'].'< br />');  
echo('page: '.$_GET['page1'].'< br />');  
echo('querystring: '.$_SERVER['QUERY_STRING']); 

:이 PHP 코드를 넣어

페이지에서
RewriteEngine On 
RewriteRule ^(.\*)/(.\*).php$ pages/test.php?lang1=$1&page1=$2 [L] 

/test.php :

나는이 간단한 규칙이
lang: en-US  
page: something  
querystring: lang1=en-US&page1=something 

대신 페이지에서 가져 오는 이상한 결과입니다 :

lang: pages  
page: test  
querystring: lang1=pages&page1=test 

은 누군가가 나를 도울 수 있습니까? 당신은 또한 QSA 플래그를 사용할 수 있습니다

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/pages/test\.php$ 
RewriteRule ^(.*)/(.*)\.php$ /pages/test.php?lang1=$1&page1=$2 [L] 

답변

2

당신은 그 결과를 얻을 수 RewriteRule의 기본 동작은 기존 쿼리 문자열을 삭제하고 새로 생성 된 쿼리 문자열로 바꾸는 것입니다. [QSA] 플래그를 사용하면 쿼리 문자열이 결합됩니다.

http://httpd.apache.org/docs/current/rewrite/flags.html

+0

매력처럼 작동합니다. 감사합니다. 그것은 루프를 통해 갔다 난 정말 왜 리디렉션 – Cuttlefish

+1

...하지만, 이해하지 못하는 '^ (. *)/(. *) \. PHP는 $은','페이지/test.php'도 패턴과 일치합니다. LANG1 = 페이지 및 PAGE1 = 시험 및 LANG1 = EN-US & PAGE1 = dfsdfasdf : 어쨌든, 기쁜 지금 – Oussama

1

: 대체 URI 쿼리 문자열을 포함하는 경우

RewriteRule ^(.*)/(.*).php$ pages/test.php?lang1=$1&page1=$2 [QSA,L] 

을, 당신은이 라인을 사용하려고 루프를 생성하기 때문에

+0

는 내가 QSA 플래그를 시도하지만 결과였다 감사합니다 :) 노력하고 있습니다. 나는 그것 때문에 위의 루프 문제 같아요 ... – Cuttlefish

+0

나는 여기에 문제를 재현하고, 올바른 결과를 주었다. L 플래그는 정상적으로 이후 처리를 종료합니다. 다른 답변이 효과가 있으면 괜찮아요. :) – Maurice