nginx редирект с не сущетвующих диреткорий файлов.

baas
На сайте с 17.09.2012
Offline
171
2474

Добрый день.

Подскажите пожалуйста.

Есть сайт, работает хорошо, с недавних пор понадобилось из одной директории сайта сделать редирект на index.php этой диретокрии от несуществующих файлов/директорий в ней.

В апаче все просто, в директории сайта api создаешь .htaccess с таким содержимым.

Options +FollowSymLinks
IndexIgnore /
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Конфиг nginx.

server {
listen 1.0.1.2:80;
root /usr/local/www/default;
}
server {
listen 1.0.1.2:80;
server_name www.ru;
error_log /var/log/nginx/www.error_log info;
root /usr/local/www/www.ru/web;
index index.php index.html index.htm default.html default.htm;
open_file_cache max=15024 inactive=60s;
open_file_cache_valid 300s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
# fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_ignore_client_abort off;
try_files $uri =404;
}

location /pma/ {
alias /usr/local/www/phpMyAdmin/;
index index.php;
auth_basic "closed site";
auth_basic_user_file /usr/local/.htpasswd;
location ~ \.php$ {
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_ignore_client_abort off;
fastcgi_param PHP_ADMIN_VALUE "xcache.cacher=Off";
fastcgi_param PHP_ADMIN_VALUE "xcache.stat=Off";
fastcgi_param PHP_ADMIN_VALUE "xcache.optimizer=Off";
}
}

location /api {
index index.php;
try_files $uri $uri/ /api/index.php?$args;

}

location ~ /\.(ht|svn|git) {
deny all;
}
}

При таком варианте как index,php открывается, но ошибка 500.

Так же пробовал и такой варинат.

При таком вовсе не работает.

location /api/ {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php;
}
}

Подскажите, как быть. как лучше сделать?

Спасибо за понимание.

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
AS
На сайте с 07.11.2014
Offline
24
#1

Попробуйте так:

location /api/ {

if (!-e $request_filename){

rewrite ^(.*)$ /index.php last;

}

}

у себя проверил, всё работает.

baas
На сайте с 17.09.2012
Offline
171
#2
ai_sn:
Попробуйте так:

location /api/ {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php last;
}
}

у себя проверил, всё работает.

не работает.

Not Found (#404)

Страница не найдена.

лог акцесс.

мой_ип - - [26/Nov/2015:16:45:56 +0400] "GET /assets/2be214d1/yii.js HTTP/1.1" 304 0 "http://домен/api/bagas1/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"

bagas1 такой директории не существует.

редирект на индексный файл директории api не произошел.

AS
На сайте с 07.11.2014
Offline
24
#3

А изначально файл запрашивается откуда?

http://домен/assets/2be214d1/yii.js

SA
На сайте с 16.10.2015
Offline
1
#4
ai_sn:
Попробуйте так:

location /api/ {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php last;
}
}

у себя проверил, всё работает.

такой вариант работает, нужно смотреть почему у Вас не работает

Z
На сайте с 06.09.2012
Offline
129
#5

вместо try_files и ifов наверное стоит попробовать через error_page

http://nginx.org/ru/docs/http/ngx_http_core_module.html#error_page

Черный список врунов и обманщиков: ua-hosting.company, riaas.ru, takewyn.ru, yahoster/cadedic, Andreylab

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий