我有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>
答案 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;
虽然没有测试我自己。