【问题标题】:Nginx: Redirect all non-existing requests to index.phpNginx:将所有不存在的请求重定向到 index.php
【发布时间】:2012-12-09 15:25:08
【问题描述】:

我正在从 Apache 迁移到 Nginx。

我目前正在使用自定义内容管理解决方案,该解决方案利用 SERVER['request_uri'] 来处理路由。

我要做的是将所有不存在的文件和目录请求重定向到 /index.php,而不是更新客户端 uri。但是,当文件确实存在时,我想返回它。

一个示例网址是: localhost/content/page/1

【问题讨论】:

    标签: php url-rewriting nginx


    【解决方案1】:

    您需要在您的 nginx vhost 文件中添加一个location / 块或更新您当前的location / 块。

    如果找不到文件或目录,这会将所有请求重定向到index.php

    location / {
        try_files $uri $uri/ /index.php;
    }
    

    这在你的服务器指令中,更多信息请访问http://wiki.nginx.org/HttpCoreModule

    修改vhost文件后需要重启nginx

    注意:用于服务器块的 try_files 指令是在 0.7.44 中添加的

    【讨论】:

    • 顺便说一句,如何在 php 中获取重定向的文件名?
    • 当您将 .php 扩展名放在请求上时,这甚至不起作用。例如example.com/notexisting.php 将导致 404 而不是重写为 index.php
    • 此答案不完整,因为它不会将请求重定向到不存在的 PHP 文件。任何以 *.php 结尾的请求都会得到 404 响应并且不会被重定向。
    • 为了使这个也能与不存在的 PHP 脚本一起工作,除了 PhearOfRayne 的回答,你必须指定 fastcgi 只能用于index.php。使用Location /index.php { fastcgi_pass... } 而不是Location / { fastcgi_pass... }。这假设您没有其他脚本,但 index.php
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多