详细说明常见的nginx配备rewrite伪静态数据的重新

摘要: 文中出示一些常见的nginx配备rewrite伪静态数据的重新写过标准,用于清理网页页面的连接。标准里边的$1$2你没了解是如何来得话,要是记牢,第一个()里边的是$1,第二个()里边的是$2...

文中出示一些常见的nginx配备rewrite伪静态数据的重新写过标准,用于清理网页页面的连接。标准里边的$1$2你没了解是如何来得话,要是记牢,第一个()里边的是$1,第二个()里边的是$2.

恳求的URL是给人看的,重新写过后的URL是给电脑上看的。

这一标准的目地是以便实行检索,检索URL中包括的重要字。

恳求的URL ///search/some-search-keywords

重新写过后URL //hqidi.?p=some-search-keywords

重新写过标准         rewrite ^/search/(.*)$ /search.php?p=$1?;

客户本人材料网页页面

大多数数运作浏览者申请注册的动态性网站都出示一个能够查询本人材料的网页页面,这一网页页面的URL包括客户的UID和客户名

恳求的URL ///user/47/dige

重新写过后URL //hqidi.?id=47 name=dige

重新写过标准         rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1 name=$2?;

一些网站对标识符串主要参数应用不一样的英语的语法,比如 根据斜线 / 来隔开非取名主要参数

恳求的URL //hqidi./param1/param2/param3

重新写过后URL //hqidi.?p1=param1 p2=param2 p3=param3

重新写过标准         rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1 p2=$2 p3=$3?;

相近百度百科的文件格式

恳求的URL ///wiki/some-keywords

重新写过后URL ///?title=some-keywords

重新写过标准         rewrite ^/wiki/(.*)$ /?title=$1?;

社区论坛一般采用2个主要参数,一个话题讨论标志(topic)一个考虑点(starting post)

<

重新写过后URL //hqidi.?topic=1234 start=50

<$ viewtopic.php?topic=$1 start=$2?;

恳求的URL ///88/future

重新写过后URL //hqidi.?id=88

重新写过标准         rewrite ^/([0-9]+)/.*$ /aticle.php?id=$1?;

最终一个疑问

若被更换的URI中带有主要参数(相近/?id=5这类的URI),默认设置状况下主要参数会被全自动额外到更换串上,能够根据在更换串的结尾再加?标识来处理这一难题。

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

较为一个再加?标识和不用?标识的URL自动跳转差别:

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

浏览///test?id=5 历经301自动跳转后的URL详细地址为 ///home?id=5

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

浏览///test?id=5 历经301自动跳转后的URL详细地址为 ///home

Nginx的rewrite作用必须PCRE手机软件的适用,即根据perl适配正则表达式表述式句子开展标准配对的。默认设置主要参数编译程序nginx便会适用rewrite的控制模块,可是也务必要PCRE的适用

rewrite是完成URL重新写过的重要命令,依据regex(正则表达式表述式)一部分內容,跳转到replacement,末尾是flag标识。

nginx rewrite命令实行次序

1.实行server块的rewrite命令(这儿的块指的是server重要字后{}包围着的地区,其他xx块相近)

2.实行location配对

3.实行选中的location中的rewrite命令

假如在其中某步URI被重新写过,则再次循环系统实行1-3,直至寻找真正存有的文档。

假如循环系统超出10次,则回到500 Internal Server Error不正确。

flag标示位

rewrite的英语的语法非常简单,如:

rewrite regex URL [flag];

rewrite是重要字,regex是正则表达式表述式,URL是要取代的內容,[flag]是标识位的含意,它有下列几类值:

last: 非常于Apache的[L]标识,表明进行rewrite

break: 终止实行当今虚似服务器的事后rewrite命令集

redirect: 回到302临时性跳转,详细地址栏会显示信息自动跳转后的详细地址

permanent: 回到301永久性跳转,详细地址栏会显示信息自动跳转后的详细地址

由于301和302不可以简易的只回到情况码,还务必有跳转的URL,这便是return命令没法回到301,302的缘故了。这儿 last 和 break 差别有点儿无法了解:

last一般写在server和if中,而break一般应用在location中

last不停止重新写过后的url配对,即新的url会再从server走一遍配对步骤,而break停止重新写过后的配对

break和last都能机构再次实行后边的rewrite命令

看来一个简易案例:

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

第二条标准中,对形如images/bla_500x400.jpg的文档恳求,重新写过到resizer/bla.jpg?width=500 height=400详细地址,并会再次试着配对location。

if命令与全局性自变量

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 15k;

} //速度限制,$slow能够根据 set 命令设定

if (!-f $request_filename){

  break;

  proxy_pass p>

} //假如恳求的文档名不会有,则反方向代理商到localhost 。这儿的break也是终止rewrite查验

if ($args ~ post=140){

  rewrite ^ permanent;

} //假如query string中包括 post=140 ,

if命令中,可使用全局性自变量,这种自变量有:

$args: #这一自变量相当于恳求行中的主要参数,同$query_string

$content_length: 恳求头中的Content-length字段名。

$content_type: 恳求头中的Content-Type字段名。

$document_root: 当今恳求在root命令中特定的值。

$host: 恳求服务器头字段名,不然为网络服务器名字。

$http_user_agent: 顾客端agent信息内容

$http_cookie: 顾客端cookie信息内容

$limit_rate: 这一自变量能够限定联接速度。

$request_method: 顾客端恳求的姿势,一般为GET或POST。

$remote_addr: 顾客端的IP详细地址。

$remote_port: 顾客端的端口号。

$remote_user: 早已历经Auth Basic Module认证的客户名。

$request_filename: 当今恳求的文档相对路径,由root或alias命令与URI恳求转化成。

$scheme: HTTP协议书(如http,https)。

$server_protocol: 恳求应用的协议书,一般是HTTP/1.0或HTTP/1.1。

$server_addr: 网络服务器详细地址,在进行一次系统软件启用后能够明确这一值。

$server_name: 网络服务器名字。

$server_port: 恳求抵达网络服务器的端口号号。

$request_uri: 包括恳求主要参数的初始URI,不包括服务器名,如: /?arg=baz 。

$uri: 没有恳求主要参数确当前URI,$uri不包括服务器名,如 / 。

$document_uri: 与$uri同样。

应用return自动跳转

大家有时候必须在Nginx上应用rewrite做301详细地址自动跳转,例如下列标准:

rewrite ^ $scheme://$request_uri permanent;

的url上。这一书写没有错,可是由于应用了rewrite的正则表达式配对,会消耗一一部分資源,nginx官方网站不强烈推荐那样写。大家可使用return一样能够完成301自动跳转,简易好用,看案例:

301永久性定项到最新域名

server {

  listen 80;

  listen 443 ssl;

  server_name ;

  return 301 $scheme://;

}

之上编码完成了旧域名301自动跳转到最新域名上,倘若网站要拆换最新域名得话应用此方式做301自动跳转。

没有www的网站域名301自动跳转到带www的网站域名

server {

  listen 80;

  listen 443 ssl;

  ;

  return 301 $scheme://$request_uri;

}

http站点301自动跳转到https站点

server {

  listen 80;

  server_name ;

  return 301 p>

}

标识: 伪静态数据 rewrite nginx


联系我们

全国服务热线:4000-399-000 公司邮箱:343111187@qq.com

  工作日 9:00-18:00

关注我们

官网公众号

官网公众号

Copyright?2020 广州凡科互联网科技股份有限公司 版权所有 粤ICP备10235580号 客服热线 18720358503

技术支持:网页设计模板图片