本文へスキップ
plaintext
[PHP] URI �Ķ���� ���� ���� ȯ�溯�� ��

- �ۼ��� : ��ĥ�� <san2(at)linuxchannel.net>
- �ۼ��� : 2003-06-27
- ��  �� : PHP URI ����� ���� ���� �� ���
- ��  �� : �ʺ���
- ���� : PATH_INFO, SCRIPT_NAME, PHP_SELF, PATH_TRANSLATED

*��)
�� ������ ���� �ֽ� ���� �Ʒ� URL���� Ȯ���� �� �ֽ��ϴ�.

http://www.linuxchannel.net/docs/php-parameter.txt

---------------------------------------------------------
���
1. PHP extension�� �̿��� ��
2. PHP Ȯ��ڸ� ���ְ� ����ϴ� ��
3. ��� ������ PHP ���� ��(ǥ)
4. ����(��� ���밡���� ��)
  4-1. ����ġ RedirectMatch �� �̿�
  4-2. ����ġ ErrorDocument �� �̿�
  4-3. ����� ���̸� �̿�
5. �ı�
---------------------------------------------------------

��� �̸��� `foo.php' �̶�� ����.

1. PHP extension(���� 'Ȯ���')�� �̿��� ��

  1) foo.php?id=abc&n=1
  2) foo.php/?id=abc&n=1
  3) foo.php/id=abc&n=1
  4) foo.php/id=abc/n=1
  5) foo.php/abc/1
  6) foo.php/?id=abc&n=1&/s.ext
  7) foo.php/?id=abc&/&n=1
  8) foo.php?id=abc&/&n=1
  9) foo.php/a/b/?id=abc&n=1
 10) �׿� ���� ����


1)���� ���� ���� ����ϴ�(ǥ�����) ��
2)���� Ư���ϰ� 1)���� '/'�� ��� ������ �̰͵� ������
3)���� 2)������ ���(?)�� ���ִ� ���̸� ��� $_GET[id]�� ����
  ������ ���� ������ �� ����
4)���� 3���� '&'��� '/'�� �̿��� ��
5)���� ���� ������� �� ���� �Ҵ��ϴ� ��
6)���� 2���� 4���� ������ ������ ���� �ڴ� ����� ���̸���
7)���� 6���� ��� ������ $_GET ������ ����ϱ� ���ؼ� ����� ���
8)���� 7���� ���� ��·� ���� ��� '/'�� ������ ���
9)���� 5���� 1���� ����


2. PHP Ȯ��ڸ� ���ְ� ����ϴ� ��

  1) foo?id=abc&n=1
  2) foo/?id=abc&n=1
  3) foo/id=abc&n=1
  4) foo/id=abc/n=1
  5) foo/abc/1
  6) foo/?id=abc&n=1&/s.ext
  7) foo/?id=abc&/&n=1
  8) foo?id=abc&/&n=1
  9) foo/a/b/?id=abc&n=1
 10) �׿� ���� ����


��� 1�� ���� ��� �����ϸ� �ٸ� Ȯ��ڸ� ���� ���.
(�̷�����ε� �����ϸ�, foo ���丮�� ���� �����Ǿ�� ��)


3. ��� ������ PHP ���� ��

<PRE>
+----------------------------+----+--------------+------------+------------+
|REQUEST_URI                 |id  |PHP_SELF      |PATH_INFO   |SCRIPT_NAME |
+----------------------------+----+--------------+------------+------------|
|/foo.php?id=abc&n=1         |abc |/foo.php      |NA          |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/?id=abc&n=1        |abc |/foo.php/     |/           |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/id=abc&n=1         |NA  |REQUEST_URI   |/id=abc&n=1 |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/id=abc/n=1         |NA  |REQUEST_URI   |/id=abc/n=1 |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/abc/1              |NA  |REQUEST_URI   |/abc/1      |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/?id=abc&n=1&/s.ext |abc |/foo.php/     |/           |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/?id=abc&/&n=1      |abc |/foo.php/     |/           |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php?id=abc&/&n=1       |abc |/foo.php      |NA          |/foo.php    |
+----------------------------+----+--------------+------------+------------|
|/foo.php/a/b/?id=abc&n=1    |abc |/foo.php/a/b/ |/a/b/       |/foo.php    |
+----------------------------+----+--------------+------------+------------+

+----------------------------+----+--------------+------------+------------|
|REQUEST_URI                 |id  |PHP_SELF      |PATH_INFO   |SCRIPT_NAME |
+----------------------------+----+--------------+------------+------------|
|/foo?id=abc&n=1             |abc |/foo          |NA          |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/?id=abc&n=1            |abc |/foo/         |/           |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/id=abc&n=1             |NA  |REQUEST_URI   |/id=abc&n=1 |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/id=abc/n=1             |NA  |REQUEST_URI   |/id=abc/n=1 |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/abc/1                  |NA  |REQUEST_URI   |/abc/1      |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/?id=abc&n=1&/s.ext     |abc |/foo/         |/           |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/?id=abc&/&n=1          |abc |/foo/         |/           |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo?id=abc&/&n=1           |abc |/foo          |NA          |/foo        |
+----------------------------+----+--------------+------------+------------|
|/foo/a/b/?id=abc&n=1        |abc |/foo/a/b/     |/a/b/       |/foo        |
+----------------------------+----+--------------+------------+------------+
(��... �̰� �׸��µ� �ð���...T.T)
</PRE>

*���)
- ���� �⺻�� �Ǵ� ȯ�溯���� DOCUMENT_ROOT �� SCRIPT_FILENAME ��
- DOCUMENT_ROOT = DocumentRoot �� ������(httpd.conf)
- SCRIPT_FILENAME = ��� ���� ���� ���� ���(���� ��Ȯ�� ��)

*��)
- QUERY_STRING �� REQUEST_URI ���� ù��° '?' ����� ��� ���ڿ�
- PHP_SELF �� REQUEST_URI ���� QUERY_STRING ���ڿ��� ������ �����
- PATH_INFO �� PHP_SELF ���� �ι�° '/' ���� ����� ���ڿ�
- SCRIPT_NAME �� PHP_SELF ���� PATH_INFO �� �� �պκ� ���ڿ�
  (�� REQUEST_URI ���� '?'�� '/' ����� ���� ��� ���ڿ��� ������ �����)
- PATH_TRANSLATED = PATH_INFO ? DOCUMENT_ROOT + PATH_INFO : SCRIPT_FILENAME
  (PATH_INFO ���� �ִٸ� DOCUMENT_ROOT �� PATH_INFO �� ����,
  �� �ܴ� SCRIPT_FILENAME)

<��� >
����ġ Action ����ڰ� ����� ��� �ణ ��ٷο�.

  ������: Action text/plain /bin/action.php
  ��û��: /test.txt?str=string

  ��(SCRIPT_NAME �� ���)
  DOCUMENT_ROOT   => /www
  SCRIPT_FILENAME => /www/bin/action.php      <-- ���
  SCRIPT_NAME     => /bin/action.php          <-- Action ����ڿ��� ������
  QUERY_STRING    => str=string
  PHP_SELF        => /bin/action.php/test.txt <-- SCRIPT_NAME �� �տ� ���
  PATH_INFO       => /test.txt                <-- PHP_SELF �� ����ϱ� ����
  PATH_TRANSLATED => /www/test.txt
</��� >



*ȯ�溯�� ��� ����)
<PRE>
  [DOCUMENT_ROOT]---+
        |           |
  [REQUEST_URI] ----+
        |           |
        |   [SCRIPT_FILENAME]
        |
        |--(? ���� ����)-----------> [QUERY_STRING]
        |
        `--(QUERY_STRING ����)-----> [PHP_SELF]
                                         |
        [PATH_INFO] <---(/ ���� ����)----+
                                         | 
      [SCRIPT_NAME] <--(PATH_INFO ����)--+
