¿Cómo convertir este simple .htaccess a Nginx?
Estoy usando esto .htaccess
que pasa todo después de la URL a $param
, por lo que example.com/news/id
va a PHP como $_GET['param']='news/id'
. Pero Nginx siempre me lanza a la página 404.
Mi .htaccess
:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?param=$1
Lo que probé en Nginx default.conf
:
server {
listen 80;
listen [::]:80;
server_name domain.com;
root /var/www/html;
location / {
if (!-f $uri){
set $rule_0 1$rule_0;
}
if (!-d $uri){ set $rule_0 2$rule_0; } if ($rule_0 = "21"){
rewrite ^(.*) index.php?param=$1;
}
}
}
Respuestas
1 MichaelHampton
No usa if
aquí en absoluto, ni verifica manualmente la existencia de archivos. En cambio, este patrón común es manejado por try_files.
Por ejemplo:
location / {
try_files $uri $uri/ /index.php?param=$uri;
}
(Si su aplicación web está rota y no puede manejar el encabezado /
en el URI, corrija la aplicación web si es posible, o vea esta pregunta si no es así).
1 SandroBenevides
Podría arreglarlo usando estas reglas:
server{
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=$1;
}
}
Si tiene la ubicación / {} sin instrucciones dentro, elimínela.