2011-10-12 3 views
0

문제 : 점이 포함 된 쿼리 문자열을 다시 쓸 수 있도록 리터럴 점을 내 식에 일치시키는 방법을 알 수 없습니다. 나는 PHP 스크립트를htaccess regex와 리터럴 점을 일치시킬 수 없습니다

RewriteRule ^([\.\w]+)$ index.php?url=$1 [L] 

: 우선 이런 식으로 뭔가를 시도

echo "url is: ".$_GET['url']; 

하는 경우, 이론, 내 쿼리에 쓰기 출력 것도있다. 나뿐만 아니라 이러한 식을 시도했습니다

url is: index.php 

:

^(.+)$ 
^([.\w]+)$ 

을 그리고 결과는 동일하지만 문자와 도트가 포함 된 쿼리에 대해, 제 스크립트는 항상 출력합니다.

그래서 질문이 있습니다 : 내 표현이 잘못 되었습니까? 아니면 서버의 구성과 관련이 있습니까?

+0

, 그것은 세트에서 하나 이상의 문자와 일치 영숫자와 문자를 포함하고 있습니다. 당신이 요청한 경로에 관계없이 항상'index.php'를 얻나요? – Lekensteyn

+0

그래, 몇 가지 온라인 도구로 정규식을 확인했는데 제대로 작동했다. 그러나 나는 두 개의 서로 다른 웹 서버에서 같은 결과를 얻습니다 : 쿼리가 무엇이든 상관없이, php는 'index.php'를 출력하고 그것이 필요한 것은 아닙니다. – package

+0

아파치가'RewriteRule'에 도착하기 전에 URL로부터 쿼리 문자열을 제거한다는 것을 알고 있습니까? 입력하는 전체 URL과 원하는 예상 출력의 예를 제공하십시오. – ridgerunner

답변

1

는 규칙이 적용되기 전에 I 미만 index.php (예컨대 ..xy 매칭)과 일치하는 규칙을 사용하면, 처리 될 다른 요청이 같습니다 결과는 예상과 같이 xy. .* 또는 .+과 같은 편안한 규칙을 사용하면 실패합니다. 그러나 x.*은 잘 작동합니다.

당신은 index.php 같은 요청을 무시하는 또 다른 조건을 추가 할 수 있습니다 : 이것은 테스트되었습니다

RewriteCond %{REQUEST_FILENAME} !index\.php$ 
RewriteRule ^(.+)$ index.php?url=$1 [L] 

를/함께 디버깅 : 예상대로 작품을 정규식

<?php 
printf("url is: %s <br>\n", htmlspecialchars(filter_input(INPUT_GET, 'url'))); 
echo "<pre>",htmlentities(print_R($_SERVER, 1)); 
+0

감사합니다. 매력처럼 작동했습니다. – package

관련 문제