没有斜杠的nginx目录

时间:2012-10-23 06:06:36

标签: configuration nginx slash

我有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'已被拒绝 - 如果我没有为每个目录编写特殊配置,那么在每个目录上都没有斜杠。” / p>

1 个答案:

答案 0 :(得分: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_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;

虽然没有测试我自己。