[英]subdomain value in PHP (nginx)
我有一个Nginx Web服务器(我是Nginx的新手)。 这是我的Nginx配置文件:
server {
listen 80;
listen [::]:80;
server_name example.com *.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 5m;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com *.example.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
我有一个DNS记录设置为允许通配符子域。 我现在的问题是:如何在PHP中“捕获”当前子域?
例如:如果子域是http://demo.example.com ,我想转到http://example.com?subdomain=demo 。
提前致谢!
将以下服务器添加到您的Nginx。 不要忘记重启Nginx服务
server {
server_name demo.example.com;
rewrite ^(.*) http://example.com?subdomain=demo;
}
更新资料
根据评论,对于动态重定向,您应该通过正则表达式获取子域名
server {
listen 80;
server_name ~^(?<name>.+)\.example\.com$;
return 301 http://example.com/?subdomain=$name;
}
另外,您可以重写它,而不是通过301重定向
rewrite ^(.*) http://example.com/?subdomain=$name;
有关更多信息,请参阅此文档 。
主机标头将已经包含客户端请求的域。 您可以在php中抓住它
$domain = $_SERVER['HTTP_HOST'];
但是,除非您具有通配符SSL证书,否则您将度过一个糟糕的时光。
SSL协商在任何HTTP交换之前进行,因此,如果子域和SSL证书不同意,连接将失败。
另外,将子域更改为查询字符串也是一个坏主意:
如果我有one.example.com,而您有two.example.com,则请求将变为:
example.com?subdomain=one
example.com?subdomain=two
这两个请求现在都由example.com上的同一索引页处理。 那真的是你想要的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.