Nginx rewrite伪静态配置及参数详解
nginx rewrite 伪静态【wěi jìng tài】🆚配置参数和使😷用例子【yòng lì zǐ】 附正则使用说📹明【míng】
正则表达式匹配,其中:
- * ~ 为区分大小写匹配
- * ~* 为不区分大小写匹配
- * !~和!~*分别为【fèn bié wéi】区分大❓小写不【xiǎo xiě bú】✊匹配及不区分🆕大小写【dà xiǎo xiě】不✊匹配
文件及目录匹配,其中:
- * -f和!-f用来判断是否存在文件
- * -d和!-d用来判断是否存在目录
- * -e和!-e用来判断是否存在文【cún zài wén】👴件或目🦕录【lù】
- * -x和!-x用来判断文件是否可执行
flag标记有:
- * last 相当于【xiàng dāng yú】Apache里的🔝[L]标记,表示完【biǎo shì wán】成➗rewrite
- * break 终止匹配【pèi】, 不再匹【bú zài pǐ】😨配【pèi】后面的规则🍠
- * redirect 返回302临时重【lín shí chóng】定向 地址栏会显示🍭跳转后【tiào zhuǎn hòu】♎的地址【de dì zhǐ】🎢
- * permanent 返回🔓301永久重🆖定向 地址栏会显示【huì xiǎn shì】跳转后【tiào zhuǎn hòu】📝的地址【de dì zhǐ】
一些可【yī xiē kě】🛺用的全【yòng de quán】局变量有🔛,可以用做条件判断【pàn duàn】🔏(待补全)
- $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
结合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 chéng cān】数
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;
- }
目录对【mù lù duì】🔑换
/123456/xxxx -> /xxxx?id=123456
- rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
例如下【lì rú xià】面设定nginx在用户🏆使用ie的使用【de shǐ yòng】重定向【chóng dìng xiàng】🕶到/nginx-ie目录下✡:
- if ($http_user_agent ~ MSIE) {
- rewrite ^(.*)$ /nginx-ie/$1 break;
- }
目录自【mù lù zì】动加💪“/”
- if (-d $request_filename){
- rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
- }
禁止htaccess
- location ~/\.ht {
- deny all;
- }
禁止多个目录
- location ~ ^/(cron|templates)/ {
- deny all;
- break;
- }
禁止🐇以/data开头的【kāi tóu de】文件【wén jiàn】➰
可以禁止🐇/data/下多级目录下.log.txt等请求【děng qǐng qiú】👂;
- location ~ ^/data {
- deny all;
- }
禁止单【jìn zhǐ dān】🕌个目录【gè mù lù】
不能禁止🌾.log.txt能请求
- location /searchword/cron/ {
- deny all;
- }
禁止单个文件
- location ~ /data/sql/data.sql {
- deny all;
- }
给🌁favicon.ico和robots.txt设置过【shè zhì guò】期时间;
这里为【zhè lǐ wéi】favicon.ico为99 天,robots.txt为7天并不记录【jì lù】😗404错误日【cuò wù rì】🙍志🥌
- location ~(favicon.ico) {
- log_not_found off;
- expires 99d;
- break;
- }
- location ~(robots.txt) {
- log_not_found off;
- expires 7d;
- break;
- }
设定某🔘个文件【gè wén jiàn】的过期【de guò qī】🕸时间【shí jiān】🛌;这里为600秒,并不记录访问日志
- location ^~ /html/scripts/loadhead_1.js {
- access_log off;
- root /opt/lampp/htdocs/web;
- expires 600;
- break;
- }
文件【jiàn】反🚾盗链并【dào liàn bìng】设置过期时间【qī shí jiān】
这里的return 412 为自定🐙义的【yì de】http状态码🍃,默认为403,方便找【fāng biàn zhǎo】出正确的盗链的请求😚
“rewrite ^/ http://leech.c1gstudio.com/leech.gif;”显示一张防盗链图片
“access_log off;”不记录访问日【fǎng wèn rì】📨志,减轻压力【lì】🏠
“expires 3d”所有文件【jiàn】3天的浏览器缓👎存【cún】🐖
- location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
- valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;
- if ($invalid_referer) {
- rewrite ^/ http://leech.c1gstudio.com/leech.gif;
- return 412;
- break;
- }
- access_log off;
- root /opt/lampp/htdocs/web;
- expires 3d;
- break;
- }
只充许固定ip访问网站,并加上密码
- 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;
将多级【jiāng duō jí】目录下的文件【de wén jiàn】转成一【zhuǎn chéng yī】个文件,增强🕥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;
将【jiāng】💳根目录下某个文件夹指向【zhǐ xiàng】🙇2级目录
如/shanghaijob/ 指向【zhǐ xiàng】🙇 /area/shanghai/
如果你🚹将【jiāng】💳last改成【gǎi chéng】👾permanent,那么浏【nà me liú】览器地址栏显😴是 /location/shanghai/
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
上面例【shàng miàn lì】子有个👪问题是访问【fǎng wèn】/shanghai 时将不会匹配🈲
- rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
这样🏳/shanghai 也可以访问了🍁,但页面中的相💆对链接【duì liàn jiē】无法使【wú fǎ shǐ】用【yòng】,
如./list_1.html真实地【zhēn shí dì】🌵址是👹/area /shanghia/list_1.html会变成【huì biàn chéng】/list_1.html,导至无法访问。
那我加【nà wǒ jiā】🥅上自动【shàng zì dòng】跳转也是不行咯【gē】🔞
(-d $request_filename)它有个条件是必需为👦真实目🆖录💯,而我的【ér wǒ de】rewrite不是的,所以没【suǒ yǐ méi】有效果
- if (-d $request_filename){
- rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
- }
知道原因后就好办了,让我手动跳转吧
- rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;
- rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
文件和目录不存在的时候重定向:
- if (!-e $request_filename) {
- proxy_pass http://127.0.0.1;
- }
域名跳转
- server
- {
- listen 80;
- server_name jump.c1gstudio.com;
- index index.html index.htm index.php;
- root /opt/lampp/htdocs/www;
- rewrite ^/ http://www.c1gstudio.com/;
- access_log off;
- }
多域名转向
关键词【guān jiàn cí】🥍:Nginx,rewrite,伪静态
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0