2013-01-25 1 views
0

클라이언트에서 요청한 요청의 실제 URL을 가져오고 싶습니다. 어떻게 처리합니까? 누군가가 존재하지 않는 페이지 (예 : http://localhost/invalid.php)를 요청하고 404 사용자 정의 오류 파일을 http://localhost/test.php으로 설정 한 경우 사용자가 요청한 실제 URL을 어떻게 알 수 있습니까?Apache/PHP에서 실제 요청 URL을 가져 오는 방법 (존재하지 않고 사용자가 404 오류 페이지로 리디렉션되는 경우)?

나는 이것을 IIS7에서 시도했다. 사용자 정의 오류 페이지를 /test.php로 설정했으며 사용자가 존재하지 않는 URL을 요청할 때마다 여전히 $ _SERVER [ 'REQUEST_URI'] /test.php와 브라우저의 URL을 사용하여 해당 URL에 액세스 할 수 있습니다. 동일하게 유지됩니다.

하지만 아파치에서 같은 일을하는 데 문제가 있습니다. 사용자 지정 오류 페이지를 /test.php로 설정했지만 사용자가 존재하지 않는 페이지를 요청하면 사용자가 /test.php로 리디렉션되고 사용자가 요청한 실제 URL에 액세스 할 수 없습니다. 나는이 print_r($_SERVER)을 시도했지만 $_SERVER 배열의 실제 요청 URL을 찾지 못했습니다.

+1

http://stackoverflow.com/questions/tagged/apache+mod-rewrite –

답변

2

난 당신이 파일이 실제로 존재하는 경우 첫 번째 라인 검사를 RewriteCond를 사용하지 않고 그 오류 404

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ test.php?errpath=$1 

에 의해 그것을 할 수 있으리라 생각합니다.
두 번째는 클라이언트를 test.php으로 라우팅합니다. errpath 아무것도 또는 (클라이언트가 정상적으로 index.php을 보였다 될 것 의미) 단지 슬래시없는 경우 확인하고 그렇습니다을 필요

<?php 
    if ($_GET['errpath'] == "" || $_GET['errpath'] == "/") { 
     require("index.php"); 
    } 
    else { 
     echo "The url ".$_GET['errpath']." does not exist."; 
    } 
?> 

:

그런 다음 test.php에 당신이 뭔가를 넣어. 그렇지 않으면 404 오류 페이지에 대해 원하는대로 수행하십시오.

P. 미안 설명이 후회하는 것처럼 보이면, 사람들이 나에게 뭔가를 말하면서 이해가되지 않을 때 나는 그것을 싫어합니다. 나는 다른 사람에게 그렇게하고 싶지 않다.

관련 문제