去掉php框架CI預設url中的index.php

weixin_34344677發表於2012-11-21

去掉php框架CI預設url中的index.php   

2010-03-17 17:33:07|  分類: php框架ci |字號 訂閱

 

CI預設的rewrite url中是類似這樣的,例如你的CI根目錄是在/CodeIgniter/下,你的下面的二級url就類似這樣http://localhost/CodeIgniter/index.php/welcome。不太好看,怎麼把其中的index.php取掉呢?

解決方法如下:

去掉 URL 中的 index.php

 

首先,你要清楚自己的 Web 伺服器是 Apache,支援 mod_rewrite,並且已經配置好 rewrite 相關的引數。

說明:

Apache Url Rewrite 配置(php偽靜態)

檢查 conf/httpd.conf 中是否存在如下一段程式碼:

#LoadModule rewrite_module modules/mod_rewrite.so

把 LoadModule前邊的#去掉,然後在網站根目錄新增.htaccess(內寫偽靜態正則程式碼,這個檔案可以在conf/httpd.conf 中的AccessFileName .htaccess指定),也可以直接在conf/httpd.conf中新增偽靜態正則程式碼。然後重啟apache(apache -k restart)就可以使用偽靜態地址啦。如果沒有安裝 mod_rewrite,可以重新編譯 Apache(或若為win系統建議重新安裝),並在原有 configure 的內容中加入 –enable-rewrite=shared,然後再在 Apache 配置檔案中加入正則程式碼。

1、mod_rewrite 簡介和配置

Rewirte主要的功能就是實現URL的跳轉和隱藏真實地址,基於Perl語言的正規表示式規範。平時幫助我們實現擬靜態,擬目錄,域名跳轉,防止盜鏈等

2、mod_rewrite 規則的使用

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.iphpmysql.cn [NC]

RewriteRule ^/(.*) http:// www.iphpmysql.cn / [L]

——–

RewriteEngine on

RewriteRule ^/test([0-9]*).html$ /test.php?id=$1

RewriteRule ^/new([0-9]*)/$ /new.php?id=$1 [R]

3、mod_rewrite 規則修正符

1) R 強制外部重定向

2) F 禁用URL,返回403HTTP狀態碼。

3) G 強制URL為GONE,返回410HTTP狀態碼。

4) P 強制使用代理轉發。

5) L 表明當前規則是最後一條規則,停止分析以後規則的重寫。

6) N 重新從第一條規則開始執行重寫過程。

7) C 與下一條規則關聯8) T=MIME-type(force MIME type) 強制MIME型別

9) NS  只用於不是內部子請求

10) NC 不區分大小寫

11) QSA 追加請求字串

12) NE 不在輸出轉義特殊字元   \%3d$1  等價於 =$1


然後,在 CI 根目錄下新建立一個配置檔案,命名為: .htaccess

在裡面這樣寫:

TEXT

RewriteEngine on   

RewriteCond $1 !^(index\.php|images|robots\.txt)   

RewriteRule ^(.*)$ /index.php/$1 [L]

複製程式碼

就 可以去掉 index.php 了。要注意 /index.php/$1 要根據你目錄(Web 目錄,比如 http://www.domain.com/index.php)的實際情況來定,比如網站根目錄是 /ci/index.php 則要寫成 /ci/index.php/$1

TEXT

RewriteCond $1 !^(index\.php|images|robots\.txt)

複製程式碼

上 面的程式碼意思是排除某些目錄或檔案,使得這些目錄不會 rewrite 到 index.php 上,這一般用在圖片、js、css 等外部資源上。也就是說非 PHP 程式碼都要排除出去。(這裡我排除了 images 目錄和 robots.txt 檔案,當然 index.php 也應該被排除)

哦,對了,還要修改 config.php 這個檔案中的下列內容:

PHP

/*

|--------------------------------------------------------------------------

| Index File

|--------------------------------------------------------------------------

|

| Typically this will be your index.php file, unless you've renamed it to

| something else. If you are using mod_rewrite to remove the page set this

| variable so that it is blank.

|

*/

$config['index_page'] = "index.php";

複製程式碼

把其中的 "index.php" 改成 "" 就可以了。

[3]如果經過以上設定還是不成功的話就是Apache配置問題啦。

httpd.conf檔案中:

AllowOverride None

改為

AllowOverride All

相關文章