2009-10-27 73 views

回答

0

這實際上不是一個PHP5相關的問題 - URL重寫是您的網絡服務器的一部分。

你可以,當你在Apache上使用mod_rewrite(不知道IIS,但可能有類似的東西)。

1

不需要需要mod_rewrite來處理這樣的場景。大多數流行的PHP框架目前都支持URI段解析。這是一個簡單的例子,仍然有一些安全漏洞被修補。

你可以通過採取全球$ _ SERVER變量之一,並分割它向前處理這個斜槓,像這樣:

if (!empty($_SERVER['REQUEST_URI'])) { 
    $segments = explode('/', $_SERVER['REQUEST_URI']); 
} 

$段變量現在將包含段的數組遍歷。

+1

你仍然需要mod_rewrite將所有調用重定向到奇異的PHP腳本;) – 2009-10-27 23:41:25

+0

你需要mod_rewrite或其他一些機制將所有這些不同的請求映射到一個執行這種分割的php腳本(通常稱爲路由)。 – rojoca 2009-10-27 23:43:40

+0

@Kent,kudos。我爲自己踢了一把。 – 2009-10-28 00:19:22

2

當然。如果開始是恆定的或者只有幾個可能的值,則甚至不需要mod_rewrite。創建一個名爲something(無擴展名)的php文件並告訴Apache(通過SetHandler或類似的指令)將其視爲PHP。然後,在腳本中檢查$_SERVER['PATH_INFO'],該腳本將看起來像a/few/directories/deep IIRC。不管你喜歡,你都可以用它來發送你的請求。

或者,正如Martin所說的那樣,使用簡單的mod_rewrite規則將其重寫爲/dispatch.php/something/a/few/directories/deep,然後在PATH_INFO中有完整的路徑。

1

假設你使用的是Apache ...

添加重寫規則(在你的虛擬主機的conf或剛落,在您的文檔根.htaccess文件),指向一切的index.php。那麼你的index.php的內部,解析請求URI和提取路徑

RewriteEngine on 
RewriteRule ^.*$ index.php [L,QSA] 

的index.php:
$文件路徑= $ _SERVER [ 'REQUEST_URI'];
$ filepath = ltrim($ myname,'/'); //如果你想要的話可​​以帶上斜槓。

+0

這是關於你想要的mod_rewrite規則的最大數量。 – staticsan 2009-10-27 23:53:34