`
m2000hsf
  • 浏览: 97229 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

nginx 301 重定向 包括域名、目录、文件等方法 (二)

 
阅读更多
nginx rewrite 伪静态配置参数详细说明

正则表达式匹配,其中:

* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

文件及目录匹配,其中:

* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记有:

* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向 地址栏会显示跳转后的地址
* permanent 返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量有,可以用做条件判断(待补全)

$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


结合例子
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;

多目录转成参数
abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
if ($host ~* (.*)\.tradeyon\.com) { 
set $sub_name $1; 
rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; 
}

目录对换
/123456/xxxx -> /xxxx?id=123456
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:

if ($http_user_agent ~ MSIE) { 
rewrite ^(.*)$ /nginx-ie/$1 break; 
}

目录自动加“/”

if (-d $request_filename){ 
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; 
}


禁止htaccess
location ~/\.ht { 
deny all; 
}


禁止多个目录
location ~ ^/(cron|templates)/ { 
deny all; 
break; 
}


禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;
location ~ ^/data { 
deny all; 
}


禁止单个目录
不能禁止.log.txt能请求
location /searchword/cron/ { 
deny all; 
}


禁止单个文件
location ~ /data/sql/data.sql { 
deny all; 
}


给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99 天,robots.txt为7天并不记录404错误日志
location ~(favicon.ico) { 
log_not_found off; 
expires 99d; 
break; 
} 

location ~(robots.txt) { 
log_not_found off; 
expires 7d; 
break; 
}


设定某个文件的过期时间;这里为600秒,并不记录访问日志
location ^~ /html/scripts/loadhead_1.js { 
access_log off; 
root /opt/lampp/htdocs/web; 
expires 600; 
break; 
}


文件反盗链并设置过期时间
这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
“rewrite ^/ http://leech.c1gstudio.com/leech.gif;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { 
valid_referers none blocked *.tradeyon.com *.tradeyon.net localhost 128.12.11.11; 
if ($invalid_referer) { 
rewrite ^/ http://images.tradeyon.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;


将多级目录下的文件转成一个文件,增强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;


将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/
如果你将last改成permanent,那么浏览器地址栏显是 /location/shanghai/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;


上面例子有个问题是访问/shanghai 时将不会匹配
rewrite ^/([0-9a-z]+)job$ /area/$1/ last; 
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;


这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area /shanghia/list_1.html会变成/list_1.html,导至无法访问。

那我加上自动跳转也是不行咯
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
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; 
}


多域名转向
server_name http://www.tradeoy.com/ http://www.tradeyon.com/; 
index index.html index.htm index.php; 
root /opt/lampp/htdocs; 
if ($host ~ "tradeyon\.com") { 
rewrite ^(.*) http://www.tradeyon.com$1/ permanent; 
}


三级域名跳转
if ($http_host ~* "^(.*)\.i\.tradeoy\.com$") { 
rewrite ^(.*) http://top.tradeoy.com$1/; 
break; 
}


域名镜向
server 
{ 
listen 80; 
server_name mirror.tradeoy.com; 
index index.html index.htm index.php; 
root /opt/lampp/htdocs/www; 
rewrite ^/(.*) http://www.tradeoy.com/$1 last; 
access_log off; 
}


某个子目录作镜向
location ^~ /down { 
rewrite ^.+ http://image.tradeoy.com/ 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;


给124688.com某版块单独配置域名
server_name bbs.124688.com news.124688.com; 
location = / { 
if ($http_host ~ news\.124688.com$) { 
rewrite ^.+ http://news. 124688.com/forum-831-1.html last; 
break; 
} 
}


discuz ucenter 头像 rewrite 优化

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; 
}

0
0
分享到:
评论

相关推荐

    nginx-伪静态-重定向-包括域名、目录、文件等配置方法.pdf

    nginx配置 -伪静态-重定向-包括域名、目录、文件等配置方法.pdf

    ngin配置301重定向设置方法和nginx子目录301重定向

    重启服务器,然后看一下成功与否: 代码如下:curl -I a.comnginx子目录301重定向设置方法 如我想把www.b.com/bfiles/download/转向到dx1.b.com:81/bfiles/download/下,nginx下网站的conf文件里这些写: 代码如下:...

    Nginx下301重定向域名的方法小结

    linux中nginx 301重定向跳转方法总结,有需要的朋友可参考一下。 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 代码如下: server { server_naaaaaaame www.aaaaaaa.com ; rewrite ^(.*) ...

    nginx中域名、目录的301重定向配置示例

    301重定向不陌生, 有时候有需求把某目录整个重定向到一个二级域名,或者不带www的顶级域名请求全部重定向到带www的二级域名.如果是Apache,需要配置.htaccess,nginx不支持,需要在配置文件里面使用rewrite指令来实现...

    nginx目录路径重定向的方法

    如果希望域名后边跟随的路径指向本地磁盘的其他目录,而不是默认的web目录时,需要设置nginx目录访问重定向. 应用场景:dashidan.com/image自动跳转到dashidan.com/folderName/image.nginx目录路径重定向的四种实现方式...

    nginx配置多域名访问以及完整配置

    对nginx进行详细的访问数量,日志请求头配置,多域名分发,反向代理等配置,可以对手机访问进行判断重定向手机域名

    nginx配置ssl配置文件.conf

    linux下nginx配置ssl,配置内网ip访问,配置内网域名访问。配置相同网站http重定向到https

    Linux 按照部署 Nginx 服务器 及相关依赖 - Nginx 配置讲解

    Nginx的配置文件位于`/etc/nginx/nginx.conf`,该文件是一个文本文件,用于描述Nginx服务器的行为和设置。以下是Nginx配置的一般描述: 1. 服务端口和服务器块:配置Nginx监听的端口和定义服务器块。服务器块可以...

    2022版Nginx教程(进阶高级,架构师必备)百度链接.rar

    核心技术篇:Nginx快速上手 Nginx安装部署,配合大量在线实操,搞定Nginx七大核心应用场景:反向代理、虚拟主机、域名解析、负载均衡、防盗链、url重定向、https,学完即可用。 部分文件目录: ├──01_Nginx从...

    利用nginx解决cookie跨域访问的方法

    最近需要把阿里云上的四台服务器的项目迁移到客户提供的新的项目中,原来的四台服务器中用到了一级域名和二级域名。比如aaa.abc.com 和bbb.abc.com 和ccc.abc.com。其中aaa.abc.com登录,通过把cookie中的信息...

    Nginx版UPUPW PHP绿色服务器平台

    支持本机Hosts文件重定向本地域名解析; 支持自定义扩展UP功能命令窗口; 支持高级服务清理工具; 支持UPUPW安全防护功能; 支持PHP功能组件开启关闭; 支持主机性能适配功能; 支持生产开发环境选项; 支持...

    LNMP系列教程之 设置301重定向的方法

    具体方法如下: 第一步,在我们VPS中的 /usr/local/nginx/conf/vhost/下,我们会看到自己网站的域名命名的CONF文件,然后可以VI命令修改,也可以用FTP下载到本地修改再传上去; 代码如下: server_name ...

    Nginx中泛域名配置的实例教程

    id=xxx都要重定向到静态文件 article/xxx.htm,nginx的rewrite比apache的强大很多,还可以用if语句,很容易理解,下面看看Nginx是如何进行Rewrite的! 提示:以下rewrite指令写在 nginx.conf 配置的 server { … } ...

    nginx配置多个虚拟主机vhost的方法示例

    比如我想配置两个虚拟主机,通过域名linux.com和linux2.com访问,分别对应的目录是/usr/htdocs/linux 和/usr/htdocs/linux2 (这个目录下是放你开发项目文件哦) 因为我安装的本地虚拟机,所以我先在hosts文件中添加...

    如何将 Nginx 配置为Web服务器的方法

    阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。 抽象来说,将 Nginx 配置为 Web 服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求。具体来说,就是定义一些虚拟服务器(Virtual ...

    LNMP环境相关配置Nginx1

    1. 默认虚拟主机 2. 用户认证 3. 域名重定向 4. Nginx的访问日志 5. 配置静态文件不记录日志并添加过期时间 7. 访问控制(主允许192.16

    ember-proxy-example:使用Nginx的Ember应用的SSL代理示例

    自签名的SSL证书用于域名homeslice.com ,您将必须托管域名文件才能运行示例。 doccker-compose.yml文件不会将任何端口公开给ember服务器。 所有流量都通过Web代理进行代理。 所有的魔力都发生在Nginx配置文件中....

    anti-hijack-list

    htdocs 用于跳转回正常网站的网页nginx nginx 的配置文件routeros/hijack.conf 用于在 RouterOS 上重定向劫持所用 IP 的规则如果您的局域网内有可以运行 nginx 的服务器,请把 155.254.49.43 替换为您服务器的 IP ...

    YSurl:一个支持域名网址加快的服务,这里是它的源代码

    对于Nginx用户,则还需投入nginx.txt里面的内容添加到Nginx的配置文件里。添加伪静态 location / { try_files $uri $uri/ =404; rewrite (\d+|\w+)$ /index.php?id=$1; location ^~ /asset/ { root /var/www/crz.im;...

Global site tag (gtag.js) - Google Analytics