2012-05-26 70 views
0

我試圖找到一個問題的答案,我腦海中曾有過這樣的問題,但似乎找不到它。重寫php url的規則

怎樣才能使一些PHP網址與「?」和 「=」 到/

實施例一(1):

example.com/user.php?profile=example 

到:

example.com/user/profile/example 

實施例2(2):

example.com/forum.php?thread=example-in-an-example 

到:

example.com/forum/thread/example-in-an-example 

一樣,是以第二「/」(斜槓)爲「?」的碼第三個和其餘作爲一個「=」,所以我可以自由使用它,而不是爲每個頁面製作一個新的...

LIKE:/ forum(或任何其他人)就像頁面本身 AND: /線程(或任何其他)是像$ _GET AND:/示例功能於一個-示例(或任何其他)是像值到$ _GET

EXTRA: 這裏是從的Jeroen一個代碼:

RewriteRule ^(.*)/(.*)/(.*)/$ $1.php?$2=$3 [L] 

問題一(1):會喜歡時: 「example.com/forum」 或 「example.com/user」 其給予404錯誤 問題兩(2):當使用像「example.com/forum/thread/test-thread/reply/2」鏈接它給404錯誤,(supose到循環用「&」和「=」,使得第一真實後一個所以其能夠使用一個以上的$ _GET)

+0

您使用的是控制器嗎?你能修改你的PHP代碼嗎?你是從頭開始寫東西嗎?用戶瀏覽器地址欄中顯示的URL是什麼?乾淨的網址或查詢字符串的網址? – dAm2K

回答

4

添加到您的.htaccess文件:

RewriteEngine On 
RewriteRule ^user/profile/(.*)/$ user.php?profile=$1 [L] 
RewriteRule ^forum/thread/(.*)/$ /forum.php?thread=$1 [L] 

或者更寬泛的版本...

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

確保Apache的mod rewrite已啓用!

1

如果你有完全訪問應用程序,你可以修改代碼,我可以提交你一些技巧,我通常用我的REST工具。

AllowOverride全部裏面你的apache配置來啓用.htaccess文件。 確保有的LoadModule的mod_rewrite模塊了。

創建一個.htaccess文件到您的Web服務器的根目錄(應用程序路徑),並把這個裏面的東西:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

創建一個名爲索引文件。PHP和放這裏面,這將是你的控制器:

<? 
     // echo "REQUEST_URI: " . $_SERVER['REQUEST_URI'] . "</br>\n"; 
     $controller = explode("/", $_SERVER['REQUEST_URI']); 
     //print_r($controller); 

     $resource = $controller[1]; 
     $operation = $controller[2]; 
     $operation_value = $controller[3]; 

     echo "Requested resource: $resource, opetation: $operation, value: $operation_value<br>\n"; 

     switch($resource) { 
     case 'user': 
       echo "User requested\n"; 
       //require_once("user.php"); 
       break; 
     case 'forum': 
       echo "Forum requested\n"; 
       //require_once("forum.php"); 
       break; 
     /* add any other resource */ 
     default: 
       echo "Requested page was not found.\n"; 
       break; 
     } 
?> 

當用戶呼叫http://example.com/user/profile/ZeroXitreo頁面將呈現爲:

Requested resource: user, opetation: profile, value: ZeroXitreo 
User requested 

當用戶呼叫http://example.com/forum/thread/example-in-an-example的頁面將是:

Requested resource: forum, opetation: thread, value: example-in-an-example 
Forum requested 

閱讀控制器的PHP代碼,我認爲這是相當自我解釋。