значение субдомена в PHP (nginx) - PullRequest
0 голосов
/ 04 июля 2018

У меня есть веб-сервер Nginx (я очень новичок в 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? Подобласть = демонстрационная .

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Заголовок хоста уже будет содержать запрашиваемый клиентом домен. Вы можете просто взять это в 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. Вы действительно этого хотите?

0 голосов
/ 04 июля 2018

Добавьте следующий сервер к вашему 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;

См. этот документ для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...