Перезапись URL-адресов запросов и переход к fast-cgi

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

server {
    listen 80;

    # ...

    location / {
        try_files $uri $uri/ /index.php?$query_string;

        # I've tried adding "$uri.php" like so, but it downloads the php file instead.
        # try_files $uri $uri/ $uri.php /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Если такой запрос приходит в http: // example. com / random / page , мне нужно, чтобы Nginx переписал его на http://example.com/random/page.php без изменения URL-адреса пользователя. Ему также необходимо передать этот запрос в другой блок местоположения. Если этот файл php не существует, он должен вернуть 404. Как я могу этого добиться?

1
задан 21 April 2017 в 21:23
1 ответ

Одна из многих возможностей:

server {
    listen 80;
    ...
    location / {
        try_files $uri $uri/ @rewrite;
    }
    location @rewrite {
        rewrite ^ $uri.php last;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
    }
}

Вы все равно должны проверить существование файла в блоке location ~ \ .php $ , как указано в этой заметке по применению .

0
ответ дан 4 December 2019 в 04:59

Теги

Похожие вопросы