關於偽靜態技術,最初是動態語言出現後為了解決用戶訪問的便利性和搜索蜘蛛的友好性。關於偽靜態的組件有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文件,在裏面輸入規則,如:
# nginx rewrite rule rewrite ^(.*?)/article/.*?-(\d+)-(\d+)\.html$ $1/show.html?id=$2&page=$3 break; rewrite ^(.*?)/category/.*?-(\d+)-(\d+)\.html$ $1/list.html?id=$2&page=$3 break; rewrite ^(.*?)/tag/([^/]+)/?$ $1/tag.html?w=$2 break; <span id="more-1758"></span>rewrite ^(.*?)/tag/([^/]+)/(\d+)$ $1/tag.html?w=$2&page=$3 break; # 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]