Назад | Перейти на главную страницу

Как преобразовать этот очень простой .htaccess в Nginx?

Я использую это .htaccess которые передают все после URL-адреса в $param, так example.com/news/id переходит на PHP как $_GET['param']='news/id'. Но Nginx меня постоянно кидает на 404 страницу.

Мой .htaccess:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule  (.*) index.php?param=$1

Что пробовал в 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;
                }
        }
}

Я мог бы исправить это, используя следующие правила:

server{
try_files $uri $uri/ @rewrite;
  location @rewrite {
  rewrite ^/(.*)$ /index.php?_url=$1;
  }
}

Если у вас есть адрес / {} без каких-либо инструкций внутри, удалите его.

Вы не используете if здесь вообще, и вы не проверяете наличие файлов вручную. Этот общий шаблон вместо этого обрабатывается try_files.

Например:

location / {
    try_files $uri $uri/ /index.php?param=$uri;
}

(Если ваше веб-приложение не работает и не может обрабатывать ведущие / в URI, по возможности исправьте веб-приложение или посмотрите этот вопрос если не.)