教你如何在CI框架中使用 .htaccess 隱藏url中index.php
秉承MVC架構(gòu)的思想,CI中的所有控制器都需要經(jīng)過(guò)單點(diǎn)入口文件index.php(默認(rèn))來(lái)加載調(diào)用。也就是說(shuō),在默認(rèn)情況下,所有CI開(kāi)發(fā)項(xiàng)目的URL都形如以下這種形式:
http://localhost/index.php/blog/logs/this_is_a_test_entry
很顯然,默認(rèn)情況下,index.php在URL地址段中的存在一定程度上影響了URL的簡(jiǎn)潔和SEO的進(jìn)行。我們可以通過(guò)下面本文介紹的方法來(lái)去掉這個(gè)討厭的Index.php。
你或許已經(jīng)注意到在CodeIgniter用戶手冊(cè)中,已經(jīng)存在關(guān)于此問(wèn)題的解決方法。但官方提供的這個(gè).htaccess配置,并不是所有時(shí)候都能解決問(wèn)題。本文現(xiàn)在給出一個(gè)更完善的解決方案。
注意:在繼續(xù)之前,請(qǐng)確認(rèn)你的主機(jī)支持.htaccess配置。其中,如果Apache作為Web服務(wù)器,需要開(kāi)啟mod_rewrite模塊的支持;如果將IIS作為Web服務(wù)器,則需要額外安裝ISAPI_Rewrite拓展。
具體方法如下:
1. 將以下配置信息復(fù)制并保存為.htaccess文件。
以下為.htaccess文件信息
RewriteEngineOn
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule^(.*)$ /index.php?/$1 [L]
#如果沒(méi)有安裝mod_rewrite模塊,所有的404頁(yè)面都將被 #發(fā)送到index.php,此時(shí),程序會(huì)像沒(méi)有設(shè)置隱藏時(shí)一樣運(yùn)行
ErrorDocument404 /index.php
2. 將以上.htaccess文件上傳到CI所在項(xiàng)目的根目錄(即與index.php同級(jí)目錄下)
3. 修改application/config.php中的如下參數(shù):
$config['index_page'] = "index.php";
至
$config['index_page'] = ""; //設(shè)置為空
以上三步,缺一不可。如果一切配置正常,你會(huì)發(fā)現(xiàn),再次運(yùn)行程序的時(shí)候,程序已經(jīng)自動(dòng)隱藏index.php這個(gè)URL段了!
Trackback(UTF-8):http://www.cnSaturn.com/trackback/40
CodeIgniter中開(kāi)啟PATH_INFO時(shí)mod_rewrite隱藏index.php的問(wèn)題。
在CodeIgniter中,當(dāng)我將URI尋址方式從AUTO更改為PATH_INFO時(shí),即:
$config['uri_protocol'] = 'PATH_INFO';
注:PATH_INFO的開(kāi)啟,是因?yàn)槲蚁Mㄟ^(guò)$_GET來(lái)取值,而不是系統(tǒng)默認(rèn)的POST方式。
在此情況下如何仍然使用以上.htaccess方案,結(jié)果將是:index.php順利隱藏,但主控制器并不能正確的獲取值。
解決方案如下,就一步:
去掉以下重寫(xiě)規(guī)則中index.php后面的問(wèn)號(hào)即可。
RewriteRule^(.*)$ /index.php?/$1[L]
修改后的規(guī)則如下:
RewriteRule^(.*)$ /index.php/$1 [L]
其他地方不變。
如何刪除index.php文件
估計(jì)很多人學(xué)習(xí)CodeIgniter第一步想做的就是如何去掉index.php,這個(gè)官方手冊(cè)就有相關(guān)教程,修改.htaccess 文件(前提是你的服務(wù)器是apache):
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
當(dāng)然了,有很多人按照要求修改了,但是卻出現(xiàn)了錯(cuò)誤,所有的訪問(wèn)都404了,而且,這個(gè)404是apache的404頁(yè)面,而不是CodeIgniter的404錯(cuò)誤頁(yè)面。
出現(xiàn)這種問(wèn)題,是對(duì)apache的rewrite規(guī)則不理解:
第一行、將RewriteEngine引擎設(shè)置為on,就是讓url重寫(xiě)生效;
第二行、配置url重寫(xiě)規(guī)則,!^(index\.php|images|robots\.txt) 這個(gè)正則表達(dá)式指明了哪些文件不需要重寫(xiě),而是直接訪問(wèn);
第三行、^(.*)$是一個(gè)正則表達(dá)式,意思是對(duì)所有請(qǐng)求都發(fā)送到/index.php/$1,熟悉url的人都知道,以反斜杠(/)開(kāi)頭的,都是相對(duì)路徑,相對(duì)于誰(shuí)呢?根,也就是網(wǎng)址。
所以呢,如果CodeIgniter如果不是安裝在網(wǎng)站的根目錄,必然會(huì)出現(xiàn)錯(cuò)誤。如何解決呢,在CodeIgniter手冊(cè)中也給出了相應(yīng)的解決方案:
把上面最后一句改為:
RewriteRule ^(.*)$ index.php/$1 [L]
只需要去掉index.php前面的斜杠就行。
如何添加url后綴
通過(guò)上面的步驟,我們已經(jīng)隱藏了index.php了,現(xiàn)在我們制作的網(wǎng)站更加的rest了,一般人已經(jīng)無(wú)法一眼就看出你的網(wǎng)站是用CodeIgniter開(kāi)發(fā)的,還是ROR開(kāi)發(fā)的。
但是,如何在url后面增加后綴呢,這樣,我們甚至可以隱藏或者偽造網(wǎng)站的開(kāi)發(fā)語(yǔ)言,通過(guò)修改 config/config.php 文件,你可以為 CodeIgniter 生成的 URL 添加一個(gè)指定的文件后綴,比如你可以添加.html,甚至你可以添加.asp,.jsp。
這樣我們就可以將 http://www.fzitv.net/index.php/news/view/about 變成 http://www.fzitv.net/index.php/news/view/about.html。
如何使用查詢字符串
一般情況下我們不需要使用查詢字符串,但是,總有一些特殊情況,是我們用CodeIgniter的rest模式無(wú)法完成的,這樣我們就需要在 URL 中使用查詢字符串:
index.php?c=products&m=view&id=345
CodeIgniter 默認(rèn)此功能是關(guān)閉的,如果想開(kāi)啟的話,打開(kāi)配置文件 application/config/config.php 您可以看到如下內(nèi)容:
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c'; //控制器名
$config['function_trigger'] = 'm'; //方法名
$config['directory_trigger']='d'; //控制器所在子目錄名稱
如果你將 enable_query_strings 更改為 TRUE ,那么這個(gè)功能就被激活了。此時(shí),你就可以通過(guò)關(guān)鍵字來(lái)調(diào)用需要的控制器和方法了:
index.php?c=controller&m=method
當(dāng)我們?cè)谑褂肅odeIgniter制作分頁(yè)的時(shí)候,這個(gè)就可以派上用場(chǎng)了。
- 使用.htaccess設(shè)置圖片防盜鏈的詳細(xì)方法
- Apache使用 .htaccess 來(lái)實(shí)現(xiàn)強(qiáng)制https訪問(wèn)的方法
- 讓Apache 2支持.htaccess并實(shí)現(xiàn)目錄加密的方法
- APACHE支持.htaccess偽靜重寫(xiě)出錯(cuò) No input file specified的解決方案
- Apache使用.htaccess 屏蔽惡意 User Agent(防蜘蛛)
- PHP中的.htaccess偽靜態(tài)文件
- 禁止網(wǎng)站顯示文件目錄列表的2個(gè)方法(htaccess)
- .htaccess rewrite 規(guī)則詳細(xì)說(shuō)明
- Apache服務(wù)器中.htaccess文件的實(shí)用配置示例集錦
- 使Nginx服務(wù)器支持.htaccess的方法
- Apache服務(wù)器中.htaccess的基本配置總結(jié)
- Apache服務(wù)器中使用.htaccess實(shí)現(xiàn)偽靜態(tài)URL的方法
- Ubuntu下開(kāi)啟Apache對(duì).htaccess 的支持
- Apache2.4.x版wampserver本地php服務(wù)器如何讓外網(wǎng)訪問(wèn)及啟用.htaccess
- nginx支持.htaccess文件實(shí)現(xiàn)偽靜態(tài)的方法分享
- apache使用.htaccess文件實(shí)現(xiàn)屏蔽wget下載網(wǎng)站內(nèi)容
- 21個(gè)常用的apache .htaccess文件配置技巧分享
- 利用.Htaccess阻止IP惡意攻擊網(wǎng)站,禁止指定域名訪問(wèn),禁止機(jī)器爬蟲(chóng),禁止盜鏈
相關(guān)文章
PHP進(jìn)行批量任務(wù)處理不超時(shí)的解決方法
這篇文章主要介紹了PHP進(jìn)行批量任務(wù)處理不超時(shí)的解決方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了php結(jié)合ajax進(jìn)行異步處理實(shí)現(xiàn)批量任務(wù)不超時(shí)的相關(guān)技巧,需要的朋友可以參考下2016-07-07
libmysql.dll與php.ini是否真的要拷貝到c:\windows目錄下呢
很多安裝PHP的教程,都是教大家把php里的libmysql.dll拷貝到c:\windows目錄下(有的教程會(huì)說(shuō)還要把php.ini等文件拷到系統(tǒng)目錄的,其實(shí)一個(gè)文件都不用拷貝去的。)。2010-03-03
PHP調(diào)用Twitter的RSS的實(shí)現(xiàn)代碼
“守望軒”博客右側(cè)邊欄原來(lái)有個(gè)“雜感”的欄目,用來(lái)記錄短的、不能大篇幅成文的短句,或者自己比較喜歡的短句和言論。2010-03-03
thinkphp5實(shí)用入門進(jìn)階知識(shí)點(diǎn)和各種常用功能代碼匯總
這篇文章主要介紹了thinkphp5實(shí)用入門進(jìn)階知識(shí)點(diǎn)和各種常用功能代碼匯總的相關(guān)資料,需要的朋友可以參考下2023-03-03
PHP實(shí)現(xiàn)抓取HTTPS內(nèi)容
這篇文章主要介紹了PHP實(shí)現(xiàn)抓取HTTPS內(nèi)容,以及遇到的問(wèn)題的解決方法,需要的朋友可以參考下2014-12-12
PHP實(shí)現(xiàn)讀取Excel文件的記錄(一)
這篇文章主要介紹了如何利用PHP讀取Excel文件的記錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的可以跟隨小編了解一下2022-03-03

