CI框架 CodeIgniter 僞靜態 htaccess設置和Nginx僞靜態方法

衆所周知,LAMP表明Linux下Apache、MySQL、PHP這種網站服務器架構;而LNMP指的是Linux下Nginx、MySQL、PHP這種網站服務器架構。LNMP一鍵安裝包能夠從網上下載使用。

Nginx(發音同 engine x)由 Igor Sysoev 用C語言爲俄羅斯訪問量第二的搜索引擎 Rambler.ru 站點開發,是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3/SMTP)代理服務器,其將源代碼以類BSD許可證的形式發佈,並在一個BSD-like 協議下發行。其特色是小巧高效,佔有內存少,併發能力強,事實上Nginx的併發能力確實在同類型的網頁服務器中表現較好。中國大陸使用Nginx網站用戶有:新浪、網易、淘寶、騰訊等。Nginx第一個公開版本0.1.0發佈於2004年10月4日。因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,Nginx 1.0.4發佈。由此能夠看出使用LNMP架構的好處。

關於僞靜態技術,最初是動態語言出現後爲了解決用戶訪問的便利性和搜索蜘蛛的友好性。關於僞靜態的組件有ISAPI_Rewrite、開源的IIRF等。但ISAPI_Rewrite Lite版只支持全局的httpd.conf的,不支持分佈式的httpd.ini的,只有收費的Full版才支持分佈式httpd.ini。如今咱們知道,Nginx也能實現簡單的僞靜態。更多介紹僞靜態能夠參考

javascript

CI在Apache、Nginx上運行須要.htaccess配置文件,在IIS服務器上則須要web.config文件,CI的僞靜態咱們能夠經過.htaccess裏面的規則設定php

RewriteEngine on  
RewriteCond $1 !^(index\\.php|system\\.php|images|skin|js|ls|swfupload|attachment|application|robots\\.txt)  
RewriteRule ^(.*)$ /fx/index.php/$1 [L]
注: RewriteRule ^(.*)$ /webdir/index.php/$1 [L]裏的webdir是你的CI程序目錄 

Nginx服務器僞靜態設置首先須要設置nginx開啓 path_info (LNMP默認已開啓)
,能夠參考如下來自ZK的方法:

假設咱們的子目錄名稱爲 zk
        location /zk/ {
        root   /var/www/html/;
        index index.html index.htm index.php;
        if ($request_filename !~* /giftbox/(javascript|css|images|style|upimg|artDialog|fckeditor|userfiles|crontab|robots\.txt|index\.php)) {
        rewrite ^/(.*)$ /zk/index.php?$1 last;
        }

root 的目錄路徑爲您的根目錄路徑 不須要更改。

另外附上主目錄僞靜態規則

        #rewrite ^/$ /index.php last;
        #一下是防止某些文件夾被直接訪問
        #rewrite ^/(?!index\.php|images|robots\.txt|js|css|upimg|artDialog|style)(.*)$ /index.php/$1 last;


首先須要設置nginx 開啓 path_info (lnmp默認已經開啓path_info)

僞靜態規則:

if ($request_uri ~* ^/system)
{
 rewrite ^/(.*)$ /index.php?/$1 last;
 break;
}

if (!-e $request_filename)
{
 rewrite ^/(.*)$ /index.php?/$1 last;
 break;
css

}html

 

在網上查到的資料不少人都說nginx目前不支持.htaccess文件來作僞靜態,小子也以爲不該該,做爲世界上輕量級最好用的WEB服務器,Nginx應該能夠的,谷歌了一下,找到了nginx徹底能夠支持.htaccess文件的資料,其實Linux下的文件是沒有擴展名區別的,而針對nginx的僞靜態配置文件更是沒有名稱的區別,只要指定相應路徑便可,具體步驟請按以下操做:java

一、新建一個.htaccess文件,在裏面輸入規則,如:linux

  1. # nginx rewrite rule
  2. rewrite ^(.*?)/article/.*?-(\d+)-(\d+)\.html$ $1/show.html?id=$2&page=$3 break;
  3. rewrite ^(.*?)/category/.*?-(\d+)-(\d+)\.html$ $1/list.html?id=$2&page=$3 break;
  4. rewrite ^(.*?)/tag/([^/]+)/?$ $1/tag.html?w=$2 break; <span id="more-1758"></span>
  5. rewrite ^(.*?)/tag/([^/]+)/(\d+)$ $1/tag.html?w=$2&page=$3 break;
  6. # end nginx rewrite rule

保存文件並上傳到網站的根目錄。nginx

二、修改虛擬主機配置web

# ee /usr/local/etc/nginx/nginx.conf #freebsd 7.2默認nginx默認安裝的配置文件
在你須要添加僞靜態的虛擬機中的server塊中引入.htaccess文件apache

include /usr/www/.htaccess #請把這個改爲你.htaccess文件的位置,
保存、退出重啓nginx服務器

# /usr/local/etc/rc.d/nginx restart
刷新看看,若是能正常器從證實你的rewrite rule的語法是正確

nginx的rewrite規則您能夠直接放在主機配置中也能夠放在獨立的文件用includeinru,存爲獨立的文件時,保存到一個新的文件(文件名能夠任意取,不過建議仍是用.ht(注意有個「點」)開頭的文件名,由於這個服務器裏面默認過濾了外部對.ht開頭的文件訪問:

location ~ /\.ht {
deny all;
}


 

CI的htaccess配置


最近忽然想把連接中的index.PHP去掉,網上搜索了一把,發現解決方法不少,整理下。

首先是兩個基本修改點:

1. 在httpd.conf中,將 全部 AllowOverride None  改成 AllowOverride All 好像共有三處吧,而後重啓apache

2. 將 config.php中的  $config['index_page'] = 'index.php';  改成 $config['index_page'] = '';

而後根據具體配置:

3.1 若是站點直接位於服務器根目錄下,如/www/ 那以下配置就行:

[java]  view plain copy
  1. RewriteEngine on  
  2. RewriteCond $1 !^(index\.php|robots|stafile|upload|\.txt)  
  3. RewriteRule ^(.*)$ /index.php/$1 [L]  



3.2 若是設置了別名,則加上 RewriteBase /別名/

3.3 若是位於根目錄下的二級目錄,則修改Rewrite Rule爲:

[java]  view plain copy
  1. RewriteEngine on  
  2. RewriteCond $1 !^(index\.php|robots|stafile|upload|\.txt)  
  3. RewriteRule ^(.*)$ /mysite/index.php/$1 [L]  

最後,有個htaccess教程,能夠詳細瞭解下各個配置。http://www.javascriptkit.com/howto/htaccess.shtml

相關文章
相關標籤/搜索