我正在开发新项目,该项目将有许多来自旧网站 uris 的重定向。许多旧的 uri 包含.php
扩展名,uri
Nginx 尝试将它们作为文件加载,而不是回退到我们的重定向控制器方法。
为了让它更棘手一点,我们使用带有文件管理器的所见即所得编辑器,当调用它时 - 使用.php
扩展名,因此需要排除这个。
实际上,我希望它以这样的方式工作,以便当我调用例如 old 时uri
,/old-page/path/file.php
它会通过它路由它,index.php
但是当我调用/vendor/ckfinder/plugins/filemanager/dialog.php?...
它时,它将加载实际文件。
我看过这篇文章,它并没有真正解决我所追求的问题,但我认为这是一个很好的起点如何使用 NGINX 从 url 中删除 .php 和 .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
. 知道我在这里可能缺少什么吗?