каталоги nginx без косой черты

У меня такая конфигурация nginx + phpfpm + phpmyadmin:

root /var/www/utils;

location ~ ^/phpmyadmin/.*\.(jpg|jpeg|gif|png|css|js|ico)$ {
    root           /var/www/utils;
}

location = /phpmyadmin {
    index index.php;
}

location ~ ^/phpmyadmin.*(\.php|)$ {
    index          index.php;
    fastcgi_index  index.php;
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

Все хорошо, но если я удалю "location = / phpmyadmin", я получаю ошибку 403 на _http: // server / phpmyadmin.

Как я могу получить доступ ко ВСЕМ подкаталогам, таким как _http: // server / phpmyadmin / setup?

Я получаю сообщение «Доступ к сценарию / var / www / utils / phpmyadmin / setup запрещен - в каждом каталоге без косой черты в конце, если я не написал специальную конфигурацию для каждого из них.


person xwild    schedule 23.10.2012    source источник
comment
По теме: stackoverflow.com/questions/645853/   -  person That Brazilian Guy    schedule 14.03.2013


Ответы (1)


Как указано в документации nginx:

Переменная $ fastcgi_script_name принимает значение URI входящего запроса, и в случае, если URI заканчивается косой чертой, тогда к $ fastcgi_script_name добавляется то, что определено с директивой fastcgi_index.

Итак, если ваш запрос - «/ phpmyadmin / setup /», а для fastcgi_index установлено значение «index.php», тогда переменная $ fastcgi_script_name будет «/phpmyadmin/setup/index.php». Следовательно, $ document_root плюс $ fastcgi_script_name будет "/var/www/utils/phpmyadmin/setup/index.php", что должно работать нормально.

Но если вы сделаете запрос типа «/ phpmyadmin / setup» (без косой черты в конце), тогда $ fastcgi_script_name не будет добавлено fastcgi_index, т.е. это будет просто «/ phpmyadmin / setup». И $ document_root плюс $ fastcgi_script_name будет "/ var / www / utils / phpmyadmin / setup", что не будет работать, поскольку такого файла нет.

Вы должны либо использовать URI с косой чертой, либо определить правило перезаписи (в «серверном» блоке конфигурации), которое будет добавлять косую черту к URI, которые не заканчиваются каким-либо расширением (так что URI типа «/ phpmyadmin / myscript. php "не преобразуется в" /phpmyadmin/myscript.php/ ". Это должно быть примерно так:

rewrite ^([^\.]*[^\/])$ $1/ break;

Однако сам не проверял.

person kernel    schedule 10.11.2012