Estou tentando converter algum conjunto de regras do Apache para nginx.
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
Mas, até agora vim com esta configuração Nginx.
server {
listen 80;
server_name example.com;
root /path/to/your/document/root;
# Serve files from the public directory if they have an extension
location ~* \.\w+$ {
rewrite ^(.*)$ /public/$1 break;
}
# Route all other requests to server.php
location / {
try_files $uri $uri/ /server.php;
}
}
Não está funcionando
como posso consertar isso
Para converter corretamente as regras de reescrita do Apache para a configuração Nginx, você precisa ter certeza de que a lógica foi traduzida corretamente nas diretivas Nginx. Sua configuração Nginx existente está próxima, mas precisa de alguns ajustes para lidar corretamente com as condições e reescritas.
Isso deve funcionar:
Mudado:
O bloco de localização com regex ~* .\w+$ lida com solicitações de arquivos com extensões, redirecionando-os para o diretório público.
O local/bloco verifica se a solicitação é para um diretório ou arquivo. Se for, a solicitação será atendida normalmente. Caso contrário, ele encaminha a solicitação para server.php
Veja, ao usar instruções if dentro do bloco / location, imitamos as condições de reescrita do Apache, verificando diretórios e arquivos, o que evita roteamento desnecessário para server.php se o recurso solicitado existir.
Não se esqueça de recarregar a configuração: