2016年3月29日 星期二

[codeigniter] win7、ubuntu 去除index.php

win7 : 

有三大步驟:

1.

打開 : C:\AppServ\Apache2.2\conf\httpd.conf
(如果是安裝xampp的路徑為 : C:\xampp\apache\conf\httpd.conf)
(xampp似乎不用設定 , 只需要.htaccess就可以了 , 不太確定 , 至少我遇到這樣的情況)

修改1 :
#LoadModule rewrite_module modules/mod_rewrite.so
把 # 去掉變成:
LoadModule rewrite_module modules/mod_rewrite.so

修改2 :
 AllowOverride None
把None 改成 All
 AllowOverride All
共有三處

2.

打開 : C:\AppServ\www\ci\application\config\config.php

修改 :
$config['index_page'] = 'index.php';
把 index.php刪掉變成:
$config['index_page'] = '';

3.

我的 ci 檔案是放在 C:\AppServ\www\ci 下,在這裡面新增.htaccess檔案 (也就是與application資料夾、 system資料夾、user_guide資料夾、index.php同一層)

.htaccess檔案內容:
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt|$)
RewriteRule ^(.*)$ /ci/index.php/$1 [L,QSA]             <=注意我是放在ci資料夾下,所以這部份要記得改,如果是直接放在根目錄index.php/$1 這樣就行了

重新啟動Apache,我是建議直接重開機比較乾脆,比較可以避免有的沒的問題@@





Ubuntu : 

假設.htaccess己經放置在www/ci下了,CI的config.php也己經將index.php刪除(也就是己完成上面win 7步驟2及3),接下來就只剩開啟rewrite了(其實也就是在ubuntu作win 7的步驟1)

1. 在/etc/apache2下,輸入 : sudo a2enmod
2. 會問你要啟動哪項模組服務,輸入 : rewrite
顯示 : To activate the new configuration, you need to run :
             service apache2 restart   
    (rewrite已經啟動 , 重新啟動你的apache2  , 也可設定完以下再重新啟動)
3. 設置.htaccess (放到www根目錄下) (己放入的話省略這步驟)
4. 確定apache可以讀取.htaccess
5. 修改httpd.conf 將 AllowOverride None 改成 AllowOverride FileInfo 或 AllowOverride All
(註:要到/etc/apache2/sites-available/default 裡找到此段來修改,共有3處 , ubuntu server有4處)
6.重啟apache,輸入 : sudo service apache2 restart





--------------------------------------------------------
後記 : 這樣會造成圖片顯示及css、 javascript沒辦法引入

所以還需要做以下的步驟 : 

假設我的架構為以下

www/ci
         └>/application
         └>/system
         └>/user_guide
         └>/.htaccess
         └>/index.php
         └>/assets                  (自行新增的資料夾,存放圖、css、javascript)
                  └>/css
                  └>/javascript
                  └>/images

則要修改.htaccess,將assets資料夾加入進來

將原本的 : RewriteCond $1 !^(index\.php|images|robots\.txt|$)
     ↓
修改成 : RewriteCond $1 !^(index\.php|images|assets|robots\.txt|$)

 assets裡的東西就能正常使用了~

EX:

假如要引入jQuery (路徑 : assets/javascript/javascript/jquery-1.8.3.min.js )

程式碼 :

<?$this->load->helper('url');?>
<script type="text/javascript" src="<?=base_url()?>assets/javascript/jquery-1.8.3.min.js"></script>