2012-10-27 74 views
-1

我甚至不知道如何調用這個方法,我只知道我想要實現的行爲。如何使用目錄名稱作爲選項或參數?

我的例子是Facebook。如果你去facebook.com/[username or id]你進入個人資料頁面,但我無法想象他們正在創建一個目錄在他們的根文件夾中,併爲每個用戶放置一個索引文件。

那麼如何完成以下行爲;你去somepage.com/foo/bar/hello但實際上你要求somepage.com/foo?bar=hello

這甚至有可能與Apache和PHP?

+0

是的,看看Apache的'mod_rewrite'和'.htaccess'文件 – nickhar

+1

這個東西叫做URL。即使它可以映射到目錄,它也不能。如何處理URL完全被收到的網絡服務器隱藏。在HTTP標準中沒有任何地方說它必須存在某種類型的目錄結構。 – hakre

+0

http://tools.ietf.org/html/rfc3986和http://tools.ietf.org/html/rfc2616往往很好理解與URL重寫和與您的網絡服務器和網頁瀏覽器交互PHP腳本。 – hakre

回答

2

我甚至不知道如何調用這個方法,我只知道我想要實現的行爲。

這個東西被稱爲URI/URL,它的本地部分被傳遞給一個web服務器。網絡服務器然後處理請求。

這甚至有可能與Apache和PHP?

是的。甚至沒有。這是一個Web服務器的用途。服務器上發生的事情完全由HTTP協議屏蔽,HTTP協議只知道URI/URL規範,該規範不規定是否需要與Web服務器上的具體進程或文件匹配。

例如,對於Apache HTTP Server,有一個名爲Mod_Rewrite的着名模塊進行URL重寫。通常,瀏覽器的用戶不會注意到這一點。

示例配置與PHP文件(apache httpd的):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule> 

在PHP腳本,你可以通過使用特殊變量像$_SERVER['REQUEST_URI'] and $_SERVER['QUERY_STRING']獲得URI/URL。

1

通常這是用mod rewrite進行的。在那裏你可以製作一個腳本變量的「路徑」。

E.g. http://example.com/user/1/edit可以與國防部重寫被翻譯爲http://example.com/index.php?function=edit&userid=1

這樣的規則是這樣的:

RewriteEngine on 
RewriteRule ^/user/([0-9]+)/([a-z]+)$ index.php=function=$2&userid=$1 [L] 

第一行激活重寫模塊的第二行有一個正則表達式重寫URL必須匹配內部。如果你喜歡,你也可以使用外部[L][R]修飾符instad。

看看整個documentation瞭解更多。

在breckets中的東西是所謂的旗幟也是well documentated

我希望有幫助!

相關問題