Changes between Initial Version and Version 1 of Ticket #1574


Ignore:
Timestamp:
06/15/18 09:02:26 (2 years ago)
Author:
Maxim Dounin
Comment:

При использовании директивы alias в переменной $document_root отражается значение alias. В данном случае - это полный путь файла, так как директива alias используется в location'е, заданном регулярным выражением.

При этом переменная $fastcgi_script_name формируется из URI запроса на основании fastcgi_split_path_info.

Соответственно при использовании директивы alias - использовать $document_root$fastcgi_script_name в качестве SCRIPT_FILENAME нельзя. Следует задать SCRIPT_FILENAME явно, либо использовать переменную $request_filename.

Что до использования $fastcgi_script_name в try_files (что вообще-то неправильно, так как использование try_files меняет URI запроса и соответственно $fastcgi_script_name, подробности в тикете #321), то оно тут не будет работать, равно как и try_files $uri ..., так как используется location, заданный регулярным выражением, и в этом случае ведёт себя специально не только директива alias (которая ожидает полный путь к файлу), но и директива try_files - она ожидает "дополнение" к URI запроса. О том, что такое поведение плохо и нелогично - см. в тикете #97.

Отмечу также, что в общем и целом кажется, что в обсуждаемом конфиге нет никакого смысла пытаться героически побеждать все эти сложности. Куда проще будет сделать обычный префиксный location /wordpress/, в котором задать префиксный же alias:

location /wordpress/ {
    alias /var/www/123/;

    location ~ \.php$ {
        try_files $uri ...
        fastcgi_pass ...
        fastcgi_param SCRIPT_FILENAME $request_filename;
        inclue fastcgi_param;
    }
}

В таком виде try_files будет работать ожидаемо из коробки, останется лишь задать SCRIPT_FILENAME.

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #1574

    • Property Status newclosed
    • Property Resolutioninvalid
  • Ticket #1574 – Description

    initial v1  
    11Конфиг
    2 
     2{{{
    33server {
    44        listen 80;
     
    2929       
    3030}
     31}}}
    3132
    3233Очень странный при этом document_root, равен /var/www/123/$1, а script_name = $uri.