Não sei bem qual é o seu objetivo, pois o seu exemplo mostra duas possibilidades. A configuração abaixo (não testada) deve resultar em:
http://test.example.com/file.php ==> http://www.example.com/file.php?subdomain=test
Ele deve corresponder a qualquer subdomínio e qualquer nome de arquivo.
server{
server_name www.example.com;
root /var/www/example.com;
index index.html index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script
include fastcgi_params;
}
}
server {
server_name "~^(?<subdomain>.+)\.example\.com$";
rewrite ^/(.*?)/?$ http://www.example.com/$1?subdomain=$subdomain;
}
Breves explicações:
- server_names estáticos são correspondidos antes dos regexes - assim, qualquer solicitação para www.example.com será tratada pelo primeiro bloco de servidor As diretivas raiz e índice
- devem ser colocadas sob o bloco do servidor (não o bloco de localização), se possível
- a diretiva de escuta não é necessária para a porta 80
- o segundo bloco de servidor usa uma captura nomeada para atribuir o subdomínio a uma variável
- a reescrita captura tudo, desde a primeira barra até a última, excluindo ambas (a (. *?) é preguiçosa).
(Como um aparte, eu realmente não tenho certeza do que sua configuração deve fazer com casos como um diretório ou um arquivo estático. Atualmente, o seguinte deve ocorrer (o que não parece sensato):
http://test.example.com/file.jpg ==> http://www.example.com/file.jpg?subdomain=test
http://test.example.com/path/to/subfolder/ ==> http://www.example.com/path/to/subfolder?subdomain=test
Parece que sua configuração atual faz o mesmo. Adicione mais alguns exemplos do que você quer e posso atualizar essa configuração para ser mais relevante).