2017-08-25 18 views
0

我在codeigniter url重寫時遇到了一些問題。如何用日期重寫Codeigniter中的url

問題是,standart htaccess重寫在這裏不起作用。

我想這htaccess的重寫本:

http://www.example.com/home/results?date=2017-10-02 

http://www.example.com/home/results/2017-10-02 

感謝您的幫助!

這不工作:

RewriteRule ^results/([^/]+)$ results?date=$1 [L] 
+0

其中一個答案對您有幫助嗎?如果是這樣,請接受以下答案之一:[答案被「接受」時意味着什麼?](https://stackoverflow.com/help/accepted-answer) –

回答

0

它的簡單,你必須創建在route.php文件路徑沒有必要做重寫規則。

$route['home/results/(:any)'] = 'home/results'; 

這裏是URL路由

https://www.codeigniter.com/user_guide/general/routing.html

你需要在.htaccess文件中加入以下規則

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 

入住這裏CI官方文檔如何CI URL工作

https://www.codeigniter.com/user_guide/general/urls.html

在CI的URL是件陣列段,您可以通過給段數從0開始的域名後,取得與URI類細分,在這裏你想和你約會段是2

$this->uri->segment(2); 

以下鏈接以CI URI類,你可以找到更多有用的方法也

https://www.codeigniter.com/user_guide/libraries/uri.html

+0

如何處理日期?因爲$ _GET [「date」]不起作用 –

+1

如果按照建議的答案傳遞,可以使用'$ this-> uri-> segment(3)'。 – Tpojka

+0

@V。索利斯請檢查我已經更新了我的答案。 – umefarooq

0

您可以通過以下RewriteRule

RewriteEngine on 

RewriteCond %{QUERY_STRING} ^date=([0-9]{4}(\-[0-9]{2}){2})$ [NC] 
RewriteRule ^home/results$ /home/results/%1? [L] 
做到這一點

%1是從RewriteCond的正則表達式中拉出第一組。使用尾部?以便查詢字符串也不會附加在重寫中。

在Apache中,RewriteRule指令的第一個參數不包含查詢字符串,因此必須使用RewriteCond來檢查%{QUERY_STRING}

此外,如果你希望它不那麼具體,那麼你可以編輯用於匹配查詢字符串的正則表達式,它當前是非常具體的在該日期必須是查詢字符串中唯一的參數,並且它必須是「 (4個數字) - (2個數字) - (2個數字)「。你可以看到正則表達式here的細分。