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