繁体   English   中英

PHP(nginx)中的子域值

[英]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证书不同意,连接将失败。

另外,将子域更改为查询字符串也是一个坏主意:

  • 您将失去在Nginx中分别配置每个子域的能力,并对每个客户端连接强制进行大量重定向和重写。
  • 您的SEO很烂。
  • 您的页面链接是什么样的?

如果我有one.example.com,而您有two.example.com,则请求将变为:

example.com?subdomain=one example.com?subdomain=two

这两个请求现在都由example.com上的同一索引页处理。 那真的是你想要的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM