2014-01-09 4 views
2

여기htaccess로 다시 쓰기 규칙에 영향을 미치는하지 GET은

샘플 코드 내 .htaccess 파일의 샘플입니다

RewriteEngine On 

RewriteRule ^home/?$    index.php?intro=true [L] 
RewriteRule ^home/([^/]*)$  index.php?location=$1&intro=true [L] 

RewriteRule ^wedding/?$    wedding.php [L] 
RewriteRule ^wedding/([^/]*)$  wedding.php?location=$1 [L] 

을 그리고 여기에 모두 index.php과에 소개되는 몇 가지 예제 코드 wedding.php 페이지 :

index.php를 :

if(!$_GET["location"]) { $location = "London"; } else { $location = ucwords($_GET["location"]); } 

[....] 

<h1>Ben Pearl, <?php echo $location; ?> Magician</h1> 

wedding.php은 :

if(!$_GET["location"]) { $location = "London"; } else { $location = ucwords($_GET["location"]); } 

.... 

<h1><?php echo $location; ?> Wedding Magician</h1> 

$location 문자열이 $_GET 값 'location'에 의해 영향을해야 일이 일어날 것으로 예상되는 무엇.

무엇

다시 쓰기를 무슨 일이 일어나고 index.php에 잘 작동; 사용자가 example.com/home/place로 이동하면 $locationplace으로 바뀝니다.

그러나 위의 스크립트가 붙여진 페이지가 포함 된 모든 다른 페이지에서 문자열은 "london"으로 대체되며 페이지가 $_GET 데이터를받지 못했고 다시 쓰기 규칙이 올바르게 작동하지 않는다는 것을 의미합니다.

낯선 사람은 내 localhost에서 똑같은 코드가 변경되지 않고 그대로 작동한다는 것입니다.

+0

100 % 확실하기 때문에 스크립트 상단에'var_dump ($ _ GET)'을 시도하여'$ _GET' 배열의 내용을 정확히 보았습니까? 그런 다음 위치 키가 존재하지 않는다고 말할 수 있습니다. – Lee

+0

예. 어떤 HTML 앞에 놓고'array (0) {}'를 반환했습니다; 홈 페이지에서 'array (2) {[ "location"] => 문자열 (6) "place"[ "intro"] => string (4) "true"}' – Ben

+0

을 게시 할 수 있습니다. 작업 URL/경로 ('/ wedding/...')? – jeroen

답변

2

Multiviews을 해제하면 mod_negotiation의 "퍼지"요청 URI가 파일 매핑으로 설정됩니다. mod_negotiation이 /wedding/을보고 나서 /wedding.php이라는 파일이 있으면 mod_rewrite와 규칙을 완전히 우회하여 직접 요청을 보내서 요청을 보냅니다. 당신의 htaccess로 파일의 상단에

추가, : 그것은 (많은 /index.php처럼 보이지 않는 /home 때문에, index.php에 재 작동하는 이유

Options -Multiviews 

도 설명 할 수 있음이 home.php이 있다면 반면에, mod_negotiation은 그 대신 매핑하려고합니다).

+0

+1, 내 시간에 아파치 해킹을 해봤지만, 왜 그런지 보지 못했습니다. 항상 자동으로'-Multiviews '를 내 configs에 입력합니다. 의심의 여지가 내 인생에서 그것을 사용 하겠지만 항상 새로운 것들을 배우는 것이 좋다 :) – Lee

+0

네, 너무 간단하고 완벽하게 지금 작동합니다! 고맙습니다. – Ben

관련 문제