Sangat sedikit yang bisa ditambahkan pada jawaban Odin. Saya hanya merasa memberikan contoh lengkap dari permintaan HTTP ke file aktual pada sistem file untuk menggambarkan efek penulisan ulang dan alias URL. Di sistem file, skripnya /var/www/test/php/script.php
adalah
<?php
include ("script_included.php")
?>
di mana /var/www/test/php/script_included.php
adalah
<?php
echo "REQUEST_URI: " . $_SERVER['REQUEST_URI'] . "<br>";
echo "PHP_SELF: " . $_SERVER['PHP_SELF'] . "<br>";
echo "QUERY_STRING: " . $_SERVER['QUERY_STRING'] . "<br>";
echo "SCRIPT_NAME: " . $_SERVER['SCRIPT_NAME'] . "<br>";
echo "PATH_INFO: " . $_SERVER['PATH_INFO'] . "<br>";
echo "SCRIPT_FILENAME: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
echo "__FILE__ : " . __FILE__ . "<br>";
?>
dan /var/www/test/.htaccess
adalah
RewriteEngine On
RewriteRule before_rewrite/script.php/path/(.*) after_rewrite/script.php/path/$1
dan file konfigurasi Apache menyertakan alias
Alias /test/after_rewrite/ /var/www/test/php/
dan permintaan http adalah
www.example.com/test/before_rewrite/script.php/path/info?q=helloword
Outputnya adalah
REQUEST_URI: /test/before_rewrite/script.php/path/info?q=helloword
PHP_SELF: /test/after_rewrite/script.php/path/info
QUERY_STRING: q=helloword
SCRIPT_NAME: /test/after_rewrite/script.php
PATH_INFO: /path/info
SCRIPT_FILENAME: /var/www/test/php/script.php
__FILE__ : /var/www/test/php/script_included.php
Yang berikut selalu berlaku
PHP_SELF = SCRIPT_NAME + PATH_INFO = full url path between domain and query string.
Jika tidak ada mod_rewrite, mod_dir, ErrorDocument rewrite atau bentuk penulisan ulang URL apa pun, kami juga memiliki
REQUEST_URI = PHP_SELF + ? + QUERY_STRING
Alias tersebut mempengaruhi jalur file sistem SCRIPT_FILENAME
dan__FILE__
, bukan jalur URL, yang ditentukan sebelumnya - lihat pengecualian di bawah. Alias mungkin menggunakan seluruh jalur URL, termasuk PATH_INFO
. Tidak ada hubungan sama sekali antara SCRIPT_NAME
dan SCRIPT_FILENAME
.
Tidak sepenuhnya persis bahwa alias tidak diselesaikan pada saat jalur URL [PHP_SELF] = [SCRIPT_NAME] + [PATH_INFO]
ditentukan, karena alias dianggap mencari sistem file dan kita tahu dari contoh 4 dalam jawaban Odin bahwa sistem file dicari untuk menentukan apakah file tersebut ada, tetapi ini hanya relevan jika file tidak ditemukan. Demikian pula, mod_dir memanggil mod_alias untuk mencari sistem file, tetapi ini hanya relevan jika Anda memiliki alias seperti Alias \index.php \var\www\index.php
dan permintaan uri adalah direktori.