Ben böyle bir regex maç ile bir nginx sunucu tanımı var:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Her şey güzel çalışıyor, ancak bu etki alanı, aşağıdaki gibi değerler alan fastcgi ve PHP-FPM kullanan çeşitli PHP projelerine ev sahipliği yapıyor $_SERVER:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Gördüğünüz gibi, normal ifade deseni SERVER_NAMEeşleştirdiği dizeden ziyade yerleştirilir . Bu benim için biraz buggy gibi görünüyor ve ayrıca gereksiz ayrıntıları ortaya çıkarması nedeniyle bir güvenlik riskini temsil ediyor (diğer yapılandırmalarda joker karakter yerine belirli bir ad kümesiyle eşleşiyorum).
"SERVER_NAME yerine HTTP_HOST kullan" diyebilirsiniz - ancak bu kadar basit olsaydı - SERVER_NAME sunucusunun (sürpriz yok) sunucunun adını içermesini bekleyen kütüphaneler var. Bu davranış için gerçekten iyi bir kullanım durumu göremiyorum.
curl --header "HOST: google.com" http://yourdomain/yourpage.phpve yourpage.php ifadesinde:<?php echo $_SERVER['SERVER_NAME']; ?>google.com'u göreceksiniz