Come convertire questo semplicissimo .htaccess in Nginx?
May 20 2019
Sto usando questo .htaccessche passa tutto dopo l'URL a $param, quindi
example.com/news/idva a PHP come $_GET['param']='news/id'. Ma Nginx mi porta sempre alla pagina 404.
Mio .htaccess:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?param=$1
Quello che ho provato in 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;
}
}
}
Risposte
1 MichaelHampton May 20 2019 at 09:08
Non usi affatto ifqui, né controlli manualmente l'esistenza di file. Questo modello comune viene gestito invece da try_files.
Per esempio:
location / {
try_files $uri $uri/ /index.php?param=$uri;
}
(Se la tua app web è rotta e non è in grado di gestire l'interlinea /nell'URI, correggi l'app web se possibile, o vedi questa domanda in caso contrario.)
1 SandroBenevides May 21 2019 at 01:15
Potrei risolverlo usando queste regole:
server{
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=$1;
}
}
Se hai una posizione / {} senza istruzioni all'interno, rimuovila.