快3网上购买

详解常用的nginx rewrite重写规则

电脑杂谈  发布时间:2019-09-03 08:04:28  来源:网络整理

nginx rewrite last_nginx rewrite_nginx rewrite https

本文提供一些常用的rewrite重写规则,用来美化网站的链接。规则后面的$1$2你不知道是怎样来的话nginx rewrite last,只要记住,第一个()里面的是$1,第二个()里面的是$2.

请求的URL是给人看的nginx rewrite last,重写后的URL是给电脑看的。

执行搜索

这个规则的目的是为了执行搜索,搜索URL中包括的关键字。

请求的URL//hqidi。com/search/some-search-keywords

重写后URL//hqidi.com/search.php?p=some-search-keywords

重写规则 rewrite ^/search/(.*)$ /search.php?p=$1?;

用户页面

快3网上购买大多数运行访问者注册的动态网页都提供一个可以查看的页面,这个页面的URL包含用户的UID和用户名

请求的URL//hqidi.com/user/47/dige

重写后URL//hqidi。com/user。php?id=47&name=dige

重写规则 rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;

多个参数

有些网站对字符串参数使用不同的句型,例如 通过斜线“/”来分隔非命名参数

nginx rewrite https_nginx rewrite last_nginx rewrite

请求的URL//hqidi.com/index.php/param1/param2/param3

重写后URL//hqidi。com/index。php?p1=param1&p2=param2&p3=param3

重写规则 rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;

类似百科的格式

这种格式特点,一个前缀目录,后跟文章名称

请求的URL//hqidi.com/wiki/some-keywords

重写后URL//hqidi.com/wiki/index.php?title=some-keywords

重写规则 rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;

论坛

论坛大概用到两个参数,一个话题标识(topic)一个出发点(starting post)

请求的URL//hqidi.com/topic-1234-50-some-keywords.html

重写后URL//hqidi.com/viewtopic.php?topic=1234&start=50

重写规则 rewrite ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ viewtopic.php?topic=$1&start=$2?;

新网站的文章

nginx rewrite_nginx rewrite last_nginx rewrite https

这种URL结构的特征,由一个文章标识符,后跟一个斜线,和一个关键字列表组成。

请求的URL//hqidi。com/88/future

重写后URL//hqidi.com/atricle.php?id=88

重写规则 rewrite ^/([0-9]+)/.*$ /aticle.php?id=$1?;

最后一个问号

若被更换的URI中带有参数(类似/app/test.php?id=5之类的URI),默认状况下参数会被手动附加到替换串上,可以借助在替换串的末尾加上?标记来缓解这一难题。

rewrite ^/users/(.*)$ /show?user=$1? last;

比较一个加上?标记和不加?标记的URL跳转区别:

rewrite ^/test(.*)$ //hqidi.com/home premanent;

访问//hqidi。com/test?id=5 经过301跳转后的URL地址为 //hqidi。com/home?id=5

rewrite ^/test(.*)$ //hqidi.com/home? premanent;

快3网上购买访问//hqidi。com/test?id=5 经过301跳转后的URL地址为 //hqidi。com/home

Nginx的rewrite功能应该PCRE软件的支持,即借助perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的组件,但是也需要要PCRE的支持

rewrite是推动URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

nginx rewrite https_nginx rewrite_nginx rewrite last

nginx rewrite指令执行顺序

1。执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似)

2.执行location匹配

快3网上购买3。执行指定的location中的rewrite指令

如果其中某步URI被重写,则再次循环执行1-3,直到找到真实存在的文件。

如果循环达到10次,则返回500 Internal Server Error错误。

flag标志位

rewrite的语法很简单,如:

rewrite regex URL [flag];

rewrite是关键字,regex是正则表达式,URL是要替代的内容,[flag]是标记位的含义,它有下列几种值:

因为301和302不能简单的只返回状况码,还必须有重定向的URL,这就是return指令能够返回301,302的理由了。这里 last 和 break 区别有点难以理解:

来看一个简单例子:

rewrite ^/listings/(.*)$ /listing.html?listing=$1 last;
rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;

第一条重写规则中,我们可以使用友好的URL:代替#63;listing=123,就相当于我们在浏览器的地址栏中键入后,实际访问的URL资源是#63;listing=123。

nginx rewrite_nginx rewrite https_nginx rewrite last

第二条规则中,对形如的文件请求,重写到#63;width=500&height=400地址,并会再次尝试匹配location。

if指令与全局变量

快3网上购买if指令语法为if(condition){...},对给定的条件condition进行判定。如果为真,大括号内的rewrite指令将被执行。

来看代码规则:

if ($http_user_agent ~ MSIE) {
  rewrite ^(.*)$ /msie/$1 break;
} //如果UA包含"MSIE",rewrite请求到/msid/目录下
 
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
  set $id $1;
 } //如果cookie匹配正则,设置变量$id等于正则引用部分
 
if ($request_method = POST) {
  return 405;
} //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
 
if ($slow) {
  limit_rate 10k;
} //限速,$slow可以通过 set 指令设置
 
if (!-f $request_filename){
  break;
  proxy_pass http://127.0.0.1; 
} //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
 
if ($args ~ post=140){
  rewrite ^ http://mysite.com/ permanent;
} //如果query string中包含"post=140",永久重定向到mysite.com

快3网上购买if指令中,可以使用全局变量,这些变量有:

使用return跳转

我们有时需要在Nginx上使用rewrite做301地址跳转,比如下面规则:

rewrite ^ $scheme://www.mysite.com$request_uri permanent;

当访问任意url就会301永久定向到的url上。这个写法没错,但是由于使用了rewrite的正则匹配,会消耗一部分资源,nginx官网不推荐这种写。我们可以使用return同样可以实现301跳转,简单实用,看案例:

301永久定向到新域名

server {
  listen 80;
  listen 443 ssl;
  server_name www.old-name.com old-name.com;
  return 301 $scheme://www.new-name.com;
}

以上代码实现了老域名301跳转到新域名上,假如网站要更改新域名的话使用此步骤做301跳转。

不带www的域名301跳转到带www的域名

server {
  listen 80;
  listen 443 ssl;
  server_name mysite.com;
  return 301 $scheme://www.mysite.com$request_uri;
}

http站点301跳转到https站点

server {
  listen 80;
  server_name www.mysite.com;
  return 301 https://www.mysite.com$request_uri;
}

以上就是有关Nginx的rewrite重写与重定向的介绍,觉得有用就请练习多遍,收藏好此文不迷路。也期望你们多多支持脚本之家。


本文来自电脑杂谈,转载请注明本文网址:
http://www.kadakong.com/a/jisuanjixue/article-121533-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张诚诚
      张诚诚

      应该向小米公司以及消费者正式道歉

    • 郁达夫
      郁达夫

      接下来就是投资有风险了事

    赖子棋牌 冠军彩票开户 北京快乐8走势图 内蒙古快3 天津快乐十分 吉林快3 快三投注 千禧彩票登陆 上海快3 大资本彩票网