Я пытаюсь использовать прием, описанный Робом Ван Аарлом Вот для выполнения php-страниц в «запрещенных путях» по умолчанию для веб-сервера Synology ...
Целью является создание пакетов, которые не зависят от "Init_3rdparty"(этот знаменитый пакет, который позволяет пользователям запускать php-страницы по пути типа / volumeX / @ appstore / на их Synology)
По сути, Роб предлагает вызвать скрипт, который выполняет php-страницу с помощью php-cgi (/ usr / local / bin / php56-cgi)
Пример: вызов такой cgi для выполнения расположенной рядом страницы test.php.
#!/bin/sh
REDIRECT_STATUS=1 export REDIRECT_STATUS
SCRIPT_FILENAME=$(pwd)/test.php export SCRIPT_FILENAME
/usr/bin/php-cgi -d open_basedir=none $SCRIPT_FILENAME 2>&1
Это нормально работает.
Но полная идея Роба состоит в том, чтобы использовать .htaccess для перенаправления вызовов любых страниц php на общий сценарий cgi.
.htaccess
# Turn on rewrite engine.
RewriteEngine on
# Rewrite existing php files to the router script.
# Apache on the Synology NAS automatically redirects url
# containing '../' to the corresponding real path, before
# the router script is executed, so it's impossible to
# execute system files.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*\.php)$ router.cgi [PT,L,QSA,NE]
router.cgi
#!/bin/sh
# Set redirect_status to 1 to get php cgi working.
REDIRECT_STATUS=1 export REDIRECT_STATUS
# Fix several $_SERVER globals.
PHP_SELF=$SCRIPT_URL export PHP_SELF
SCRIPT_NAME=$SCRIPT_URL export SCRIPT_NAME
# Strip web base from SCRIPT_URL, concat it to parent directory
# and apply realpath to construct absolute path to requested script.
WEB_BASE="/webman/3rdparty"
SCRIPT_FILENAME=$(pwd)/..${SCRIPT_URL:${#WEB_BASE}}
SCRIPT_FILENAME=`realpath $SCRIPT_FILENAME`
export SCRIPT_FILENAME
# Execute the requested PHP file.
/usr/local/bin/php56-cgi -d open_basedir=none $SCRIPT_FILENAME 2>&1
Я добавил следы в cgi, и проблема в том, что он никогда не вызывается в моем DSM 6.1. Итак, мне кажется, что .htaccess не "включен". Конкретно, вызов php-страницы загружает этот файл.
Предполагается ли, что .htaccess будет использоваться в Synology DSM 6.1, когда DSM обращается к странице php, расположенной по недопустимому пути? Если он должен работать, что может быть неправильно настроено на NAS?
МНОГИЕ спасибо в нареч. за то, что поделился своим опытом по этому поводу!
Вот демонстрационный пакет Создан Робом для иллюстрации своего поста.
Я наконец выяснил проблему. Последние версии DSM по умолчанию используют nginx вместо apache в качестве веб-сервера. А nginx - это не использовать файлы htaccess.