Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让NGINX执行所有URL';s通过index.php保存在文件夹中_Php_Nginx_Silverstripe - Fatal编程技术网

如何让NGINX执行所有URL';s通过index.php保存在文件夹中

如何让NGINX执行所有URL';s通过index.php保存在文件夹中,php,nginx,silverstripe,Php,Nginx,Silverstripe,我已经为此做了大量的搜索,但我找不到合适的答案 基本上,我有一个在NGINX上运行的内置SilverStripe的站点。这一切都很好,但我希望通过管理员上传的任何文件/图像(到资产文件夹)都可以通过站点根目录中的index.php解析(这样我们可以在将文件返回给用户之前检查管理员中设置的文件的权限) 我有一个非常简单的nginx配置(用于我的本地docker实例): 问题在于: location ^~ /assets/ { try_files $uri /index.php?$q

我已经为此做了大量的搜索,但我找不到合适的答案

基本上,我有一个在NGINX上运行的内置SilverStripe的站点。这一切都很好,但我希望通过管理员上传的任何文件/图像(到资产文件夹)都可以通过站点根目录中的index.php解析(这样我们可以在将文件返回给用户之前检查管理员中设置的文件的权限)

我有一个非常简单的nginx配置(用于我的本地docker实例):

问题在于:

  location ^~ /assets/ {
      try_files $uri /index.php?$query_string;
  }

不幸的是,
try\u files
在将请求移交给php之前检查文件是否存在。是否有方法停止此操作并将所有请求从资产目录直接传递到PHP?

try\u files
需要两个参数,因此可以使用一个伪值替换文件术语。例如:

try_files nonexistent /index.php$is_args$args;
有关详细信息,请参阅


但更简洁的解决方案可能是重写…最后一句话:

rewrite ^ /index.php last;

rewrite
指令将自动附加查询字符串。请参阅以了解详细信息。

在我看来,盲目地将所有内容传递给适当的脚本是最好的选择 正确的(TM)事情要做

location /assets/ {
    include       fastcgi_params;
    fastcgi_param SCRIPT_NAME /index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_pass  php:9000;
}

尝试删除
$uri
,这样它就不会查找它。虽然我不确定just
$query\u string
是否有帮助,但您是否打算将$uri作为GET参数传递给PHP?我确实尝试过,但正如下面的回答所述,try\u文件需要两个参数。我确实通过使用
try\u files/index.php?$query\u string/index.php?$query\u string完美!重写工作很有魅力。我确实认为
rewrite
可能是答案,我没有意识到查询字符串是自动附加的。
location /assets/ {
    include       fastcgi_params;
    fastcgi_param SCRIPT_NAME /index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_pass  php:9000;
}