Eu tinha a seguinte regra no .htaccess
arquivo:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]
Agora mudei para o Nginx e o converti para isto: (usando um site online)
location ~ "^/([\s\S]*)$" {
try_files $uri $uri/ /index.php?rt=$1;
}
Funciona em alguns casos, mas não funciona exatamente como esperado. Quer dizer, $_GET['id']
seria Null
mesmo quando não é ?id=10
passado para o URL.
Agora estou tentando entender o que RewriteCond %{REQUEST_FILENAME} !-f
significa ser capaz de convertê-lo para a sintaxe de configuração do Nginx. Alguma ideia de como posso convertê-lo para Nginx exatamente o mesmo?
O servidor da Web converte a URL em um nome de caminho para o arquivo solicitado. Isso é armazenado na variável
REQUEST_FILENAME
. ARewriteCond
declaração em sua pergunta afirma que este arquivo existe. Se o nome do caminho não existir como um arquivo ou diretório, a solicitação será passada paraindex.php
.No Nginx, isso é equivalente a
try_files $uri $uri/ /index.php;
- o$uri
termo testa se o arquivo existe, o$uri/
termo testa se o diretório existe e o parâmetro final é a ação tomada se ambos os testes falharem.No Apache, o
QSA
sinalizador noRewriteRule
garante que a string de consulta solicitada também seja anexada ao URL reescrito. Seutry_files
snippet não está fazendo isso! Você está substituindo a string de consulta porrt=$1
.Tentar: