2009-08-23 3 views
0

내 URL에 단순히 앰퍼샌드를 사용하지 않고 파일을 요청할 때 앰퍼샌드를 시스템에 전달할 수 있습니다. 문제는 Apache가이를 다르게 처리한다는 것입니다. 어떻게 해야할지 모르겠다.mod_rewrite는 나중에 앰퍼샌드의 모든 인스턴스를 % 26로 바꿉니다.

요청한 파일을 index.php에 다시 작성했는데 URL이 $ 1 이었으므로 그 파일은 무엇인지 알 수 있었지만 앰퍼샌드가 있으면 그 파일을 계속할 수 없다.

어떻게하면 앰퍼샌드를 이스케이프 처리하거나 16 진수 (% 26)로 바꿀 수 있습니까?

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule>` 

답변

1

하여 재 작성 규칙에

RewriteRule ^(.*)\&(.*)$ $1\%26$2 

를 추가합니다.

+0

흠! 이것은 위의! -f 조건을 깨뜨린 것 같습니다. 이제 모든 외부 파일이 서버에서 작동하지 않습니다. – Supernovah

+0

어디에서 RewriteRule 행을 넣었습니까? –

0

당신보다이 규칙을 넣어보십시오 : 또한

RewriteRule ^([^&]*)&(.*) $1\%26$2 [N] 
0

을 당신이 끝에 [NE] 플래그를 추가 할 수있는 URL의 앰퍼샌드 브라우저로 리디렉션을 다시 보내려면 RewriteRule.

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L] 
4

1 있는지 확인하는 URL의 당신이 서버에 도달 할 때 그래서 앰퍼샌드 아니다 % (26)에 & 기호를 탈출 구축하고 있습니다. 그것은 &로 다시 변환하지 않도록 다음 재 작성 규칙에 B 태그를 추가 :

한다 RewriteRule^(. *) $ index.php에 URL = $ 1 [B, QSA, L]

이 B 태그는 다른 재 작성 규칙을 시도한 지 2 일 후에 내 엉덩이를 저장했습니다. 이 PHP에 의해 처리되는 않다면

0

mod_rewrite에 의해 수정 된 쿼리 문자열에서 앰퍼샌드 탈출하는 적절한 방법은

%2526 

입니다.

아파치가 다시 작성하면 %2526에서 %26으로 바뀌고 php는 &으로 변환되어 쿼리 변수에 저장됩니다.

B 다시 쓰기 규칙을 사용하면 작동하지만 매개 변수의 모든 더하기 기호는 PHP의 더하기 기호로 유지됩니다.

내가 직면 한 현실 세계 예 : 그것은

group.php?group=Simon+%26+Garfunkel 

로 재 작성하고

를 원 할 때 PHP에 당신이

$group="Simon+&+Garfunkel"; 

을 얻을

/group/Simon+%26+Garfunkel 

B으로 B와 247,

당신은 잘 작동

/group/Simon%20%26%20Garfunkel 

해야합니다. B없이

당신은

group.php?group=Simon%20&%20Garfunkel 

을 얻고 & 쿼리 문자열을 분할하기 때문에 당신은

$group="Simon "; 

와 끝까지.

하지만 당신은 이중 탈출

/group/Simon+%2526+Garfunkel 

group.php?group=Simon%20%26%20Garfunkel 

로 재 작성 및 예상처럼

$group="Simon & Garfunkel"; 

로 끝날 경우.

URL이 mod_rewrite에 의해 "깨끗한 url"로 구문 분석되지 않으면 %26을 사용할 수 있습니다.

관련 문제