PHP $_SERVER 的 SCRIPT_NAME 和 PHP_SELF
PHP 的 $_SERVER
全域變數裡面有許多伺服器資料,也包含了瀏覽器請求的相關資訊,當中有幾個彼此間容易被混淆。
以下以伺服器有 /about.php
供瀏覽,而瀏覽器查詢 /about.php/"hack?foo=bar
為例,各變數分別會是:
鍵 | 值 |
---|---|
SCRIPT_FILENAME | X:/abs/path/on/server/about.php |
REQUEST_URI | /about.php/%22hack?foo=bar |
SCRIPT_NAME | /about.php |
PATH_INFO | /"hack?foo=bar |
PHP_SELF | /about.php/"hack?foo=bar |
另一情形,若 .htaccess
設定了
1 | RewriteCond %{REQUEST_FILENAME} !-f |
而瀏覽器查詢了不存在的 /abc?foo=bar
,那麼相關變數會是:
鍵 | 值 |
---|---|
SCRIPT_FILENAME | X:/abs/path/on/server/error.php |
REDIRECT_URL | /abc |
REDIRECT_QUERY_STRING | status=404&foo=bar |
REQUEST_URI | /abc?foo=bar |
SCRIPT_NAME | /error.php |
PHP_SELF | /error.php |