2012-11-04 79 views
0

我怎樣才能達到這與mod_rewrite?Url mod_rewrite靜態鏈接頁

from: 
.com/index.php?menu=home 
to: 
.com/home 

from: 
.com/index.php?menu=home&list=hello 
to: 
.com/home/hello 

ALSO(不帶文件夾hierarki)

from: 
.com/index.php?menu=home&list=hello 
to: 
.com/hello 

我用這對第一個:

RewriteRule ^([^/\.]+)/?$ index.php?menu=$1 [L] 

但如何我連接他們,如果有多個變量?

試過這樣:

RewriteRule ^([^/]*)/([^/]*)?$ index.php?home=$1&list=$2 
+0

「多變量」是什麼意思?如果你正在討論GET變量,你需要設置'[L,QSA]'這將會把所有的GET參數傳遞給你的腳本。例如,如果用戶轉到'.com/home/hello?testing = variable',它會將它傳遞給頁面。這是你要求的嗎? – tftd

+0

更新了我的問題。最後一行。 – user1121487

回答

1

您誤會了應該如何完成URL重寫。當你使用MVC模式時,你的URL會告訴框架/引導程序執行哪個控制器和方法。 因此,您的網址應類似於:http://host.com/CONTROLLER/ACTION/what/ever。這就是爲什麼您不能將.com/index.php?menu=home&list=hello重寫爲.com/hello。當http://host.com/hellocontrolleraction(控制器類的方法)時,將無法區分。

下面的代碼將改寫:

  1. .com/whatever作爲.com/index.php?menu=whatever
  2. .com/whatever/youwant作爲.com/index.php?menu=whatever&list=youwant
  3. .com/whatever/youwant/with/additional/parameters作爲.com/index.php?menu=whatever&list=youwant&additional=$5

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)([/])?([^/]*)?([/])?(.*)$ index.php?menu=$1&list=$3&additional=$5 [L,QSA] 
+0

謝謝你,這完美的作品。 – user1121487

0

一大堆頭疼的,爲什麼不創建規則和路線傳遞給您的腳本,然後使用爆炸()來劃分和界定:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] 
在你的PHP

然後

<?php 
$route = explode('/',$_GET['route']); 

$menu = (!empty($route[0])?:null); 
$list = (!empty($route[1])?:null); 
?> 

BTW你的第3例子是不可能的。

+0

這會干擾MVC結構的網站是建立在恐懼... – user1121487