Я пытаюсь перенаправить подкаталог в файл php. Вместо того, чтобы обслуживать файл, он загружает его, а это означает, что он не читает его как файл php.
Точнее в fastcgi не входит location ~ \.php$
директива.
Несколько интересных фактов:
admin
блок, но не для login
блок. location ~ \.php$
директива над login
один и что я меняю ^~ /login
в ~ /login
, он работает, кроме правила перезаписи rewrite ^/login/(.+\.php)$ /$1 last;
.Я прочитал документацию Wiki Nginx по этой теме, поэтому я знаю приоритеты, в которых nginx читает директивы местоположения, но это не говорит мне, что делать в этом случае! Я также читаю
Вот конфиг:
server {
listen 80;
server_name tyba-one.com *.tyba-one.com;
root /var/www/tyba/public_html;
rewrite_log on;
error_page 404 /404.php;
client_max_body_size 4M;
if ($host ~* ^www\.(.*)){
set $host_without_www $1;
rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
}
location = / {
rewrite ^/$ /index.php last;
}
location ^~ /login {
rewrite ^(/login)$ $1/ permanent;
rewrite ^/login/$ /login.php last;
rewrite ^/login/(.+\.php)$ /$1 last;
}
location ^~ /admin {
rewrite ^(/admin)$ $1/ permanent;
rewrite ^/admin/$ /page_builder.php last;
rewrite ^/admin/(.+\.php)$ /$1 last;
}
location ~ \.php$ {
try_files $uri =404;
include /opt/nginx/conf/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/tyba/public_html$fastcgi_script_name;
}
}
Я хотел бы понять, что происходит, и как быть в таких ситуациях.
nginx обрабатывает только один блок местоположения на каждом уровне вложенности, поэтому /login.php
обрабатывается ^~ /login
блок, а не ~ \.php$
блок. Поскольку у вас есть только операторы перезаписи в ваших блоках местоположения, вам фактически не нужны блоки местоположения (при условии, что совпадения перезаписи достаточно конкретны, каковы ваши). Просто переместите свои операторы перезаписи в корень server
блокировать, чтобы запросы на /login
и /admin
все еще использовать \.php$
блок местоположения:
rewrite ^/$ /index.php last;
rewrite ^(/login)$ $1/ permanent;
rewrite ^/login/$ /login.php last;
rewrite ^/login/(.+\.php)$ /$1 last;
rewrite ^(/admin)$ $1/ permanent;
rewrite ^/admin/$ /page_builder.php last;
rewrite ^/admin/(.+\.php)$ /$1 last;
location ~ \.php$ {
...
}