Я обновил свой сервер nginx с 0.7.x до 1.0.2 и скопировал старый файл конфигурации для нового сервера nginx. Все работало нормально, кроме директивы if. У меня был следующий блок кода в старом файле конфигурации, который, похоже, не работает с последней версией nginx.
location /myapp {
if (!-e $request_filename) {
rewrite ^/myapp/(.*)$ /myapp/index.php?q=$1 last;
break;
}
root /var/www;
index index.php index.html index.htm;
}
Есть идеи, что случилось?
P.S .: Да я знаю IfIsEvil и я попытался изучить try_files, но я не мог понять, как передать только часть URI ПОСЛЕ myapp / в отличие от передачи входящего URI в index.php следующим образом: try_files $uri index.php?q=$uri
Вы хотите перенаправить все запросы на общий фронт-контроллер.
location / {
index index.php;
try_files $uri $uri/ @handler; ## If missing pass the URI to front handler
}
location @handler {
rewrite / /index.php;
# Rewrite for @ErJab:
# rewrite ^/myapp/(.*)$ /myapp/index\.php?q=$1 last;
}
location ~ .php$ { ## Execute PHP scripts
fastcgi_pass 127.0.0.1:9000;
}