Saya memiliki definisi server nginx dengan kecocokan regex, seperti ini:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Namun, semua itu bekerja dengan baik, domain ini meng-host berbagai proyek PHP menggunakan fastcgi dan PHP-FPM, yang menerima nilai seperti ini di $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Seperti yang Anda lihat, pola regex dimasukkan ke dalam SERVER_NAME
daripada string yang cocok. Itu tampak agak buggy bagi saya, dan juga merupakan risiko keamanan karena mengungkapkan detail yang tidak perlu (di konfigurasi lain saya mencocokkan satu set nama khusus daripada wildcard).
Anda bisa mengatakan "gunakan HTTP_HOST alih-alih SERVER_NAME" - jika hanya sesederhana itu - ada perpustakaan yang mengharapkan SERVER_NAME (tidak mengherankan) berisi nama server. Saya benar-benar tidak dapat melihat kasus penggunaan yang baik untuk perilaku ini.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
dan di yourpage.php:<?php echo $_SERVER['SERVER_NAME']; ?>
Anda akan melihat google.comsumber