2013-03-24 64 views
0

我已經看到了一些網站的不同頁面通過未通過通過GET方法傳遞一個頁面ID訪問..沒有'?'的頁面ID在URL

因此,像這樣: http://www.website.com/sitefolder/pageid/ 如果經常在其他網站上看到我: http://www.website.com/index.php?id=12

我知道例1的不同頁存儲在一個數據庫,而不是在不同的文件夾,因爲這將意味着..

一般來說,如果你有一個斜槓,這將意味着你會通過不同的文件夾..

有人可以解釋我如何創建正斜槓頁面id指示器,而不需要爲不同的頁面製作數百個不同的文件夾嗎?

因此,只需在'sitefolder'中使用頁面標識或頁面名稱或URL別名修改其內容,而不使用'?id = 12'方法即可通過URL傳遞一個php頁面。

+2

搜索「URL重寫」一個nd [「mod_rewrite」](http://httpd.apache.org/docs/current/mod/mod_rewrite。html) – 2013-03-24 12:50:59

+0

你正在尋找'重寫規則',如果你正在使用Apache你想mod_rewrite – hank 2013-03-24 12:51:06

+0

這裏有很多很多的問題與常見的例子。 http://stackoverflow.com/questions/tagged/mod-rewrite http://stackoverflow.com/questions/tagged/.htaccess其他的例子和教程可能被稱爲像「漂亮的URL」或「乾淨的網址」 – 2013-03-24 12:52:03

回答

1

你可以做到這一點使用.htaccess規則與mod_rewrite啓用,像這樣:

RewriteEngine On 
RewriteRule ^/([^/]+)$ index.php?id=$1 

這將改寫example.com/12example.com/index.php?id=12

編輯:正則表達式,細分:行

  • ^比賽開始
  • /匹配斜線
  • ([^/]+)匹配和保存不受斜線 第一組字符
  • $比賽結束

而對於RewriteRule正則表達式,「行」意味着在example.com之後的任何內容。

+0

謝謝! 我一定會看看。 可否請你多解釋一下^ /([^ /] +)$部分? – 2013-04-06 15:55:18

0

是的,你是正確的,通常是「/」表示將下一個文件夾..但有時你也可以自定義URL結構,按您的需求....

您需要啓用這個網址rewritting。 這可以使用.htaccess文件規則像

RewriteEngine On 
RewriteRule ^([^/.]+)(/([^/.]+))?(/([^/.]+))?$ index.php?page=$1 [L,QSA] 

來完成,也可以有自己的定製MVC和在這種情況下,你可以修改URL以「/」 如

 $request_url = $_SERVER['REQUEST_URI'];   
     $url   = str_replace(LOCAL_PATH,"",$request_url);   
     $parameters = explode("/",$url); 

     if($_SERVER['HTTP_HOST']!='localhost') 
     { 
     $total = count($parameters)-1; 
     unset($parameters[0]);   
     unset($parameters[1]); 
     unset($parameters[2]); 
     }  
     $slipt = array_chunk($parameters, 2); 
     $response = array(); 
     foreach($slipt as $val) 
     { 
      if(isset($val[1])) 
      $response[$val[0]] = $val[1]; 
     }   
     return $response; 

處理參數這意味着,讓我們有URL "http://domaintest/controller/method/page/1";

那麼這裏vaue頁面的參數將是1