Переписать определенный путь в 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($|/) {