对于我正在运行的一些非CMS网站,我有兴趣从Apache / mod_php切换到Nginx.有问题的网站要么是完全静态的HTML文件,要么是简单的PHP,但他们共同的一点是我正在使用Apache的mod_negotiation来提供它们而不需要文件扩展名.我不关心实际的内容谈判;我正在使用它,所以我不必在我的URL中使用文件扩展名.
例如,/ info/contact.php中的文件是通过/ info / contact的URL访问的
实际文件是该位置的.php文件,但我不在URL中使用该扩展名.这为我提供了更短,更清晰的URL,也没有向用户公开实质上无意义的实现细节.在Apache中,所有这些都是启用mod_negotiation并将MultiViews添加到站点的选项中.在Nginx中我收集到的我会以某种方式重写,但是对Nginx不熟悉,我不确定如何做到这一点.
这些网站目前在从Nginx到Apache的代理工作正常,但我想尝试使用Nginx / fastcgi来运行它们.只要我使用扩展,它们就可以正常工作,因此fastcgi方面工作得很好.我现在关心的是删除这些扩展.
重要的是要记住,在子目录的情况下,文件名并不总是在URL中.那是,
/ foo / bar应该查找/foo/bar.php或/foo/bar/index.php
/ foo /应该寻找/foo/index.php
有没有一种简单的方法来实现这一点与Nginx或我应该坚持代理到Apache?
最佳答案
你不需要任何繁琐的重写,try_files完美地适用于此.它基本上只有一条线.
server {
server_name foo.com;
root /your/root/path;
index index.php;
location /
try_files $uri.php $uri/ /notfound.html;
}
# Your standard PHP location and everything else is still required here.
}