2014-02-16 2 views
0

мне нужно обрабатывать с PHP только некоторые конкретные адреса, такие как:Nginx: перейти на PHP только конкретные адреса

http://10.0.0.1/orange 
http://10.0.0.1/pear 
http://10.0.0.1/apple 

любые другие строки, например:

http://10.0.0.1/orange/ 
http://10.0.0.1/orangeee 
http://10.0.0.1/ora.gif 
http://10.0.0.1/orange.php 

должен быть заблокирован с 404 или 400 (лучше)

это мой сервер блок:

server { 
    listen 10.0.0.1:80; 
    server_name 10.0.0.1; 
    root /usr/share/nginx/; 
    location ~^(apple|orange|pear)$ { 
     include /etc/nginx/fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root/processor.php; 
     fastcgi_pass 127.0.0.1:9000; 
     expires -1; 
    } 
} 

Это Безразлично работы, как ожидалось:

Запрос:

POST http://10.0.0.1/orange 

Resonse:

404 

ошибка отчетов журнала:

open() "/usr/share/nginx/orange" failed (2: No such file or directory) 

P.S. простые места, такие как:

location /orange { 
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root/processor.php; 
    fastcgi_pass 127.0.0.1:9000; 
    expires -1; 
} 

работает.

ответ

0

Заменить пробел после ^ с /, что делает регулярное выражение, как этот ^/(apple|orange|pear)$

0

У вас есть место в вашем регулярном выражении: ^ (apple|orange|pear)$

Удалите пробел после ^.

+0

не работает, то же ошибка – user3262353

Смежные вопросы