apache-2.2 – 使用Nginx的Apache风格的多视图

对于我正在运行的一些非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.
}

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...