Переписать определенный путь в xginx

Я пытаюсь переписать определенный путь, используя nginx. Я настроил свой сервер, используя nginx/php-fpm/php, и он работает нормально.

У меня есть следующая конфигурация сервера:

server {
    listen 80;

    server_name domain.com;
    root /srv/www/domain.com/public;

    location ~ ^/index.php($|/) {
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
    }

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

И это работает. Т.е. когда я иду в http://domain.com это делает файл php просто отлично. Однако сейчас я пытаюсь переписать конкретный путь /update/whatever в /update.php?var=whatever, Для этого я добавил следующее location заблокировать мой конфиг (до location ~ ^/index.php($|/) { блок):

location ~* ^\/update/(\w+)$ {
    rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}

Но когда я пытаюсь получить доступ к URL http://domain.com/update/whatever он загружает файл php вместо того, чтобы обрабатывать анализируемый вывод из PHP.

Я также попытался добавить fastcgi директивы к этому блоку местоположения с тем же результатом. Кто-нибудь может сказать мне, что я испортил в моей конфигурации?

1 ответ

Решение

Эта строка:

location ~ ^/index.php($|/) {

говорит nginx проходить только index.php к интерпретатору php, и вам нужно, чтобы он также применялся к другим файлам php, поэтому здесь требуется более общее правило:

location ~ ^/(.*).php($|/) {
Другие вопросы по тегам