2014-01-24 63 views
2

當我第一次開始了我的網站,網址是按以下格式:CodeIgniter的查詢字符串重寫在.htaccess

project.php?projectID=1&pageID=2 

幾年前我修改的.htaccess重寫這些使用段,像這樣:

project/1/2 

我更新了所有內部鏈接以使用分段格式,但這很好,因爲它仍支持舊格式的任何外部傳入鏈接。

現在我切換到CodeIgniter,使用分段格式渲染我的頁面很容易,但我正在努力解決如何支持舊的查詢字符串URL。

我試圖在CodeIgniter中原生支持查詢字符串似乎破壞了分段的URL,所以它看起來像我不能同時支持。在CodeIgniter中設置一個路徑將查詢字符串重定向到控制器似乎不起作用。例如:

$route['project.php?projectID=(:any)&pageID=(:any)'] = 'home/projectview/$1/$2'; 

我的第二個想法是直接修改的.htaccess到查詢字符串重定向到控制器,就像這樣:

(請注意,我還使用的.htaccess重寫,消除外觀index.php中的CI URL)

RewriteRule ^project.php?projectID=(\d*)&pageID=(\d*) project/$1/$2/ [L] 
RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 

但是,這個重寫規則似乎也不起作用。它重定向到我的CodeIgniter 404而不被重寫,甚至通過刪除默認的index.php規則它不重定向,所以我假設我的正則表達式/ .htaccess格式中有一些東西是不正確的。

回答

3

您需要匹配請求而不是URI。該URI將不會有任何查詢字符串:

RewriteCond %{THE_REQUEST} \ /+project\.php\?projectID=([0-9]+)(?:&pageID=([0-9]+)|) 
RewriteRule^/project/%1/%2? [L,R=301] 

RewriteCond $1 !^(index\.php) 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

這很好,謝謝,但我可以要求一個修訂?我也適應'&pageID ='缺席(默認爲第1頁)。如何使這部分正則表達式可選? – monkeymatrix

+1

@monkeymatrix查看編輯 –

+0

令人驚歎的,謝謝你的接受! :) – monkeymatrix