2010-07-14 5 views
0

mod_rewrite를 사용하여 사이트 URL의 도메인을 PHP 스크립트로 리디렉션하려고합니다. 예를 들면 : 나는 다음 RewriteRule의mod_write를 사용하여 URL의 도메인을 PHP 스크립트로 리디렉션

RewriteEngine On 
RewriteRule ^(.*)$ /test.php?domain=$1 [L] 

이 작업을 수행하기 위해 시도했지만 내가 운이없는 오전

http://example.com/test.php?domain=http://somedomain.com 

:

http://example.com/http://somedomain.com 

는에 리디렉션합니다. 누구든지 올바른 RewriteRule을 사용하는지 알고 있습니까? 아니면 이것을 수행하는 더 좋은 방법이 있습니까?

감사

+0

어떻게됩니까 대신으로 설정됩니다, http://example.com/http://google.com 경우? (나는 아파치가 당신이 mod_rewrite에 도착하기 전에 기형의 URL을 보내는 것에 대해 화를 내야한다고 확신한다. 그러나 어쩌면 그 문제를 이미 돌 보았다.) –

+0

나는 이것조차 생각조차하지 못했다. 나는 downforeveryoneorjustme.com이 주소에있는 질문 한 URL를 어떻게 지키는 지보고 있었다. 이것은 아파치와 가능한가 아니면 이것만으로 화를 낼 것인가?! – diarmuid

답변

0

그것은이 작업을 수행하는 것이 가능하지만, 단지 RewriteRule은 당신이 당신의 VirtualHost 또는 서버의 구성을 편집 할 수 있어야한다는 의미 서버 당 컨텍스트에 지정된 경우 일반 (httpd.conf). 이 경우 규칙은 잘 작동합니다.

.htaccess에 규칙을 정의하는 것은 아파치의 요청 처리의 픽스 업 단계에서 발생합니다. 아파치의 요청 처리는 아파치가 요청을 파일 시스템에 매핑하려고 시도한 후 (따라서 아파치가 요청을 오류가 발생한 후에) 발생합니다. 필요한 구성 파일에 액세스 할 수없는 경우이 가장 확실한 해결 방법은 http:// 구성표를 URL의 일부로 전달하지 않는 것입니다.

당신의 규칙이 여전히 있지만, 때문에 각 디렉토리의 맥락에서 mod_rewrite 작품, 당신은 아마 리디렉션 루프를 방지하기 위해뿐만 아니라 그것을 컨디셔닝 방법으로 작동합니다합니다 (L 및 명시 적 캡처 그룹은 불필요) :

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ /test.php?domain=$0 

downforeveryoneorjustme.com까지는 Google 프론트 엔드 서버에서 실행됩니다. 아파치가 수정 된 것으로 알려져 있지만 (처음에는 많이 확인하지는 않았지만), 처음으로 갔다고 생각합니다. 옵션을 사용하거나 완전히 다른 시스템을 사용하십시오. 나는 잘 모르겠다.

0

다른 사람을 도울 수 있도록 공유를 결정했습니다.

다음 .htaccess 파일을 사용하여 모든 요청을 index.php 파일 (또는 원하는 곳)으로 리디렉션하십시오.

<IfModule mod_rewrite.c> 

#Checks to see if the user is attempting to access a valid file, 
#such as an image or css document, if this isn't true it sends the 
#request to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L] 

</IfModule> 

이제 $ _SERVER [ 'REQUEST_URI']를 사용하여 요청한 URI를 가져올 수 있습니다. 예를 들어

는 요청 된 URL은 $ _SERVER [ 'REQUEST_URI'는] 'http://google.com'

관련 문제