Nginx - переписывание в локациях - PullRequest
0 голосов
/ 25 июня 2018

Я хочу иметь 2 разных местоположения на моем сервере nginx (Ubuntu 16.04).Один с моей HTML-страницей ( page.com; page.com/sth/sth2) в / var / www / html и один с моим PHP API ( page.com/ api; page.com/api/v1/test) в / var / www / api .Каждый запрос к API должен идти в файл api.php (у меня там есть маршрутизация).

Я пытался это сделать, и пока страница.com/api/api.php работает, но страница.com / api / v1 / test не (я получаю ошибку 404 Not Found).

root /var/www/html;

location ^~ /api/ {
    root /var/www;
    rewrite ^(.*)$ var/www/api/api.php last;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME /var/www/api/api.php;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

location / {
    index index.html;
    try_files $uri $uri/ =404;
}

location ~ /\.ht {
    deny all;
}

1 Ответ

0 голосов
/ 25 июня 2018

Просто замените блок / api / location на следующее:

location /api/ {
    root /var/www/api;
    include snippets/fastcgi-php.conf;
    fastcgi_param SCRIPT_NAME /api.php;
    fastcgi_param SCRIPT_FILENAME $document_root/api.php;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Затем все эти запросы перейдут в api.php, и вы сможете обрабатывать маршрутизацию там, как вы это делаете в любом случае.

Вам, вероятно, также не нужна эта часть:

location ~ /\.ht {
    deny all;
}

Поскольку Nginx все равно ничего не делает с файлами .htaccess - так что угрозы безопасности нет.

...