2010-03-11 82 views
1

我認爲這是一個noob問題,但這裏有一點。GET變量和漂亮的URL

我想在PHP中更好地瞭解$ _GET變量。很多CMS的等轉換之類的東西site.com/?ID=42成類似site.com/42

我的問題是,會發生什麼,當這種情況發生的$ _GET變量?我嘗試在頁面加載時打印GET數組,並且它是空的。

回答

1

如果您將參數傳遞這樣一來,他們將不再是GET變量,因爲它們不使用傳統的? GET語法通過。它們只是URL的一部分,將由您正在使用的「CMS」框架進行解析。

但是,如果你偶然路過一個「傳統」 GET變量,想讀它的服務器上,你就必須諮詢CMS的文檔。如果框架要使用漂亮的URL,它可能也會刪除任何GET變量,因爲它們不再是必需的。例如,CodeIgniter MVC框架(不是自己的CMS,但可能用於構建它們)執行此操作。

1

你可以做這樣的事情site.com/42並通過添加適當的重寫規則保留ID = 42的GET變量。使用mod_rewrite

基本上

RewriteEngine On 
RewriteRule ^(.*) /?id=$1 [L] 
3

他們做的方式:例如,假設你正在運行的Apache Web服務器,你可以用下面的修改您的.htaccess文件(位於webroot的目錄)你的網絡服務器「重寫」 URI請求別的東西,所以你必須傳入的請求像

http://your.site.com/Page/arg1/arg2/arg3 

但隨着你的重寫規則,你必須符合這一格式的阿帕奇反過來請求(開往/頁的所有請求)到:

http://your.site.com/Page?a=arg1&b=arg2&c=arg3 

你會後來終於在PHP中有$ _GET [ '一'],$ _GET [ 'B']和$ _GET [ 'C']都設置爲值。

退房this book

1

的一點是,它不是一個GET變量了,變量只是成爲URL的一部分。這些URL然後由應用程序自定義分析。大多數的MVC框架遵循/controller/action/params規則和向下突破的URL根據零件的位置:

  • 首先/controller部分確定要使用的控制器
  • /action部分決定調用
  • 任何一種方法以下參數僅作爲參數傳遞給接收函數,其含義取決於函數和順序
  • 一些還使用了名爲/page:2的參數,因此它們不必依賴於正確的順序

這些都可以定製。您還可以使用您的Web服務器(例如Apache)將這些類型的URL重寫爲良好的舊GET參數URL,然後再打到您的應用程序。