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

CodeIgniter(下面簡稱"CI")是一款國外優秀的PHP輕量級MVC框架,它支持PHP4和PHP5。是開發中小型可拓展性需求高的Web應用程序的利器。眼下你所見到的這個博客程序,正是採用CI進行的編寫。php

秉承MVC架構的思想,CI中的所有控制器都需要通過單點入口文件index.php(默認)來載入調用。html

也就是說。在默認狀況下,所有CI開發項目的URL都形例如如下面這樣的形式:apache

http://localhost/index.php/blog/logs/this_is_a_test_entry架構

很是顯然。默認狀況下。index.php在URL地址段中的存在必定程度上影響了URL的簡潔和SEO的進行。app

咱們可以經過如下本文介紹的方法來去掉這個討厭的Index.php。框架

你也許已經注意到在CodeIgniter用戶手冊中,已經存在關於此問題的解決方法。jsp

但官方提供的這個.htaccess配置,並不是所有時候都能解決這個問題。本文現在給出一個更無缺的解決方式。ide

注意:在繼續以前,請確認你的主機支持.htaccess配置。當中。假設Apache做爲Webserver,需要開啓mod_rewrite模塊的支持;假設將IIS做爲Webserver,則需要額外安裝ISAPI_Rewrite拓展。codeigniter

詳細方法例如如下:學習

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當進行分頁,這能夠派上用場。

相關文章
相關標籤/搜索