[하얀피]님이 남기신 글:
>URL 입력시 디렉토리 끝에 / 를 넣지 않은 경우,
>
>도메인 주소가 httpd.conf 의 Servername 으로 자동
변경됩니다.
>
>예를 들어 http://www.abcd.com/test 라고 치면 test 를
디렉토리로
>
>인식하는 과정에서 http://abcd.com/test/ 로 변경되는 문제가
있습니다.
>
>그냥 http://www.abcd.com/test/ 로 인식하면 될텐데
말입니다.
>
>Servername 이 abcd.com 으로 되어있기 때문인 것은
알겠는데...
>
>왜 그렇게 변경해버리는 지 궁금합니다.
>
>그냥 도메인은 유지되어야 할 듯 싶은데요.
>
>일반적으로 www. 가 들어가있는 주소를 홈페이지 주소로 알리곤
합니다.
>
>그런데 이렇게 웹서버에서 도메인을 일방적으로 변경해
버린다면 쿠키나
>
>세션 정보가 적용되지 않아 어느 정도 문제가 될 것
같습니다.
>
>혹시 이와 관련해서 설정하는 부분이 있다거나 제가 잘 모르는
부분이
>
>있으면 알려주세요.
>
일단은 ServerName 지시자는 거의 관습적으로 설정해 주는 것이
좋습니다.(특별한
경우라도 설정해주는 것이 좋습니다.)
그리고 설마 진짜 도메인 'abcd.com' 으로 테스트한 것은
아니지요? 이 도메인은 실제 존재하는 도메인입니다.
만약 'abcd.com' 으로 테스트하고자 한다면 테스트한 컴퓨터의
LocalDNS 는 반드시 테스트한 DNS 의 주소로 설정해야 합니다.
그렇지 않으면 실제 도메인의 리졸빙 과정을 거칩니다.
...
http://www.abcd.com/test -->
http://abcd.com/test/
이렇게 URL 이 바뀌게 되는 경우가 많은데
이것은 아파치 웹서버의 URL 작동방식을 조금은 숙지하고
전체 싸이트 기획에 들어가야 합니다.
(정말 모르면서 덤비는 초보 웹기획자 많습니다...T.T)
실제로 아파치 C 소스를 들여다 보지는 않았지만,
간단하게 테스트해 볼 수 있습니다.
$ telnet www.foo.com 80
GET /test HTTP/1.0
<ENTER> 를 누름
<ENTER> 를 누름
...
301 Moved Permanently
The document has moved .... %{SERVER_NAME}${REQUEST_URI}/ here
...
이와 같은 형식으로 출력됩니다.
아파치 로그파일을 들여다 봐도 됩니다.
%{SERVER_NAME}${REQUEST_URI}
이 부분은 실제로 'ServerName domain.com' 이라면
http://foo.com/test/
이렇게 웹서버가 URL 을 만듭니다.
(여기까지가 질문한 내용이고)
유닉스/리눅스에서는
디렉토리를 파일과 같은 형식으로
취급하는 경향이 있습니다.
위의 URL 을 만드는 과정을 생각해보면 다음과 같습니다.
(이것은 실제 테스트해 보는 경험상의 내용임)
요청한 URL 이 /test 이라면,
1. DocumentRoot/test ***파일***이 있는지 검사합니다.
(디렉토리와 파일의 구분을 하지 않는다고 생각하면 됨)
2. 있다면 /test 있다면 /test 파일을 처리하고,
3. 없다면 /test.php 파일이 있는지 검사합니다.
4. 있다면 /test.php 파일을 처리하고
5. 없다면 /test.txt 파일이 있는지 검사합니다.
6. 있다면 /test.txt 파일을 처리하고
7. 없다면 /test.html 파일이 있는지 검사합니다.
8. 있다면 /test.html 파일을 처리하고
9. 없다면 /test/ 디렉토리가 있는지 검사하고
10.있다면 301 status code를 냅니다.(또는 302)
없다면 당연히 404 이겠죠.
실제로 URI(URL 이 아님) 파싱을 이것보다 더 복잡합니다.
보통 '/' 문자를 디렉토리 구분자로 인식하여 각각의
파일이 있는지 검사합니다.
e.g /some/foo/bar.php/other?aaa/fff.html
(/some/foo 까지가 디렉토리, 같은 이름의 파일과 디렉토리를
일반적으로 만들지 못하기 때문에)
이것을 이해하려면
http://linuxchannel.net/docs/php-parameter.txt
을 참조하세요.
*참고) HTTP 1.1 status code
300 : Multiple choices, 최근에 옮겨진 데이터를 요청
301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음
302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시
303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가
있음
304 : Not modified
305 : Use proxy
10 번에서 /test 가 디렉토리이면 301 코드를 내는데
URL 은 앞서 설명한데로
http://%{SERVER_NAME}%{REQUEST_URI}/
이렇게 URL 이 구성됩니다.
왜 이렇게 서버 환경변수 %{SERVER_NAME} 을 참조하는지에
대해서는 아파치 매뉴얼을 들여다 봐야 합니다.
정확히 매뉴얼에 쓰여져 있는데...
The ServerName directive sets the hostname of the server; this is used when creating
redirection URLs. If it is not specified, then the server attempts to deduce it from
its own IP address; however this may not work reliably, or may not return the
preferred hostname
would be used if the canonical (main) name of the actual machine were
simple.example.com.
...
UseCanonicalName directive
...
With UseCanonicalName on (and in all versions prior to 1.3) Apache will use the
ServerName and Port directives to construct a canonical name for the server
...
With UseCanonicalName off Apache will form self-referential URLs using the hostname
and port supplied by the client if any are supplied (otherwise it will use the
canonical name).
즉
UseCanonicalName On
으로 설정되어 있으면(기본값 On) 앞의 경우와 같이 임시 URL 을
만들고,
UseCanonicalName 를 Off 로 설정하면 '자신의 참조(referer)'
URL 에서 Hostname 과 Port 를 사용합니다.
UseCanonicalName Off
이것이 정답이겠네요...
:)
>그리고 useradd -r 옵션이 정확히 어떻게 쓰여지는건가요..?
>
>-r 옵션을 사용했더니 이상한--a..
http://linuxchannel.net/tip/add-system-user.txt
에 내용이 있습니다.
|