nginx:重写PHP不起作用


nginx: Rewrite PHP does not work

我安装了后缀代理,并且我正在使用以下通配符子域DNS重写:

location / {
     if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php last;
        break;
     }
}

我的后缀代理具有以下 URL 格式:(子域和/或域 + 代理的域扩展名).proxy.org/(request-uri 到代理)

我的索引中有这个php代码.php:

if(preg_match('#(['w'.-]+)'.example'.com(.+)#', $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'], $match)) {
    header('Location: http://example.com/browse.php?u=http://'.$match[1].$match[2]);
    die;
}

但是当请求带有.php扩展名的页面时,我会收到一个 404 找不到错误:

http://www.php.net.proxy.org/docs.php - HTTP/1.1 404 Not Found
http://www.utexas.edu.proxy.org/learn/php/ex3.php - HTTP/1.1 404 Not Found

但是其他一切都在工作(也是索引.php正在工作):

http://php.net.proxy.org/index.php - HTTP/1.1 200 OK
http://www.php-scripts.com.proxy.org/php_diary/example2.php3 - HTTP/1.1 200 OK
http://www.utexas.edu.proxy.org/learn/php/ex3.phps - HTTP/1.1 200 OK
http://www.w3schools.com.proxy.org/html/default.asp - HTTP/1.1 200 OK

有人有答案吗?我不知道为什么它不起作用,在 apache 上它工作正常。

提前谢谢。

有几个层无法正常工作,因为有原始请求的处理,以及发出重定向标头后遵循的第二个请求。

您可以在 PHP 中放置调试语句,以检查 'if' 语句之前、'if' 语句内和之后的 URL。您很快就会确定您对"php"脚本的请求是否进入此脚本,以及多远。

其次,日志显示第二个请求(浏览.php)的内容?到达的请求格式是否正确?

最后,您粘贴的响应代码不会说明全部情况,因为它们不显示重定向跟踪。使用像 'HEAD' 这样的工具,它出现在 Perl 的 LWP 发行版中。(针对许多操作系统打包)。然后,您将看到原始请求和重定向请求,以及每个请求的单独响应代码。以下示例显示了 google.com 如何重定向到 www.google.com:

$ HEAD -sSe 'http://google.com'
HEAD http://google.com
301 Moved Permanently
Cache-Control: public, max-age=2592000
Connection: close
Date: Thu, 21 Jun 2012 20:34:38 GMT
Location: http://www.google.com/
Server: gws
Content-Length: 219
Content-Type: text/html; charset=UTF-8
Expires: Sat, 21 Jul 2012 20:34:38 GMT
Client-Date: Thu, 21 Jun 2012 20:34:29 GMT
Client-Peer: 74.125.225.104:80
Client-Response-Num: 1
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
HEAD http://www.google.com/
200 OK
Cache-Control: private, max-age=0
Connection: close
Date: Thu, 21 Jun 2012 20:34:38 GMT
Server: gws
Content-Type: text/html; charset=ISO-8859-1
Expires: -1
Client-Date: Thu, 21 Jun 2012 20:34:29 GMT
Client-Peer: 74.125.225.208:80
Client-Response-Num: 1
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Set-Cookie: PREF=ID=3d125e353127a33a:FF=0:TM=1340310878:LM=1340310878:S=D64LXQ4HKALmBZ_c; expires=Sat, 21-Jun-2014 20:34:38 GMT; path=/; domain=.google.com
Set-Cookie: NID=61=jEiVUOmNI_XWhc78fdGMXmZVfOK-j-7S1njjY9xedBR8CIZAy0pKgAtsiIzO4MLnvFKCJ_gUm4Zx-7TKl3gmHPrEzaWbSAB52LPgZlXoFdzJb7RW_wx-UGjQRCLag0Lt; expires=Fri, 21-Dec-2012 20:34:38 GMT; path=/; domain=.google.com; HttpOnly
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

或者,您可以使用Chromium/Google-Chrome内置的开发人员工具。打开它,选择"网络"选项卡,然后加载 google.com。您会看到一个"301"请求,后跟一个"200"请求集。您可以单击左侧的名称以查看每个名称的完整请求/响应标头。

最后,考虑以问题的形式重写标题,以匹配本网站的问答格式。