【问题标题】:nginx directories without slash没有斜杠的 nginx 目录
【发布时间】:2012-10-13 00:40:48
【问题描述】:

我有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”,我会在 _http://server/phpmyadmin 上收到 403 错误。

如何访问 _http://server/phpmyadmin/setup 等所有子目录?

我得到“对脚本'/var/www/utils/phpmyadmin/setup'的访问被拒绝-在每个目录最后没有斜线,如果我没有为每个目录编写特殊配置。

【问题讨论】:

标签: configuration nginx slash


【解决方案1】:

nginx documentation中所述:

$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;

不过,我自己并没有测试。

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2020-08-03
    • 2015-09-20
    • 1970-01-01
    • 2021-05-21
    • 2020-11-10
    • 1970-01-01
    • 2015-01-27
    • 2014-08-13
    相关资源
    最近更新 更多