Jak przekonwertować ten bardzo prosty .htaccess do Nginx?
May 20 2019
Używam tego, .htaccessktóry przekazuje wszystko po adresie URL do $param, więc
example.com/news/idprzechodzi do PHP jako $_GET['param']='news/id'. Ale Nginx zawsze wrzuca mnie do strony 404.
Mój .htaccess:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.*) index.php?param=$1
Co próbowałem w 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;
}
}
}
Odpowiedzi
1 MichaelHampton May 20 2019 at 09:08
W ogóle nie używasz iftutaj ani nie sprawdzasz ręcznie, czy istnieją pliki. Zamiast tego ten wspólny wzorzec jest obsługiwany przez try_files.
Na przykład:
location / {
try_files $uri $uri/ /index.php?param=$uri;
}
(Jeśli Twoja aplikacja internetowa jest zepsuta i nie obsługuje /początkowego identyfikatora URI, napraw ją, jeśli to możliwe, lub zobacz to pytanie, jeśli nie.)
1 SandroBenevides May 21 2019 at 01:15
Mogę to naprawić, korzystając z tych zasad:
server{
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=$1;
}
}
Jeśli masz lokalizację / {} bez żadnych instrukcji w środku, usuń ją.