</PRE>


4. ����(��� ���밡���� ��)

4-1. ����ġ RedirectMatch �� �̿�

  RedirectMatch ^/([^./]+)$  /check.php?id=$1

�� �����ǵ���

  /abc     ---> /check.php?id=abc  (redirect �ǵ�)
  /ccc     ---> /check.php?id=ccc  (redirect �ǵ�)
  /abc/    ---> /abc/
  /abc.php ---> /abc.php

�̿� ���� ���� �ǵ��� ��������� �ּ��ϰԵ� ����� Redirect
��� �ʽ��ϴ�.
����� ����ġ�� Redirect �� ? ���ڰ� ���ڵ�(%3f)�Ǿ� �Ѿ��
������ PHP ��Ͽ����� ��û����� �ؼ���� �ʰ� ����� �ϳ���
��Ϸ� �ν��ϱ� �����Դϴ�.

����� ù��° redirect ����

  /abc     ---> /check.php%3fid=abc  (redirect �ǵ� ����)

�̷��� �Ѿ�� 404 ������ ���� �˴ϴ�.

�ذ���� ?(���)�� ������ �ʰ� PATH_INFO ȯ�溯���� ���⵵��
����� ���� ���� ����ϴ°�� �����ϴ�.

  ��弳��)

  RedirectMatch ^/([^./]+)$  /check.php/id=$1
  or
  RedirectMatch ^/([^./]+)$  /check.php/$1
  or
  RedirectMatch ^/([^./]+)$  /check/id=$1
  or
  RedirectMatch ^/([^./]+)$  /check/$1


