sun's longitude:241 49 28.25 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/delete.php:소스보기  

질문과 답변 게시판입니다.

현재 실시간으로 이곳 서버의 설정파일(몇개)를 보여주고 있습니다.
서버의 설정내용에 관한 질문은 먼저 이곳 서버의 설정내용을 참고하시길 바랍니다.

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
 ★ 글 지우기 항목입니다. 한번 더 생각하시고 결정하십시오.!!!
제목 3613 번 글의 답장글 : Re: url관련 질문중 404페이지 에러
 이름  산이 [홈]http://linuxchannel.net/
[pakino]님이 남기신 글:

>정말 감사드립니다...밑에 URL관련 질문한 사람입니다.
>결국 다시 404페이지로 왔네요..^^;
>저도 404페이지로 만들어봤는데요..
>
>문제가 있네요..
>explore에서 옵션중 HTTP 오류표지를 체크(디폴트체크입니다)하면 404페이지를 설정해도 못 찾더군요..
>이문제를 해결할 수 없을까요..?
>이 것만 되면 문제없이 해결할수 있는데요..

========================================

...
좀 생각해 보니 굳이 check.php?id=$1 이런식으로
redirect 할 필요는 없더군요.

예를들어 파일 이름이 foobar.php 이라면,

- foobar.php?id=someid
- foobar.php/?id=someid
- foobar.php/id=someid
- foobar.php/id/someid/others
- foobar.php/id/someid/others/
- foobar/id=someid <-- 이것도 가능함
- foobar/id/someid
...

이런 변칙적인(?) 사용이 모두 가능하더군요.

PATH_INFO 환경변수에 '/id=someid' 같은 값이 들어갑니다.

한번 테스트해 보세요.



따라서,

아파치 설정 파일에서

RedirectMatch ^/([a-z]{1,}[a-z0-9-]*)$ /check.php/$1

이와 같이 설정하고,
(좀더 제한적인 ID 표현 정규표현식 요구됨)

check.php 파일을 다음과 같이 코딩합니다.

-- check.php ---------------
<?php
##
## this file name check.php
##
## check redirect path infomation
##
## set to apache 'httpd.conf' file at <virtualhost xxxx>
##
## RedirectMatch ^/([a-z]{1,}[a-z0-9-]*)$ /check.php/$1
##

if(preg_match(';^/.+$;',$_SERVER[PATH_INFO]))
{
if(is_dir($_SERVER[DOCUMENT_ROOT].$_SERVER[PATH_INFO]))
{
header('Location: '.$_SERVER[PATH_INFO].'/');
exit;
}

$id = str_replace('/','',$_SERVER[PATH_INFO]);

// some check $id in mysql database
//
if($existid) // 이부분을 직접 코딩하세요.
{
header('Location: /index.html?id='.$id);
exit;
}
}

echo 'wrong path or file not exits';
exit;
?>
---------------------------------

이것이 마지막이 답변이 될것 같네요... ^.9

좀더 오류없이 정확하게 리다이렉트 할려면
체크하는 가상 호스트와 실제로 서비스하는 가상호스트를
서로 구별하여 꼬이지 않도록 체크하는것이
좋습니다.

즉,
앞이 코드를 보면 알겠지만, 어떤 유저의 id 가 'aaa'이고
DocumentRoot에서 디렉토리가 aaa 가 존재하면
aaa 디렉토리로 이동해 버리는 단점이 있습니다.

따라서,
다음과 같이 check 할 가상 호스트를 따로 만들어 체크하는
것이 더 좋을 것 같네요.

[권장 방법]

check.xxx.com 이라는 가상호스트를 만듭니다.

<VirtualHost xxxx>
ServerName club.xxx.com
...
RedirectMatch ^/([a-z]{1,}[a-z0-9-]*)$ http://check.xxx.com/check.php/$1
...
</VirtualHost>

<VirtualHost xxx>
ServerNAme check.xxx.com
DocumentRoot /some/path/to/check/docs
</VirtualHost>

-- /some/path/to/check/docs/check.php ----
<?php
$id = str_replace('/','',$_SERVER[PATH_INFO]);

// some check $id in mysql database
//
if($existid)
{
header('Location: http://club.xxx.com/index.html?id='.$id);
exit;
}

exit;
?>

후자가 더 간단하죠?
2003년 06월 19일 19:56:12 목(저녁)  from 61.254.75.40
0
암호: 공용 보안 SSL 서버가 준비되기 전까지는 off 합니다

apache lighttpd linuxchannel.net 
Copyright 1997-2024. linuxchannel.net. All rights reserved.

Page loading: 0.01(server) + (network) + (browser) seconds