標籤:
CodeIgniter(下面簡稱"CI")是一款國外優秀的PHP輕量級MVC架構,它支援PHP4和PHP5。是開發中小型可拓展性需求高的Web應用程式的利器。眼下你所見到的這個部落格程式,正是採用CI進行的編寫。
秉承MVC架構的思想,CI中的全部控制器都須要經過單點入口檔案index.php(預設)來載入調用。
也就是說。在預設情況下,全部CI開發項目的URL都形例如以下面這樣的形式:
http://localhost/index.php/blog/logs/this_is_a_test_entry
非常顯然。預設情況下。index.php在URL位址區段中的存在一定程度上影響了URL的簡潔和SEO的進行。
我們能夠通過以下本文介紹的方法來去掉這個討厭的Index.php。
你也許已經注意到在CodeIgniter使用者手冊中,已經存在關於此問題的解決方案。
但官方提供的這個.htaccess配置,並非全部時候都能解決這個問題。本文如今給出一個更完好的解決方式。
注意:在繼續之前,請確認你的主機支援.htaccess配置。當中。假設Apache作為Webserver,須要開啟mod_rewrite模組的支援;假設將IIS作為Webserver,則須要額外安裝ISAPI_Rewrite拓展。
詳細方法例如以下:
1. 將下面配置資訊複製並儲存為.htaccess檔案。
下面為.htaccess檔案資訊 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
RewriteEngineOn RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule^(.*)$ /index.php?/$1 [L] #假設沒有安裝mod_rewrite模組,全部的404頁面都將被 #發送到index.php。此時,程式會像沒有設定隱藏時一樣執行 ErrorDocument404 /index.php |
2. 將以上.htaccess檔案上傳到CI所在項目的根資料夾(即與index.php同級檔案夾下)
3. 改動application/config.php中的例如以下參數:
1 |
$config[‘index_page‘] = "index.php"; |
至
1 |
$config[‘index_page‘] = ""; //設定為空白 |
以上三步。缺一不可。假設一切配置正常。你會發現,再次執行程式的時候。程式已經自己主動隱藏index.php這個URL段了!
Trackback(UTF-8):http://www.cnSaturn.com/trackback/40
CodeIgniter中開啟PATH_INFO時mod_rewrite隱藏index.php的問題。
在CodeIgniter中,當我將URI定址方式從AUTO更改為PATH_INFO時。即:
$config[‘uri_protocol‘] = ‘PATH_INFO‘;
註:PATH_INFO的開啟。是由於我希望通過$_GET來取值,而不是系統預設的POST方式。
在此情況下怎樣仍然使用以上.htaccess方案,結果將是:index.php順利隱藏,但主控制器並不能正確的擷取值。
解決方式例如以下,就一步:
去掉下面重寫規則中index.php後面的問號就可以。
RewriteRule^(.*)$ /index.php?
/$1[L]
改動後的規則例如以下:
RewriteRule^(.*)$ /index.php/$1 [L]
其它地方不變。
=============================================================================================================
【其它】跟我學網站開發架構CodeIgniter之url篇
怎樣刪除index.php檔案
預計非常多人學習CodeIgniter第一步想做的就是怎樣去掉index.php,這個官方手冊就有相關教程,改動.htaccess 檔案(前提是你的server是apache):
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
當然了。有非常多人依照要求改動了,可是卻出現了錯誤,全部的訪問都404了,並且。這個404是apache的404頁面。而不是CodeIgniter的404錯誤頁面。
出現這樣的問題,是對apache的rewrite規則不理解:
- 第一行、將RewriteEngine引擎設定為on,就是讓url重寫生效。
- 第二行、配置url重寫規則。!^(index\.php|images|robots\.txt) 這個正則表達式指明了哪些檔案不須要重寫,而是直接訪問;
- 第三行、^(.*)$是一個正則表達式,意思是對全部請求都發送到/index.php/$1。熟悉url的人都知道,以反斜線(/)開頭的,都是相對路徑,相對於誰呢?根,也就是網址。
所以呢,假設CodeIgniter假設不是安裝在網站的根資料夾,必定會出現錯誤。怎樣解決呢,在CodeIgniter手冊中也給出了對應的解決方式:
把上面最後一句改為:RewriteRule ^(.*)$ index.php/$1 [L]
僅僅須要去掉index.php前面的斜杠即可。
怎樣加入url尾碼
通過上面的步驟。我們已經隱藏了index.php了,如今我們製作的網站更加的rest了。一般人已經無法一眼就看出你的網站是用CodeIgniter開發的,還是ROR開發的。
可是,怎樣在url後面添加尾碼呢,這樣,我們甚至能夠隱藏或者偽造網站的開發語言,通過改動 config/config.php 檔案,你能夠為 CodeIgniter 產生的 URL 加入一個指定的檔案尾碼,比方你能夠加入.html,甚至你能夠加入.asp,.jsp。
這樣我們就能夠將 http://www.hualai.net.cn/index.php/news/view/about 變成 http://www.hualai.net.cn/index.php/news/view/about.html。
怎樣使用查詢字串
普通情況下我們不須要使用查詢字串,可是,總有一些特殊情況,是我們用CodeIgniter的rest模式無法完畢的,這樣我們就須要在 URL 中使用查詢字串:
index.php?c=products&m=view&id=345
CodeIgniter 預設此功能是關閉的,假設想開啟的話。開啟設定檔 application/config/config.php 您能夠看到例如以下內容:
$config[‘enable_query_strings‘] = FALSE;
$config[‘controller_trigger‘] = ‘c‘; //控制器名
$config[‘function_trigger‘] = ‘m‘; //方法名
$config[‘directory_trigger‘]=‘d‘; //控制器所在子檔案夾名稱
假設你將 enable_query_strings 更改為 TRUE 。那麼這個功能就被啟用了。此時,你就能夠通過keyword來調用須要的控制器和方法了:
index.php?c=controller&m=method
當我們在使用CodeIgniter當進行分頁,這可以派上用場。
著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。
CI架構 .htaccess 隱藏url在index.php解決方案