多目錄的意思是指在同一個網站中有多套程序,最簡單的例子就是網站的前臺展示與後臺管理。二者由於在網站功能中分屬不同部分,通常會有不同的界面,用到images/stylesheet/javavascript基本是分開的,所以設置不同目如以下:
網站前臺URL:http://www.myci.com 網站後臺管理URL::http://www.myci.com/admin
CI 2.0源碼下載解壓後文件結構如下圖,默認是隻有一個目錄的
2、設置入口文件。因爲根目錄下的index.php默認是去找applcation下的controllers下的控制器,爲了讀取applcation/admin/controllers下的控制器,我們需要在網站根目錄下新建admin文件,並將根目錄下的index.php複製至此,接下來編輯此index.php,找到:
1 |
$system_path = "system" ; //改爲 $system_path = "../system"; |
2 |
$application_folder = "application" ; //改爲 $application_folder = "../application/admin"; |
另外此目錄可能用到的css/js/images 文件夾 也可以放在新建的admin之下。
第一個目標完成之後,現在通過URL http:www.//myci/admin 可以去讀取當前應用程序裏面配置文件中默認設置好的控制器welcome,但是對於非默認的控制器讀取url就有些略長了,比如在admin/applcation/controllers裏有一個login控制器(對應程序就是login類)用來顯示後臺登陸頁面,需要通過這個url才能訪問 http://www.myci/admin/index.php/login/index ,根據CI規則,如果url中不寫類的方法會默認讀取index()方法,所以上面這個url也可以通過http://www.myci/admin/index.php/login訪問。
要實現的目標顯然不是上面這個,這個URL中還有一個index.php是看着不舒服的,真正的目標是把它去掉。實現方式其實很簡單,那就是通過.htaccess文件對URL重寫(rewrite)。接下來在根目錄下admin文件裏裏面創建一個.htaccess文件,內容如下:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|scripts|robots\.txt)
RewriteRule ^(.*)$ /manage/index.php/$1 [L]
官方方法:默認情況下,index.php 將被包含在你的 URL 中: example.com/index.php/news/article/my_article 你可以很容易的通過 .htaccess 文件來設置一些簡單的規則刪除它。下面是一個例子,使用“negative”方法將非指定內容進行重定向: RewriteEngine on 注意:如果你的項目不在根目錄請把上面這一句改爲:RewriteRule ^(.*)$ index.php/$1 [L] 在上面的例子中,可以實現任何非 index.php、images 和 robots.txt 的 HTTP 請求都被指向 index.php。 官方方法的問題: 1. 沒有說明.htaccess文件創建到哪個目錄;.htaccess文件放到index.php所在目錄,一般爲CodeIgniter跟目錄。 2. 不用管application和system目錄中的.htaccess 3. 若項目不在根目錄,則需要在最後一句語句加上ci所在目錄的路徑, RewriteRule ^(.*)$ /ci_dir/index.php/$1 [L] eg. index.php文件在wwwroot\\codeigniter,wwwroot是跟目錄,則最後一句改爲 RewriteRule ^(.*)$ /codeigniter/index.php/$1 [L] 4. [中級] 有效刪除URL中的index.php http://codeigniter.org.cn/forums/thread-15444-1-1.html 這個博客中的RewriteCond $1 !^(index\\\\.php|images|robots\\\\.txtl)最後多了一個l 5. apache一般默認都加載了重寫模塊,具體可以查看 Apache\\conf\\httpd.conf文件 LoadModule rewrite_module modules/mod_rewrite.so 以下內容不需要修改 <Directory /> 6. 不需要修改application/config/config.php中的$config['index_page'] = 'index.php' |