Estou tentando fazer a rota nginx para o index.php dentro de um alias para um caminho específico. Seria mais fácil apenas usar subdomínios (e adicionar blocos de servidores com nomes diferentes), mas meu projeto requer essa estrutura por vários motivos não tópicos. Simplificando, gostaria do seguinte:
1. www.example.com --> /home/user/www/public/index.php
2. www.example.com/a/b --> /home/user/www/public/index.php
3. www.example.com/api --> /home/user/api/public/index.php
4. www.example.com/api/a/b --> /home/user/api/public/index.php
Os números 1 e 2 são bem padronizados: sempre exibimos o arquivo index.php (em uma determinada raiz) e deixamos que php cuide do roteamento. O número 3 simula uma construção de subdomínio (e deve apontar para index.php em um diretório diferente).
Consegui que os números 1-3 funcionassem, mas não o número 4. Sempre que eu vou para www.example.com/api/a/b, ele dá um erro 404. Os registros de erros dizem que o nginx está tentando me serve / home / user / api / public // a / b /. Eu sinto que estou muito perto da solução, mas não pareço acertar. Eu também seria capaz de servir arquivos estáticos da mesma maneira.
As seguintes configurações são relevantes:
server {
listen 80;
server_name example.com www.example.com;
root /home/user/www/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /api {
alias /home/user/api/public/;
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}
Obrigado antecipadamente.
Solução
server {
listen 80;
server_name example.com www.example.com;
root /home/user/www/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /api/ {
alias /home/user/api/public/;
try_files $uri /api/index.php =404;
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}