正如标题所述,我正在寻找一种配置,使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的新手,所以如果不做任何解释,我将非常感谢。谢谢!
答案 0 :(得分:0)
解决方案有效。 -f
运算符需要一个路径,而不是相对于根目录的URI。将该URI与$document_root
变量结合在一起,就可以找到文件系统中可能的有效位置的路径。
-f运算符需要路径名而不是URI。试试:
if (-f $document_root/php$uri.php) { ... }