-2

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

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

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

我的 index.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 not found 错误:

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

但其他一切都在工作(index.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 上它工作正常。

提前致谢。

4

1 回答 1

3

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

您可以在 PHP 中放置调试语句来检查“if”语句之前、“if”语句内部和之后的 URL。您将很快确定您对“php”脚本的请求是否进入该脚本,以及多远。

其次,第二个请求(browse.php)的日志显示了什么?到达的请求是否正确形成?

最后,您粘贴的响应代码并不能说明全部情况,因为它们没有显示重定向轨迹。使用 Perl 的 LWP 发行版中的“HEAD”之类的工具。(为许多操作系统打包)。然后,您将看到原始请求和重定向请求,以及每个请求的单独响应代码。以下示例显示了 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”请求。您可以单击左侧的名称以查看每个名称的完整请求/响应标头。

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

于 2012-06-21T20:41:40.857 回答