我有一个catchall服务器configuration,获取所有子域,并指向他们相同的PHP脚本。 有数千个子域,它们是dynamic创build的。
PHP脚本使用HTTP_HOST来标识子域,并相应地从数据库中获取标识的子域的内容。
它工作正常,但我收到来自Nginx的这个日志:
PHP message: PHP Notice: Undefined index: HTTP_HOST in /usr/share/nginx/html/index.php on line 9
我search了网页,发现HTTP_HOST并不总是被设置的。 PHP手册说:
'HTTP_HOST'=来自当前请求的Host:头部的内容( 如果有的话) 。
所以我想过使用variablesSERVER_NAME而不是HTTP_HOST。 但是当我这样做时,SERVER_NAME不包含子域部分。 它总是会返回我在Nginxconfiguration中写的东西,那就是~^(.+)$ 。
有没有办法改变Nginxconfiguration,以便SERVER_NAME包含dynamic子域? 例如,要返回类似sub1.mydomain.com,sub2.mydomain.com等。
有没有解决这个问题的方法?
我的实际configuration是:
server { listen 80 default_server; server_name ~^(.+)$; }
我会在你的PHP代码中这样处理这个问题:
if (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } else { $host = 'default.example.com'; }