Как красиво прописать rewrite .php файла, чтобы он выполнялся ранее location, отвечающего за обработку fcgi?

В процессе переноса .htaccess в конфиг nginx столкнулся с проблемой:

Необходимо сделать rewrite с example.com/a.php на example.com/b.php
location / {
   rewrite ^/a.php$   b.php;
}

location ~ \.php$ {
  fastcgi_pass  localhost: 9000;
  fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
  include fastcgi_params;
}

Rewrite выше не перенаправляет на b.php. Почитав документацию узнал, что location с регулярным выражением приоритетнее, соответственно example.com/a.php попадает сразу в location для обработки fcgi. Но в ступор ввело, почему отрабатывает следующий rewrite, хотя у него также меньше приоритет:
location /a.php {
   rewrite ^/a.php$   b.php;
}

location ~ \.php$ {
  fastcgi_pass  localhost: 9000;
  fastcgi_param SCRIPT_FILENAME
                $document_root$fastcgi_script_name;
  include fastcgi_params;
}

P.S.: Поделитесь опытом как красиво прописать rewrite .php файла, чтобы он выполнялся ранее location, отвечающего за обработку fcgi.
  • Вопрос задан
  • 2909 просмотров
Пригласить эксперта
Ответы на вопрос 3
Попробуй вставить реврайт в основной локейшен.
Ответ написан
kompi
@kompi
nullstack devoops
Приоритет у самого длинного совпадения, потом уже вступают другие правила.
location /a.php {
    return 301 http://example.com/b.php;
}
Ответ написан
Комментировать
@sinyawskiy
Еще можно так
if ($request_uri = /a.php) {
         rewrite ^ http://$host/b.php? permanent;
}

permanent чтобы был 301 редирект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы