2011-03-18 35 views
1

我剛剛繼承了一個使用PHP構建的網站。 www.mysite.com的主頁有一個hrefwww.mysite.com/index/35.html頁面中的某個地方。在網站的根目錄及其子目錄中沒有文件35.html。如何理解PHP的URL解析/路由?

數字35實際上是一個在數據庫中發現的id,它也包含頁面的html內容。

如果我加載URL:www.mysite.com/index.php?id=35加載相同的頁面。

如何PHP知道如何自動轉換

/index/35.html

/index.php?id=35


編輯 基於這些答案,我發現一個包含重寫指令的.htaccess文件可以解釋功能。

但是,似乎IIS(或未配置)知道如何使用它。 (可能是因爲這是一個Apache功能?)

因此,這引出了以下問題:有沒有辦法配置IIS以使用它?

+0

這是您的網絡服務器的功能。你在使用哪臺服務器? Apache的? – 2011-03-18 11:25:33

+0

@Martin IIS其實 – tzup 2011-03-18 11:28:52

+0

看來你是在談論調度員。看看這個[stackoverflow線程](http://stackoverflow.com/questions/5348837/is-there-a-reusable-router-dispatcher-for-php)。 – Francesco 2011-03-18 11:31:33

回答

1

它將完成使用URL重寫使用.htaccess - 應該在webroot中。

它可能看起來像:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php [QSA,L] 

可能有其他位,但是這是什麼主要是告訴Apache是​​發送任何物理上不存在的index.php

+0

我在.htaccess中有類似的東西,但它似乎不適用於IIS。這是一個Apache功能嗎? – tzup 2011-03-18 11:34:42

+0

是的。有一個IIS重寫工具(http://www.isapirewrite.com/)(並非用於個人的臨時年),它允許重寫規則的使用相同。 – Brian 2011-03-18 11:41:38

+0

謝謝@布萊恩,我會看看。 – tzup 2011-03-18 11:53:42

1

它沒有。有一個mod_rewrite規則,該規則從/index/foo重寫爲/index.php?id=foo,或者在.htaccess文件中或在httpd配置本身中。

+0

太棒了,它在.htaccess中,但它似乎不能在IIS下工作,這意味着重寫會導致404錯誤。這是Apache的事情嗎? – tzup 2011-03-18 11:32:51

+0

是的,儘管有可以模仿它的ISAPI模塊。 – 2011-03-18 11:41:28

1
RewriteEngine On 
RewriteRule ^index/([\d]+)\.html /index.php?id=$1 [NC,L] 

這是離開我的頭頂。任何試圖加載以index開頭的地址的瀏覽器/以.html結尾的任何數字都將在內部重定向到index.php?id =無論數字是多少。

編輯:剛纔看到你在IIS上工作。這可能不適合你。抱歉。

+0

我在.htaccess文件中發現了這樣的重寫。但是,IIS似乎沒有利用這一點。這是否重寫了Apache功能?是否有一個等效的IIS? – tzup 2011-03-18 11:39:58

+0

@tzup - 是的 - 看到我上面的評論:) – Brian 2011-03-18 11:43:17

0

我想你會使用.htaccess將所有請求重定向到index.php。從那裏你可以傳遞查詢字符串一個路由類,它將解析URL並識別唯一的ID。 在這種情況下,我們可以說,你的路由類將解析請求/index/35.html到indexController, indexAction, id=35。現在你可以將這個id傳給模型以獲得相應的頁面內容

注意:在這裏我假設你正在使用mvc模式。無論如何,它可以用你自己的方式處理,而概念保持不變。希望這樣做。

+0

其實,我不是,但你在正確的軌道提及.htaccess。我沒有投票給你。 – tzup 2011-03-18 11:57:52

+0

+1,因爲我不認爲這個答案值得downvote。 – tzup 2011-03-18 12:00:31