Nginx服务器配置:访问页面调度的php扩展,并提供专用和单独的php文件夹

时间:2019-02-05 14:30:37

标签: nginx

正如标题所述,我正在寻找一种配置,使PHP文件可访问,而无需从请求的URL扩展即可,并且不允许直接访问PHP。而且还有用于PHP脚本和资源的单独文件夹。在这种情况下,www根目录中的文件夹分别名为“ php”和“ public”。我正在Ubuntu上运行nginx / 1.10.3。

我尽了最大的努力,几乎找到了DuckDuckGo上的所有列表。问题似乎出在'if'块上,因为即使文件存在,它也不会重写uri。我试着将此重写包含在名为“ @phpext”的单独位置中,并将其包含在try_files中,但是没有运气。我已经测试了php-cgi本身,并且工作正常。

server {
    listen 80 default_server;
    ...
    server_name potatoi-t.com www.potatoi-t.com;

    root /servers/www/;
    index index;

    location / {
        if (-f /php$uri.php) {
            rewrite ^(.*)$ /php$1.php last;
        }
        try_files /public$uri /public$uri/index =404;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        include snippets/fastcgi-php.conf;
        internal;
    }
}

我希望以下网址解析为以下文件:

http://www.potatoi-t.com/     (通过php-cgi)/servers/www/php/index.php

http://www.potatoi-t.com/images/existingImage.php     /servers/www/public/images/existingImage.php

http://www.potatoi-t.com/index.php     (返回404)

http://www.potatoi-t.com/nonExistantFile     (返回404)

任何建议都将受到高度赞赏!我是自学成才的,并且是nginx config的新手,所以如果不做任何解释,我将非常感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

解决方案有效。 -f运算符需要一个路径,而不是相对于根目录的URI。将该URI与$document_root变量结合在一起,就可以找到文件系统中可能的有效位置的路径。

  

-f运算符需要路径名而不是URI。试试:if (-f $document_root/php$uri.php) { ... }