【问题标题】:How to redirect ALL requests, even index.php to go to another php file (parse.php)如何重定向所有请求,甚至将 index.php 重定向到另一个 php 文件(parse.php)
【发布时间】:2013-05-17 10:51:00
【问题描述】:

现在我的 nginx 配置中有这个:

location / {
     rewrite ^(.*)$ /parse.php;
}

然后再往下:

location ~\.php$ {
            root /var/www/site.com/public/;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            include fastcgi_params;

            fastcgi_pass 127.0.0.1:9000;
    }

如果我浏览到

site.com/example/this

它按预期执行并转到 parse.php($_SERVER['REQUEST_URI'] 正确设置为 '/example/this')。 site.com/images/test.jpg 也是如此,它将按预期工作并将其传递给 parse.php 脚本。

但是,如果我进入“site.com/another.php”,它不会解析,而是显示:

没有指定输入文件。

知道如何让它工作吗?我删除了 try_files 子句,但仍然没有运气。

【问题讨论】:

    标签: url-rewriting nginx php


    【解决方案1】:

    好吧,如果有人想知道,这就是解决方案,只需将两个位置块合并在一起,然后添加中断;重写迫使一切都去 php 脚本。

    由于某种原因,当两个块分开时,第一个位置(指定所有内容都应重写为 parse.php)被第二个位置(仅针对 php 文件)覆盖,并以某种方式将请求恢复为原始 php根据重写文件而不是 parse.php。

    location / {
        rewrite ^(.*)$ /parse.php break;
    
        root /var/www/site.com/public/;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    
        include fastcgi_params;
    
        fastcgi_pass 127.0.0.1:9000;
    }
    

    这将有效地解析对给定 server{} 块的 parse.php 的每个请求。

    现在您可以通过 $_SERVER['REQUEST_URI']; 确定原始请求;在你的 parse.php 脚本中,然后从那里做任何你想做的事情。

    【讨论】:

      【解决方案2】:

      实际上你不需要重写规则,因为每个请求都发送到parse.php。正则表达式很慢。你也可以试试这个:

      location / {
      
          root /var/www/site.com/public;
      
          include fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME  $document_root/parse.php;
          fastcgi_param  SCRIPT_NAME  parse.php;
      
          fastcgi_pass 127.0.0.1:9000;
      }
      

      【讨论】:

      • 我还删除了fastcgi_split_path_info 行,因为没有rewrite 规则就不需要它。默认情况下,$request_uri 将不加任何修改地传递给 php。这样更干净。
      【解决方案3】:

      $uri 仅用于资产支持,图片和静态文件如果找到将直接提供而不传递给 parse.php,否则将传递给 parse.php

      location / {
          try_files $uri /parse.php$request_uri;
          include fastcgi_params;
          fastcgi_pass 127.0.0.1:9000;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 2013-10-26
        • 2015-04-10
        • 1970-01-01
        • 2014-12-05
        • 1970-01-01
        相关资源
        最近更新 更多