2011-03-28 90 views
2

比方說,我有項目文件夾,如下所示:URL重寫重定向到一個文件

folder/models 
folder/view 
folder/controls 
folder/public 
folder/library 

現在,讓我們說,站點文件夾是folder/public/,並在該文件夾裏邊有隻是一個文件名爲index.php。該文件通過GET參數index.php?page=user處理所有的站點頁面請求,例如將在另一個文件夾中調用該應用程序的user.php文件。問題的關鍵是,我想,一個URL,例如:

www.site.com/index.php?page=user & ID = 1

成爲

www.site.com/user/id/1 

我該怎麼做?

+1

是這個Windows或Linux? – Neal 2011-03-28 14:10:32

+0

@Neal,我在Mac OS X上使用Xampp ...我猜在Apache上。 – Shoe 2011-03-28 14:11:36

回答

2

這是從CakePHP拍攝。htacess重寫規則:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

,它將使你的主機下的一切 http://www.site.com/ * - >http://www.site.com/index.php?url= *

從這裏你的index.php可以解析$ _GET [ '網址']

//e.g browser requests www.site.com/user/id/1 

$url = $_GET['url']; // user/id/1 
$params = explode("/",$url); // array(0=>"user",1=>"id",2=>"1") 
+0

你可能想看看php的$ _SERVER ['PATH_INFO']變量! – Eduard7 2011-03-28 15:16:39

+1

'?url = $ 1'沒有必要。您可以通過'$ _SERVER ['REQUEST_URI']'訪問相同的信息 – vbence 2011-03-28 21:09:18

0

你的情況有使用/id/,但在這裏沒有一點你去:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/id/(.*) index.php?page=$1&id=$2 

或者有什麼辦法更好的辦法:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php 

然後在您的index.php文件中通過檢查$_SERVER['REQUEST_URI']來處理您夢寐以求的模式中的請求。

0

您是否使用Apache作爲網絡服務器?

如果是,您可以使用* mod_rewrite *來完成該操作。

我沒有這樣做我自己,所以我不能給你詳細的說明,但與谷歌搜索使用像"mod_rewrite examples"土地搜索字符串你很多看似不錯的教程。

0

沒有Apache重寫規則,名爲Slim的微框架可以爲您的php項目製作路由和模板。你只能在index.php文件中定義你的路由。喜歡 ;

 
Slim::get('/', function() { 
    Slim::render('index.template'); 
});