Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則集錦
nginx里使用偽靜態(tài)是直接在nginx.conf 中寫規(guī)則的,并不需要像apache要開啟寫模塊(mod_rewrite)才能進(jìn)行偽靜態(tài)。
nginx只需要打開nginx.conf配置文件,在server里面寫需要的規(guī)則即可。
server { listen?????? 80; server_name? bbs.jb51.net; index index.html index.htm index.php; root? /home/www/bbs; error_page? 404???????????????????????????????????????????? /404.htm;?????? #配置404錯(cuò)誤頁面 location ~ .*.(php|php5)?$ { #fastcgi_pass? unix:/tmp/php-cgi.sock; fastcgi_pass? 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } #下面就是偽靜態(tài)了 location /{ rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; } access_log? access_log?? off; }
然后重啟nginx服務(wù)器偽靜態(tài)就生效了,這種維護(hù)起來很是不方便我們可以把它寫在外部文件如bbs_nginx.conf中
在/home/www/bbs目錄下創(chuàng)建bbs_nginx.conf文件并寫入以下代碼:
ocation /{ rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; }
然后在上面的代碼后面加上如下代碼:
include /home/www/bbs/bbs_nginx.conf;
這樣網(wǎng)站根目錄中的bbs_nginx.conf偽靜態(tài)規(guī)則,即可實(shí)現(xiàn)單獨(dú)管理。
下面是一個(gè)實(shí)例:
1. 在使用.htaccess文件的目錄下新建一個(gè).htaccess文件,如下面一個(gè)Discuz論壇目錄:
vim /var/www/html/jb51/bbs/.htaccess
2. 在里面輸入規(guī)則,我這里輸入Discuz的偽靜態(tài)規(guī)則(這里僅增加Discuz的偽靜態(tài)規(guī)則):
# nginx rewrite? rule rewrite ^(.*)/archiver/((fid|tid)-[w-]+.html)$ $1/archiver/index.php?$2 last; rewrite ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3 last; rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last; rewrite ^(.*)/profile-(username|uid)-(.+).html$ $1/viewpro.php?$2=$3 last; rewrite ^(.*)/space-(username|uid)-(.+).html$ $1/space.php?$2=$3 last; rewrite ^(.*)/tag-(.+).html$ $1/tag.php?name=$2 last; # end nginx rewrite rule
wq保存退出。
3. 修改nginx配置文件:
vim /etc/nginx/nginx.conf
4. 在需要添加偽靜態(tài)的虛擬主機(jī)的server{}中引入.htaccess文件:
include /var/www/html/jb51/bbs/.htaccess; (備注:把路徑改成你.htaccess文件的具體位置)
wq保存退出。
5. 重新加載nginx配置文件:
/etc/init.d/nginx reload
Nginx常用Rewrite偽靜態(tài)規(guī)則
偽靜態(tài)規(guī)則是我們做偽靜態(tài)的一個(gè)非常重的參數(shù)了,如果我們能理解得越多就可以快速的寫出最優(yōu)的偽靜態(tài)代碼了,下面給大家整理了一些例子,希望能給你有幫助。
本日志內(nèi)容來自互聯(lián)網(wǎng)和平日使用經(jīng)驗(yàn),整理一下方便日后參考。
正則表達(dá)式匹配,其中:
* ~ 為區(qū)分大小寫匹配 * ~* 為不區(qū)分大小寫匹配 * !~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 文件及目錄匹配,其中: * -f和!-f用來判斷是否存在文件 * -d和!-d用來判斷是否存在目錄 * -e和!-e用來判斷是否存在文件或目錄 * -x和!-x用來判斷文件是否可執(zhí)行 flag標(biāo)記有: * last 相當(dāng)于Apache里的[L]標(biāo)記,表示完成rewrite * break 終止匹配, 不再匹配后面的規(guī)則 * redirect 返回302臨時(shí)重定向 地址欄會(huì)顯示跳轉(zhuǎn)后的地址 * permanent 返回301永久重定向 地址欄會(huì)顯示跳轉(zhuǎn)后的地址
一些可用的全局變量有,可以用做條件判斷(待補(bǔ)全)
$args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie $limit_rate $request_body_file $request_method $remote_addr $remote_port $remote_user $request_filename $request_uri $query_string $scheme $server_protocol $server_addr $server_name $server_port $uri
結(jié)合QeePHP的例子
if (!-d $request_filename) { rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last; rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last; break;
多目錄轉(zhuǎn)成參數(shù)
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2 if ($host ~* (.*)/.domain/.com) { set $sub_name $1; rewrite ^/sort//(/d+)//?$ /index.php?act=sort&cid=$sub_name&id=$1 last; }
目錄對(duì)換
/123456/xxxx -> /xxxx?id=123456 rewrite ^/(/d+)/(.+)/ /$2?id=$1 last; 例如下面設(shè)定nginx在用戶使用ie的使用重定向到/nginx-ie目錄下: if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /nginx-ie/$1 break; }
目錄自動(dòng)加“/”
if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }
禁止htaccess
location ~//.ht { deny all; }
禁止多個(gè)目錄
location ~ ^/(cron|templates)/ { deny all; break; }
禁止以/data開頭的文件
可以禁止/data/下多級(jí)目錄下.log.txt等請(qǐng)求;
location ~ ^/data { deny all; }
禁止單個(gè)目錄
不能禁止.log.txt能請(qǐng)求
location /searchword/cron/ { deny all; }
禁止單個(gè)文件
location ~ /data/sql/data.sql { deny all; }
給favicon.ico和robots.txt設(shè)置過期時(shí)間;
這里為favicon.ico為99天,robots.txt為7天并不記錄404錯(cuò)誤日志
location ~(favicon.ico) { log_not_found off; expires 99d; break; } location ~(robots.txt) { log_not_found off; expires 7d; break; }
設(shè)定某個(gè)文件的過期時(shí)間;這里為600秒,并不記錄訪問日志
location ^~ /html/scripts/loadhead_1.js { access_log off; root /opt/lampp/htdocs/web; expires 600; break; }
文件反盜鏈并設(shè)置過期時(shí)間
這里的return 412 為自定義的http狀態(tài)碼,默認(rèn)為403,方便找出正確的盜鏈的請(qǐng)求
“rewrite ^/ //www.dbjr.com.cn/jb51.gif;”顯示一張防盜鏈圖片 “access_log off;”不記錄訪問日志,減輕壓力 “expires 3d”所有文件3天的瀏覽器緩存 location ~* ^.+/.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers none blocked *.jb51.net *.jbzj.net localhost 1.1.1.1; if ($invalid_referer) { rewrite ^/ //www.dbjr.com.cn/jb51.gif; return 412; break; } access_log off; root /opt/lampp/htdocs/web; expires 3d; break; }
只允許固定ip訪問網(wǎng)站,并加上密碼
root /opt/htdocs/www; allow 208.97.167.194; allow 222.33.1.2; allow 231.152.49.4; deny all; auth_basic “C1G_ADMIN”; auth_basic_user_file htpasswd;
將多級(jí)目錄下的文件轉(zhuǎn)成一個(gè)文件,增強(qiáng)seo效果
/job-123-456-789.html 指向/job/123/456/789.html rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)/.html$ /job/$1/$2/jobshow_$3.html last;
將根目錄下某個(gè)文件夾指向2級(jí)目錄
如/shanghaijob/ 指向 /area/shanghai/
如果你將last改成permanent,那么瀏覽器地址欄顯是/location/shanghai/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
上面例子有個(gè)問題是訪問/shanghai 時(shí)將不會(huì)匹配
rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
這樣/shanghai 也可以訪問了,但頁面中的相對(duì)鏈接無法使用,
如./list_1.html真實(shí)地址是/area/shanghia/list_1.html會(huì)變成/list_1.html,導(dǎo)至無法訪問。
那我加上自動(dòng)跳轉(zhuǎn)也是不行咯
(-d $request_filename)它有個(gè)條件是必需為真實(shí)目錄,而我的rewrite不是的,所以沒有效果 if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; }
知道原因后就好辦了,讓我手動(dòng)跳轉(zhuǎn)吧
rewrite ^/([0-9a-z]+)job$ /$1job/ permanent; rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
文件和目錄不存在的時(shí)候重定向:
if (!-e $request_filename) { proxy_pass http://127.0.0.1; }
域名跳轉(zhuǎn)
server { listen 80; server_name jump.c1gstudio.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; rewrite ^/ //www.dbjr.com.cn/; access_log off; }
多域名轉(zhuǎn)向
server_name www.c1gstudio.com www.c1gstudio.net; index index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ “c1gstudio/.net”) { rewrite ^(.*) //www.dbjr.com.cn$1 permanent; }
三級(jí)域名跳轉(zhuǎn)
if ($http_host ~* “^(.*)/.i/.c1gstudio/.com$”) { rewrite ^(.*) //www.dbjr.com.cn$1; break; }
域名鏡像
server { listen 80; server_name mirror.c1gstudio.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; rewrite ^/(.*) //www.dbjr.com.cn/$1 last; access_log off; }
某個(gè)子目錄作鏡像
location ^~ /php { rewrite ^.+ http://www.dbjr.com.cn/last; break; }
discuz ucenter home (uchome) rewrite
rewrite ^/(space|network)-(.+)/.html$ /$1.php?rewrite=$2 last; rewrite ^/(space|network)/.html$ /$1.php last; rewrite ^/([0-9]+)$ /space.php?uid=$1 last; discuz 7 rewrite rewrite ^(.*)/archiver/((fid|tid)-[/w/-]+/.html)$ $1/archiver/index.php?$2 last; rewrite ^(.*)/forum-([0-9]+)-([0-9]+)/.html$ $1/forumdisplay.php?fid=$2&page=$3 last; rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ $1/viewthread.php?tid=$2&extra=page/%3D$4&page=$3 last; rewrite ^(.*)/profile-(username|uid)-(.+)/.html$ $1/viewpro.php?$2=$3 last; rewrite ^(.*)/space-(username|uid)-(.+)/.html$ $1/space.php?$2=$3 last; rewrite ^(.*)/tag-(.+)/.html$ $1/tag.php?name=$2 last; 給discuz某版塊單獨(dú)配置域名 server_name bbs.jb51.net news.jb51.net; location = / { if ($http_host ~ news/.jb51.net$) { rewrite ^.+ http://news.jb51.net/forum-831-1.html last; break; } } discuz ucenter 頭像 rewrite 優(yōu)化 location ^~ /ucenter { location ~ .*/.php?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location /ucenter/data/avatar { log_not_found off; access_log off; location ~ /(.*)_big/.jpg$ { error_page 404 /ucenter/images/noavatar_big.gif; } location ~ /(.*)_middle/.jpg$ { error_page 404 /ucenter/images/noavatar_middle.gif; } location ~ /(.*)_small/.jpg$ { error_page 404 /ucenter/images/noavatar_small.gif; } expires 300; break; } } jspace rewrite location ~ .*/.php?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location ~* ^/index.php/ { rewrite ^/index.php/(.*) /index.php?$1 break; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; }
附現(xiàn)在常用cms替換
WordPress偽靜態(tài)規(guī)則:
location / { index index.html index.php; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } } rewrite /wp-admin$ $scheme://$host$uri/ permanent;
PHPCMS偽靜態(tài)規(guī)則:
location / { ###以下為PHPCMS 偽靜態(tài)化rewrite法則 rewrite ^(.*)show-([0-9]+)-([0-9]+)\.html$ $1/show.php?itemid=$2&page=$3; rewrite ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1/list.php?catid=$2&page=$3; rewrite ^(.*)show-([0-9]+)\.html$ $1/show.php?specialid=$2; ####以下為PHPWind 偽靜態(tài)化rewrite法則 rewrite ^(.*)-htm-(.*)$ $1.php?$2 last; rewrite ^(.*)/simple/([a-z0-9\_]+\.html)$ $1/simple/index.php?$2 last; }
ECSHOP偽靜態(tài)規(guī)則:
if (!-e $request_filename) { rewrite "^/index\.html" /index.php last; rewrite "^/category$" /index.php last; rewrite "^/feed-c([0-9]+)\.xml$” /feed.php?cat=$1 last; rewrite “^/feed-b([0-9]+)\.xml$” /feed.php?brand=$1 last; rewrite “^/feed\.xml$” /feed.php last; rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last; rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last; rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last; rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3 last; rewrite “^/category-([0-9]+)-b([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2 last; rewrite “^/category-([0-9]+)(.*)\.html$” /category.php?id=$1 last; rewrite “^/goods-([0-9]+)(.*)\.html” /goods.php?id=$1 last; rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last; rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$” /article_cat.php?id=$1&page=$2 last; rewrite “^/article_cat-([0-9]+)(.*)\.html$” /article_cat.php?id=$1 last; rewrite “^/article-([0-9]+)(.*)\.html$” /article.php?id=$1 last; rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html” /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last; rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2&page=$3 last; rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2 last; rewrite “^/brand-([0-9]+)(.*)\.html” /brand.php?id=$1 last; rewrite “^/tag-(.*)\.html” /search.php?keywords=$1 last; rewrite “^/snatch-([0-9]+)\.html$” /snatch.php?id=$1 last; rewrite “^/group_buy-([0-9]+)\.html$” /group_buy.php?act=view&id=$1 last; rewrite “^/auction-([0-9]+)\.html$” /auction.php?act=view&id=$1 last; rewrite “^/exchange-id([0-9]+)(.*)\.html$” /exchange.php?id=$1&act=view last; rewrite “^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last; rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last; rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2 last; rewrite “^/exchange-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1 last; }
SHOPEX偽靜態(tài)規(guī)則 :
location / { if (!-e $request_filename) { rewrite ^/(.+\.(html|xml|json|htm|php|jsp|asp|shtml))$ /index.php?$1 last; } }
SaBlog 2.0:
# 只帶月份的歸檔 rewrite "^/date/([0-9]{6})/?([0-9]+)?/?$" /index.php?action=article&setdate=$1&page=$2 last; # 無分類翻頁 rewrite ^/page/([0-9]+)?/?$ /index.php?action=article&page=$1 last; # 分類 rewrite ^/category/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&cid=$1&page=$2 last; rewrite ^/category/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&curl=$1&page=$2 last; # 歸檔、高級(jí)搜刮 rewrite ^/(archives|search|article|links)/?$ /index.php?action=$1 last; # 全數(shù)批評(píng)、標(biāo)簽列表、引用列表 帶分頁 rewrite ^/(comments|tagslist|trackbacks|article)/?([0-9]+)?/?$ /index.php?action=$1&page=$2 last; # tags rewrite ^/tag/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&item=$1&page=$2 last; # 文章 rewrite ^/archives/([0-9]+)/?([0-9]+)?/?$ /index.php?action=show&id=$1&page=$2 last; # RSS rewrite ^/rss/([0-9]+)?/?$ /rss.php?cid=$1 last; rewrite ^/rss/([^/]+)/?$ /rss.php?url=$1 last; # 用戶 rewrite ^/uid/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&uid=$1&page=$2 last; rewrite ^/user/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&user=$1&page=$2 last; # 輿圖文件 rewrite sitemap.xml sitemap.php last; # 自界說鏈接 rewrite ^(.*)/([0-9a-zA-Z\-\_]+)/?([0-9]+)?/?$ $1/index.php?action=show&alias=$2&page=$3 last;
Discuz 7偽靜態(tài)規(guī)則 :
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last; rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last; rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page\%3D$3&page=$2 last; rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last; rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
Typecho:
location / { index index.html index.php; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } }
實(shí)例:shopex啟用偽靜態(tài)
…… ??? location / ??? { ???????????? if (!-e $request_filename) { ???????????? rewrite ^/(.*)$ /index.php?$1 last; ??? } ??? } ……
到此這篇關(guān)于Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則集錦的文章就介紹到這了,更多相關(guān)Nginx偽靜態(tài)配置和常用Rewrite偽靜態(tài)規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nginx訪問日志并刪除指定天數(shù)前的日志記錄配置方法
這篇文章主要介紹了nginx訪問日志并刪除指定天數(shù)前的日志記錄配置方法,需要的朋友可以參考下2014-03-03Nginx訪問本地靜態(tài)資源詳細(xì)步驟(推薦)
Nginx?(engine?x)?是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),這篇文章主要介紹了nginx配置訪問本地靜態(tài)資源,需要的朋友可以參考下2022-12-12Nginx部署項(xiàng)目上傳文件報(bào)錯(cuò)413的解決方法
本文主要介紹了Nginx部署項(xiàng)目上傳文件報(bào)錯(cuò)413的解決方法,報(bào)錯(cuò)413是因?yàn)镹ginx對(duì)上傳大小做了限制,所以我們需要配置文件,下面就來解決這個(gè)問題,感興趣的可以了解一下2024-03-03Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法
這篇文章主要介紹了Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法,包括一個(gè)簡(jiǎn)體繁體的基本判斷方法及實(shí)際根據(jù)中英文跳轉(zhuǎn)的例子,需要的朋友可以參考下2016-04-04Nginx學(xué)習(xí)之如何搭建文件防盜鏈服務(wù)的方法示例
這篇文章主要介紹了Nginx學(xué)習(xí)之如何搭建文件防盜鏈服務(wù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10