2011-05-04 19 views
2
有它

在ASP.Net我們HttpHandlers的可解析的請求,並相應地重定向用戶,大多是我們使用他們的URL重寫等我們有HttpHandlers的PHP中,我們在ASP.Net

我想知道我們在PHP中是否也有這樣的功能,如果是的話,解釋它的一個例子將會非常有用。

舉例來說,如果我要求一些服務器上的圖像文件,我想它重定向到一些網頁,如果該請求。如果從服務器X

回答

1

一些PHP框架提供類似的功能。如果你想在PHP重定向你設置的標頭直接

eg 
header('Location: http://www.invalid.com/newpage.pgp'); 
exit; // make sure to exit or the script will keep executing 

,如果你想當前的URL等,您將需要查詢$ _ SERVER VAR

試試這個,看看有什麼信息,你可以從您的服務器獲取

var_dump($_SERVER); 
1

您必須實現自己的機制或使用框架。 Zend Framework的請求經歷了類似的概念,但仍然與處理程序完全不同。

3

如果我正確理解HTTPHandlers,這通常是通過一些欺騙手段完成的。很顯然,任何進入Web服務器(IIS,Apache等)的請求都會嘗試匹配一個文件。

GET /index.php HTTP 1.1 

此請求將到達index.php文件,PHP將處理該文件,然後該響應將被髮送到客戶端。顯然,客戶端會看到PHP產生的任何輸出。

HTTPHandlers通過查看傳入請求並將該請求映射到一段代碼(可能是一個函數)來工作,但它可以告訴Web服務器客戶端應該如何通過配置訪問該代碼。

以下是說明映射的an example borrowed from microsoft

<httpHandlers> 
    <add verb="*" path="*.sync" type="MyHandler.SyncHandler, MyHandler" /> 
</httpHandlers> 

在PHP中,這可以分兩步完成。首先,Web服務器需要將所有請求路由到一個PHP文件。其次,該PHP文件必須指導程序流程。

在Apache中,您可以在網站的根目錄中配置.htaccess文件的路由位。這個example會將磁盤上不存在的任何東西路由到index.php

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

從那裏,PHP只需要知道用戶正在尋找什麼網址,並決定如何做。這可以通過使用從Apache傳遞的REQUEST_URI值來完成。

$_SERVER['REQUEST_URI']; 

所以,如果一個用戶請求:

GET /profile/settings HTTP 1.1 

REQUEST_URI是:

$url = $_SERVER['REQUEST_URI']; 
echo $url; // => "/index.php/profile/settings" 

除此之外,一個人可以申請一個正則表達式REQUEST_URI和一些功能之間進行切換來處理請求。

相關問題