我正在开发新项目,该项目将有来自旧网站uris的许多重定向。许多旧uris在.php
中包含uri
扩展名,Nginx尝试将它们作为文件加载,而不是回退到我们的重定向控制器方法。
为了使它变得有点棘手,我们使用了文件管理器的wysiwyg编辑器,当被调用时 - 使用.php
扩展名,因此需要将其排除在外。
有效地,我希望它能够正常工作,以便当我呼叫uri
之类的旧/old-page/path/file.php
时,它会通过index.php
进行路由,但是当我呼叫{{1}时它将加载实际文件。
我已经看过这篇文章,它并没有真正解决我之后的问题,但我认为这是一个很好的起点How to remove both .php and .html extensions from url using NGINX?
我现有的设置是
/vendor/ckfinder/plugins/filemanager/dialog.php?...
非常感谢任何帮助。
更新
我尝试了@Richard Smith的建议,在阅读了我认为应该有用的文档之后,但不幸的是,无论出于何种原因 - 它不是 - 这就是我尝试的内容:
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;
}
因此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;
。知道我在这里可能缺少什么吗?
答案 0 :(得分: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_info
和fastcgi_index
语句,在此特定location
块中不需要。
有关详情,请参阅this document。