3

我有这个 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'的访问被拒绝 - 如果我没有为每个目录编写一个特殊的配置,那么每个目录最后都没有斜线。

4

1 回答 1

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_index 将不会附加$fastcgi_script_name,即它只是“/phpmyadmin/setup”。$document_root 加上 $fastcgi_script_name 将是“/var/www/utils/phpmyadmin/setup”,因为没有这样的文件,所以它不起作用。

您应该使用带有斜杠的 URI,或者定义一个重写规则(在“服务器”配置块中),这将为不以某些扩展名结尾的 URI 添加斜杠(这样 URI 就像“/phpmyadmin/myscript. php" 不会转换为 "/phpmyadmin/myscript.php/"。它应该是这样的:

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

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

于 2012-11-10T09:21:00.007 回答