URL을 인수로 전달하면 Apache가 실패합니다. 같습니다. http://mydomain.com/somedir/somephp.php?arg1=value&arg2=http://otherdomain.com&arg3=http://othertoo.com/somepath/something …은 완전히 실패합니다. URL 인코딩과

안녕하세요, 저는이 문제에 대해 혼란 스러웠습니다. 나는 그것을 설명하려고 노력할 것이다.

문제는 다음과 같습니다.
http://mydomain.com/somedir/somephp.php?arg1=value&arg2=http://otherdomain.com&arg3=http://othertoo.com/somepath/something …은 완전히 실패합니다. URL 인코딩과 함께.

내 사이트는 존재하는 파일과 디렉토리를 제외하고 mydomain.com/everything 이후의 모든 내용을 읽습니다. mod_rewrite로하고 있습니다.

Options -Indexes

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ handler.php

위의 쿼리 예제는 handler.php에 있습니다. RewriteRule을 주석 처리하면 아파치 오류가 발생합니다.

Forbidden

You don't have permission to access /somedir/somephp.php on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

많은 테스트 등, 나는 URL 인수에 http : // 또는 : // 문자열에 문제가 있음을 알아 냈습니다. 그러나 URL로 인코딩 된 : S

이 항목은 openId 인증 시스템이어야하며 포스트 백에서 실패하며 url 인수의 url이이 오류를 발생시킵니다.

나는 전에이 문제를 결코 만나지 못했습니다. URL 인코딩이 작동해야합니다.

도와주세요! 고맙습니다!



답변

“완전히 실패하다”는 것은 무엇을 의미합니까? 어떤 오류 코드가 있습니까? 서버 파일에 어떤 오류가 있습니까? 무엇이 나타 납니까?

다시 쓰기 규칙은 괜찮습니다! handler.php에 액세스 할 수있는 한 권한 오류는 제공하려는 파일이 아니기 때문에 중요하지 않습니다.

그러나 귀하의 오류는 위의 구성이 정확하게 시도한 것이 아니라고 생각합니다. 이 같은 경우 :

RewriteRule ^(.*)$ handler.php?a=b

쿼리 문자열 인수는 a = b로 덮어 써서 동맹을 잃게됩니다. 그런 다음 수행 할 수있는 작업은 다음과 같습니다.

RewriteRule ^(.*)$ handler.php?a=b [QSA]

아파치에게 쿼리 문자열을 추가하도록 지시합니다 (QSA = QueryStringAppend)


답변