CI架構 .htaccess 隱藏url在index.php解決方案

來源:互聯網
上載者:User

標籤:

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解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.