Estou fazendo a transição do Apache para o Nginx e estou tentando descobrir como fazer com que minhas regras de reconfiguração de subdomínio funcionem.
Apache
A configuração do Apache basicamente move todo o tráfego para HTTPS e altera domínios .net e .org para o domínio .com principal. Alguns de nossos usuários ainda acham que cada URL deve começar com "www", de modo que a configuração o remova se também houver outro subdomínio. Os URLs sem qualquer subdomínio são redirecionados para o link , que não é necessariamente obrigatório para o site funcionar.
# HTTP
<VirtualHost *:80>
RewriteEngine on
# Redirect http://example.tld -> https://www.example.com
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^example\.(com|net|org)
RewriteRule ^(.*)$ https://www.example.com$1
# Redirect http://www.subdomain.example.tld -> https://subdomain.example.com
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^www.([^\.]+)\.example\.(com|net|org)
RewriteRule ^(.*)$ https://%1.example.com$1
# Redirect http://subdomain.example.tld -> https://subdomain.example.com
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.(com|net|org)
RewriteRule ^(.*)$ https://%1.example.com$1 [NC,R,L]
# ...
</VirtualHost>
# HTTPS
<VirtualHost *:443>
RewriteEngine on
# Redirect https://example.tld -> https://www.example.com
RewriteCond %{HTTP_HOST} ^example\.(com|net|org)
RewriteRule ^(.*)$ https://www.example.com$1
# Redirect https://www.subdomain.example.tld -> https://subdomain.example.com
RewriteCond %{HTTP_HOST} ^www.([^\.]+)\.example\.(com|net|org)
RewriteRule ^(.*)$ https://%1.example.com$1
# Redirect https://subdomain.example.(net|org) -> https://subdomain.example.com
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.(net|org)
RewriteRule ^(.*)$ https://%1.example.com$1 [NC,R,L]
# Otherwise serve https://subdomain.example.com
# ...
</VirtualHost>
Nginx
A configuração do Nginx que tenho até agora funciona na maioria dos casos, mas não sei como remover "www" quando o URL está no formato http (s): //www.subdomain.example.tld. De acordo com link "se é mal", então eu tentei para mantê-los fora dos casos de uso mais comuns.
# Redirect http://subdomain.example.com -> https://subdomain.example.com
# Redirect http://example.com -> https://example.com
server {
listen 80;
server_name .example.com;
return 301 https://$host$request_uri;
}
# Redirect https://subdomain.example.(net|org) -> https://subdomain.example.com
server {
listen 80;
server_name .example.net .example.org;
if ($host ~* "^([^.]+(\.[^.]+)*)\.example\.(net|org)$") {
set $subdomain $1;
rewrite ^(.*)$ https://$subdomain.example.com$1 permanent;
break;
}
return 301 https://www.example.com;
}
# Otherwise serve https://subdomain.example.com
server {
listen 443 ssl;
server_name .example.com;
# ...
}
Então, minha pergunta é: como eu removo a parte "www" quando há outro subdomínio já presente no caminho certo do Nginx? Em um caso ideal, a configuração do Nginx deve funcionar da mesma forma que a minha configuração antiga do Apache. Há muitas perguntas e respostas que abordam casos simples em que os subdomínios podem ser listados manualmente no arquivo de configuração. Isso não é uma opção para mim.