I '
"если файл / каталог не существует, перепишите запрос для api.php? rquest = $ uri"
«если файл / каталог существует, перепишите запрос для api.php»
Я попытался воспроизвести это в nginx, но столкнулся с проблемой. Я создал директиву местоположения с помощью
location / {
# if the file or folder doesn't exist add it as arguments to api.php
try_files $uri $uri/ /api.php?rquest=$uri&$args;
index api.php;
}
, и все, что я хочу сделать, это просто перейти на статическую страницу index.html где-нибудь, если файл / каталог действительно существует.
Я пробовал оператор «if» на уровне сервера с перезаписью
if (-e $request_filename){
rewrite ^(.*)$ /api.php break;
}
, но это нарушает другие допустимые директивы местоположения.
Как мне это сделать: если файл / каталог действительно существует, перенаправить на статическую html-страницу
---------------- Обновление ------------- -
В итоге я получил что-то вроде
server {
...
root /home/ballegroplayer/api/public;
index index.php index.html index.htm;
try_files $uri $uri/ /api.php?rquest=$uri&$args;
if (-e $request_filename){
rewrite ^(.*)$ /api.php last;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
В конечном счете, в операторе «if» мы не можем перенаправить на статический файл, потому что после успешного выполнения директивы «try_files» мы перенаправляемся на api.php
, который действительно существует и вызовет срабатывание оператора if, и мы всегда получим статическую страницу html.
Я думаю, что использование last
вместо break
решает проблему, поскольку это заставляет nginx не повторно обрабатывать местоположения с перезаписанным URL-путем.