4-2. ����ġ ErrorDocument �� �̿�

������ �� ���� �����ߴٸ� ErrorDocument �� �ϳ��� ��Ͽ��� ��� ������
�� �ֽ��ϴ�.

  1)�Ϲ���� ��
  ErrorDocument 401 /error.php
  ErrorDocument 403 /error.php
  ErrorDocument 404 /error.php

  2)�̰͵� ����
  ErrorDocument 401 /error  <-- ����δ� error.php ���
  ErrorDocument 403 /error
  ErrorDocument 404 /error

  3)�̰͵� ����
  ErrorDocument 401 /error/ <-- error.php ��� �Ǵ� /error/index.php
  ErrorDocument 403 /error/
  ErrorDocument 404 /error/

  4)�Ķ���ͷ� ����
  ErrorDocument 401 /error/401
  ErrorDocument 403 /error/403
  ErrorDocument 404 /error/404

4)�� ���� ���� �����

  /error.php/401
  /error/index.php/401

�� �ΰ� �� �� ��̵� ��ġ�˴ϴ�.

���� 4)�� ���� ����� �̷��� ������� �ʾƵ� �����մϴ�.
����� ErrorDocument �� ó���ϴ� ��Ͽ����� REDIRECT_STATUS ����������
�����ϱ� �����Դϴ�.

���� ErrorDocument �ڵ� ���� ��ٸ�,

-- /error.php ---------------------------
<?php
$TITLE[401] = '401 Authorization Required'; 
$TITLE[403] = '403 Forbidden'; 
$TITLE[404] = '404 Not Found'; 

$errcode = $_SERVER["REDIRECT_STATUS"];
$request = 'http://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];

echo <<<_EOF_
...
<TITLE>$TITLE[$errcode]</TITLE> 
...
- ��û�� (URI)���� : $request<BR>
- ���� ��� : $TITLE[$errcode]<BR>
- ���� ���� : $_SERVER[REDIRECT_ERROR_NOTES];
...
_EOF_;
?>
-----------------------------------------

�̷������ �ڵ��� �����մϴ�.


4-3. ����� ���̸� �̿�

  ��1)
  Request URI : /dowonload/media/foo/bar/setup.exe

�̰�� ����� ��������

  /dowonload/media/foo/bar/alpha.exe
  /dowonload.php/media/foo/bar/alpha.exe
  /dowonload/media.php/foo/bar/alpha.exe
  /dowonload/media/foo.php/bar/alpha.exe
  /dowonload/media/foo/bar.php/alpha.exe

�̿� ���� ��·� �ؼ��� �����մϴ�.
(Ȯ��ڸ� ��� ���ְ� ��ũ�� �Ŵ� ��)

���� ù��° ��ó�� ����� �������� DocumentRoot ���ʿ�
alpha.exe ���� �ִ� ��츦 �����ϸ�, ����� ���� ���
DocumentRoot �ٱ��ʿ� alpha.exe ���� �־ ����ٴ�
�ǹ�Դϴ�.

���� alpha.exe ���� ����� ���� ���� �ְ� ����� ���� �� ��
�ֽ��ϴ�.

�ι�°�� ����� ����� download.php ��Ͽ��� PAHT_INFO �� ���ڿ���
�Ľ��Ͽ� �����ϰ� ���� �����͸� Ŭ��̾�Ʈ���� �����ؾ� �մϴ�.

�̿� ���� ����� ��� �̸��� �̿��ϴ� ��� :

  - Ȯ��ڿ� ���ؼ� ����(��:MSIE)�� Content-type�� �����ϴ� ���
  - ��ҹ��ڸ� �������� ��밡���ϰ�� �� ���
  - �ٿ�ε��ϱ� ���� � ��� ����� �ʿ��� ���
  - ��� ���� DocumentRoot �ٱ��ʿ� ��� ���
  - ���� �����ϰ� URI �� ����ϰ�� �� ��� 
  - ��� ũ�Ⱑ ��� ��� ���� � ���� ���� ������ �� ���
  - ��Ÿ


  ��� ���� ��) winamp ��
  /mp3stream/stream.php/sPy_DIR_7MDHtKu5sC5tcDM=/����Ǵ���.mp3


5. �ı�

�ð��� �ȴٸ� ���ִ�(?) ����ġ Action ����� ������ �����
���ؼ�...


EOF