天天看點

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也能實作簡單的僞靜态。更多介紹僞靜态可以 參考

CI在Apache、Nginx上運作需要.htaccess配置檔案,在IIS伺服器上則需要web.config檔案,CI的僞靜态我們可以通過.htaccess裡面的規則設定

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;

}

在網上查到的資料很多人都說nginx目前不支援.htaccess檔案來做僞靜态,小子也覺得不應該,作為世界上輕量級最好用的WEB伺服器,Nginx應該可以的,谷歌了一下,找到了nginx完全可以支援.htaccess檔案的資料,其實linux下的檔案是沒有擴充名差別的,而針對nginx的僞靜态配置檔案更是沒有名稱的差別,隻要指定相應路徑即可,具體步驟請按如下操作:

1、建立一個.htaccess檔案,在裡面輸入規則,如:

  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

儲存檔案并上傳到網站的根目錄。

2、修改虛拟主機配置

# ee /usr/local/etc/nginx/nginx.conf #freebsd 7.2預設nginx預設安裝的配置檔案

在你需要添加僞靜态的虛拟機中的server塊中引入.htaccess檔案

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/ 那如下配置就行:

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

3.2 如果設定了别名,則加上 RewriteBase /别名/

3.3 如果位于根目錄下的二級目錄,則修改Rewrite Rule為:

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

最後,有個htaccess教程,可以詳細了解下各個配置。

http://www.javascriptkit.com/howto/htaccess.shtml

繼續閱讀