当前位置: 首页 > 知识库问答 >
问题:

Nginx配置:全部路由。php文件,除非它包含文件管理器的路径

太叔志尚
2023-03-14

我正在做一个新的项目,它将有许多来自旧网站URI的重定向。许多旧URI包含。php扩展名位于uri中,Nginx尝试将它们作为文件加载,而不是退回到重定向控制器方法。

为了让它更复杂一些,我们将wysiwyg编辑器与文件管理器一起使用,当调用文件管理器时,它使用。php扩展,因此需要排除此扩展。

实际上,我希望它的工作方式,以便当我调用例如旧的uri,如/old-page/path/file.php时,它将通过index.php路由它,但是当我调用/供应商/ckfinder/plugins/filemanager/dialog.php?...时,它将加载实际的文件。

我看过这篇文章,它并没有真正解决我所追求的,但我认为这是一个很好的起点,如何删除两者。php和。使用NGINX从url扩展html?

我现有的设置是

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

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

任何帮助都将不胜感激。

更新

我尝试了@Richard Smith建议,在阅读了文档后,我认为该建议应该有效,但不幸的是,无论出于何种原因,它都无效。以下是我尝试的:

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

location ~ \.php$ {
    try_files $uri /index.php?$query_string;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    include fastcgi_params;
}

所以try_files检查$uri是否存在-如果不存在,则返回到/index.php?$query_string;,这应该将请求指向index.php。知道我可能错过了什么吗?

共有1个答案

松昱
2023-03-14

如果新服务器上不存在PHP文件,最简单的解决方案是将任何不存在的PHP文件重定向到/index。php-就像您对非php URI所做的一样。

例如:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
    try_files $uri /index.php?$query_string;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    include fastcgi_params;
}

fastcgi_split_path_infofastcgi_index语句,并且在此特定的位置块中不需要。

有关更多信息,请参阅此文档。

 类似资料:
  • 问题内容: 我正在尝试使用php创建一个zip文件(确实如此-从此页面获取-http://davidwalsh.name/create-zip- php ),但是zip文件中的所有文件夹名称都是文件本身。 可以将zip文件中的文件减去所有文件夹吗? 这是我的代码: 问题答案: 这里的问题是要传递相同的两个参数。 根据文档: bool ZipArchive :: addFile (字符串 $ fil

  • 我希望有一个响应的应用程序。它应该有一个不同的导航在一个小屏幕上(一系列屏幕下钻至详细页面)和一个大屏幕上(左面板详细信息在一个页面上)。 由于Angular2中的路由是在组件级别上定义的,因此我的想法是创建一个根级组件,该组件将有条件地(ngIf)包括bigScreen.component.ts或smallScreen.component.ts。然后,路由本身将在 bigScreen/small

  • 问题内容: 我的目录结构如下: script.php inc / include1.php inc / include2.php 对象/ object1.php 对象/ object2.php soap / soap.php 现在,我在和中都使用了这些对象,可以移动它们,但是出于特定的原因,我想要这样的目录结构。当执行包含路径is 和执行它时,绝对路径有效,但是如果我想将目录移动到其他位置,则这是

  • 每个路由可以有不同的属性; 一些常见的属性是: path - 应用程序在特定路由上时在浏览器中显示的URL component - 当应用程序在特定路由上时要呈现的组件 pathMatch - 默认为’prefix’的可选属性。 确定是匹配完整的网址还是仅匹配开头。 当定义一个具有空路径字符串的路径设置pathMatch为’full’时,否则它将匹配所有路径。 children - 表示此路由的子

  • 我使用的是自由配置文件作为我的应用程序服务器,logback作为记录器。我已经按照logback留档的建议将logback.xml放在类路径位置,但它没有被识别。当我创建一个logback.xml的jar并将其放在相同的路径上时,它会被识别。但是jar的问题是我无法在运行时修改日志记录级别。 我已经阅读了下面的链接,在liberty中阅读conf文件是不可能的。我不确定是否如此。如果是这样的话,那

  • NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。 默认情况下,文件名为并放在目录中(对于开源NGINX产品,位置取决于用于安装NGINX和操作系统的软件包系统,它通常位于或。) 配置文件由指令及其参数组成。 简单(单行)指令各自以分号结尾。 其他指令作为“容器”,将相关指令组合在一起,将其包围在花括号()中。 以下是简单指令的一些示例。 为了使配置更易于维护,建议您将其拆分