2012-06-21 48 views
-2

我已經安裝了一個後綴代理和我使用通配符子域DNS以下重寫上:nginx的:重寫PHP不工作

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

我的後綴代理具有以下URL格式: (子域和/或域名+域擴展到代理).proxy.org /(Request-URI中爲proxy)

我有這個PHP代碼在我的index.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 

,但一切工作(也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上它工作正常。

在此先感謝。

+0

您可能需要更改nginx的第一個重定向配置並刪除if-test。 [這被認爲是邪惡的!](http://wiki.nginx.org/Pitfalls#Check_IF_File_Exists) – Zombaya

回答

3

由於存在原始請求的處理以及發出重定向頭之後的第二個請求,所以有幾個層無法工作。

你可以在你的PHP中放置調試語句來檢查'if'語句'之前,'if'語句之內和之後的URL。你很快就會確定你對'php'腳本的請求是否已經進入這個腳本,並且有多遠。

二,什麼是日誌顯示爲請求,要browse.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 

替代,你可以使用內置的鉻/谷歌,Chrome瀏覽器開發者工具。打開它,選擇網絡標籤,然後加載google.com。你會看到'301'請求,然後是'200'請求。您可以點擊左側的名稱以查看每個名稱的完整請求/響應標題。

最後,考慮以問題的形式重寫您的標題以匹配Q &本網站的格式。

+0

謝謝!位置是錯誤,我已經移除了位置,現在它完美地工作。 –