nginx $ document_root с подкаталогами вставляет подкаталог в его путь

Я работаю с подкаталогами. Я хочу, чтобы «babylon / webmail» зашёл в мой почтовый клиент rainloop.

location ^~ /webmail {
root /srv/rainloop/public_html;
try_files $uri $uri/ /webmail/index.php?$query_string;
access_log /srv/rainloop/logs/access.log;
error_log /srv/rainloop/logs/error.log;
index index.php;
access_log /var/log/nginx/scripts.log scripts;

location ~ \.php$ {
#fastcgi_index index.php;
#fastcgi_split_path_info ^(.+\.php)(.*)$;
#fastcgi_keep_conn on;
#include /etc/nginx/fastcgi_params;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

#try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /srv/rainloop/public_html/index.php;
#include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

location ^~ /webmail/data {
deny all;
}
}

Однако это

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

не работает вообще. Распечатывает: / srv / rainloop / public_html /WebMail/index.php; Этот файл не существует в структуре каталогов, но: /srv/rainloop/public_html/index.php

fastcgi_param SCRIPT_FILENAME /srv/rainloop/public_html/index.php;

П.С .: После жесткого кодирования я вообще не получаю никаких ошибок, но страница пуста с некоторым исходным кодом кода rainloop.

1

Решение

Путь к файлу рассчитывается путем конкатенации значения root к URI. URI содержит /webmail/index.phpиначе это не будет соответствовать location блок.

Вы, вероятно, хотите использовать alias вместо root так как эта директива удаляет значение префикса location при расчете пути к файлу. Увидеть этот документ для деталей.

location ^~ /webmail {
alias /srv/rainloop/public_html;
if (!-e $request_filename) { rewrite ^ /webmail/index.php last; }

...

location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Избегать использования try_files а также alias в том же блоке, из-за этот долгосрочный вопрос, и посмотреть это предостережение на использование if, использование $request_filename для значения SCRIPT_FILENAME.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector