教你如何在CI架構中使用 .htaccess 隱藏url中index.php_PHP

來源:互聯網
上載者:User
關鍵字 CI架構
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作為Web伺服器,需要開啟mod_rewrite模組的支援;如果將IIS作為Web伺服器,則需要額外安裝ISAPI_Rewrite拓展。

具體方法如下:

1. 將以下配置資訊複製並儲存為.htaccess檔案。
以下為.htaccess檔案資訊

複製代碼 代碼如下:
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中的如下參數:

複製代碼 代碼如下:
$config['index_page'] = "index.php";

複製代碼 代碼如下:
$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]

其他地方不變。

如何刪除index.php檔案

估計很多人學習CodeIgniter第一步想做的就是如何去掉index.php,這個官方手冊就有相關教程,修改.htaccess 檔案(前提是你的伺服器是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) 這個Regex指明了哪些檔案不需要重寫,而是直接存取;
第三行、^(.*)$是一個Regex,意思是對所有請求都發送到/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.bitsCN.com/index.php/news/view/about 變成 http://www.bitsCN.com/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 ,那麼這個功能就被啟用了。此時,你就可以通過關鍵字來調用需要的控制器和方法了:

複製代碼 代碼如下:
index.php?c=controller&m=method

當我們在使用CodeIgniter製作分頁的時候,這個就可以派上用場了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.