我有兴趣从Apache / mod_php切换到Nginx的一些非CMS网站我正在运行。 问题的网站是完全静态的HTML文件或简单的PHP,但他们有一个共同点是,我目前正在使用Apache的mod_negotiation服务他们没有文件扩展名。 我不关心实际的内容谈判; 我正在使用这个,所以我不必在我的url中使用文件扩展名。
例如, /info/contact /info/contact.php的文件通过just /info/contact的URL访问
实际的文件是在该位置的.php文件,但我不使用URL中的扩展名。 这给了我稍微更短,更干净的url,也没有向用户公开实质上没有意义的实现细节。 在Apache中,所有这些都需要启用mod_negotiation并将+ MultiView添加到该站点的选项中。 在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. }
或者,您可以使用:
try_files $uri $uri/ index.php;
如果没有find/foo/bar/somethingelse.php , /foo/bar/index.php如果没有/ index.php前面的/它会查找/foo/bar/somethingelse.php 。 (大多数人都有/index.php作为回退,因为这通常与wordpress和类似的CMSes一起工作)。