在ASP.Net我們HttpHandlers的可解析的請求,並相應地重定向用戶,大多是我們使用他們的URL重寫等我們有HttpHandlers的PHP中,我們在ASP.Net
我想知道我們在PHP中是否也有這樣的功能,如果是的話,解釋它的一個例子將會非常有用。
舉例來說,如果我要求一些服務器上的圖像文件,我想它重定向到一些網頁,如果該請求。如果從服務器X
在ASP.Net我們HttpHandlers的可解析的請求,並相應地重定向用戶,大多是我們使用他們的URL重寫等我們有HttpHandlers的PHP中,我們在ASP.Net
我想知道我們在PHP中是否也有這樣的功能,如果是的話,解釋它的一個例子將會非常有用。
舉例來說,如果我要求一些服務器上的圖像文件,我想它重定向到一些網頁,如果該請求。如果從服務器X
一些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);
您必須實現自己的機制或使用框架。 Zend Framework的請求經歷了類似的概念,但仍然與處理程序完全不同。
如果我正確理解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
和一些功能之間進行切換來處理請求。