Eu tinha um projeto no qual eu tinha que redirecionar todos os arquivos não encontrados para o index.php. Eu fiz isso no apache com a colocação de um arquivo .htaccess na pasta do meu projeto. o conteúdo do arquivo é -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
agora eu queria o mesmo no nginx. aqui está como meu nginx.conf se parece com
root /usr/local/apache2/htdocs;
index index.php index.html index.htm;
location /project/ {
root /usr/local/apache2/htdocs;
index index.php index.html index.htm;
try_files $uri $uri/ index.php;
}
agora, sempre que faço uma solicitação como http://localhost/project/hello
, essa solicitação deve ir para http://localhost/project/index.php
, mas isso diz File not found
.
Agora, porque pensei que isso funcionaria é porque, como a diretiva root
dentro do bloco de localização substitui a diretiva root
fora do bloco (embora haja valores iguais), o módulo de reescrita procuraria /usr/local/apache2/htdocs/project/index.php
.
O que eu sinto falta aqui?
UPDATE
Esta configuração funciona
root /usr/local/apache2/htdocs;
location /project/ {
index index.php index.html index.htm; #effectively root here is /usr/local/apache2/htdocs
try_files $uri $uri/ /project/index.php;
}
Mas não vejo por que isso deve funcionar, porque, conforme apontado no diretório aqui , a correspondência encontrada no bloco de localização é acrescentado ao valor de root
directive