1

我正在开发新项目,该项目将有许多来自旧网站 uris 的重定向。许多旧的 uri 包含.php扩展名,uriNginx 尝试将它们作为文件加载,而不是回退到我们的重定向控制器方法。

为了让它更棘手一点,我们使用带有文件管理器的所见即所得编辑器,当调用它时 - 使用.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. 知道我在这里可能缺少什么吗?

4

1 回答 1

1

如果新服务器上不存在 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_infoandfastcgi_index语句和不是必需的。location

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

于 2018-04-10T12:37:34.723 回答