Nginx的URL重写控制模块应用广泛。常见的URL重写控制模块命令有if、rewrite、set、break等。
一.如果指挥
if命令的 *** 作方法如下:
英语语法:if(条件){...}
初始值:无
应用程序字段名:服务器,位置
默认情况下,if命令的初始值是空,可以在Nginx环境变量的server,location部分应用。if命令还可以区分句子中的特定正则表达式或匹配条件。
正则表达式匹配:
~:表示英文大小写匹配的区别。
~*:表示英文大小写匹配没有区别。
!~还有!~*各表示英文大小写不匹配和英文大小写不匹配的区别。
文档和文件目录匹配:
-f和!-f用于区分是否有文档。
-d和!-d用于区分是否有文件目录。
-e和!-e用于区分是否有文档或文件目录。
-x和!-x用来告诉一个文档是否可行。
Nginx的环境变量中有很多运行内存变量,可以和if命令一起使用。常见变量如下:
$args:该变量与请求行中的主参数相同。
$document_root:特定于当前请求的根命令的值。
$uri:相当于今天请求中的uri
$document_uri:与$uri相同
$Host:与请求头顶部的“Host”行的具体值相同
$limit_rate:用于设置极限加入的速度。
$request_method:等同于request的方法。一般是“GET”或“POST”
$remote_addr:表示手机客户端的IP地址
$remote_port:表示移动客户端的端口号。
$remote_user:表示登录名,由ngx_http_auth_basic_module验证。
$request_filename:表示当前请求的文档路径名,由root或alais和URI请求组成。
$request_uri:表示它包含详细的原始uri和主要参数
$request_string:与$args相同
$server_name:请求到达的网络服务器的名称。
$server_port:请求到达的服务器的端口号。
在掌握了if命令标准和Nginx的基本变量之后,下面是一个服务器配置段的例子:
server { listen 80; server_name www.a.com; access_log logs/host.access.log main; location / { root /var/www/html; index index.html index.htm; } location ~.*\(htm|html|gif|jpg|jpeg|png|bmp|swf|js|css)$ { root /usr/local/nginx/www/img; if (! -f $request_filename) { root /var/www/html/img; } if (! -f $request_filename) { root /apps/p_w_picpaths; } } location ~.*\. (jsp)${ root /webdata/webapp/www/ROOT; if (! -f $request_filename) { root /usr/local/nginx/www/jsp; } proxy_pass http://127.0.0.1:8888; } }这一段编码是设置www.a.com域名资源浏览的关键。该网站域名在www.a.com的网站根目录为“/var/www/html”。
静态数据資源各自坐落于"/usr/local/nginx/www/img"、"/var/www/html/img"、"/apps/p_w_picpaths"这三个文件目录下边。请求静态数据資源的方法是先后从这三个文件目录下边搜索。假如第一个文件目录不会有得话,就要找第二个文件目录。依此类推,如都找不着得话,就回到404错误。静态数据资源位于“/usr/local/nginx/www/img”、“/var/www/html/img”和“/apps/p_w_picpaths”三个文件目录下。请求静态数据资源的方法是从这三个文件目录的底部依次搜索。如果第一个文件目录不可用,请查找第二个文件目录。以此类推,如果找不到,就回到404错误。
动态资源位于“/webdata/webapp/www/ROOT”和“/usr/local/nginx/www/JSP”两个文件目录下。如果手机客户端请求的资源是jsp末尾的文档,那么就在这里的两个动态程序流文件目录中依次搜索资源。如果这里的两个文件目录中没有定义资源,那么将从网站的根目录“/var/www/html”进行搜索。
第二,重写命令
NGX根据适用的URL重写和ngx_http_rewrite_module控制模块的if标准进行区分。如果要应用重写,则必须应用pcre。所以在编译程序安装Nginx的时候,我们还是要记得索要具体pcre源代码的安装文件。
重写 *** 作如下:
英语语法:重写正则表达式标志
初始值:无
应用程序字段名:服务器位置if
默认情况下,重写命令值是空,如果是Nginx环境变量的一部分,它可以应用在服务器位置。rewrite命令的最后一个主要参数是flag。适用的标志识别键如下:
Last:相当于Apache中的[L]标志,表示重写后检索到相对的URI或位置。
中断:表示匹配停止,后续标准尚未匹配。
重定向:会返回302临时跳转,信息自动跳转后的详细网址会显示在电脑浏览器的详细地址中。
永久:会返回301永久跳转,信息自动跳转后的详细网址会显示在电脑浏览器的详细地址中。
其中last和break用于完成URL重写,电脑浏览器地址栏中的详细URL地址不会改变。这是一个装有:
location ~ ^/best/ { rewrite ^/best/(.*) /test/$1 break; proxy_pass http://www.a.com; }这个例子用break标记,它可以完成网页的跳转,请求http://www.a.com/best/webinfo.html
Http://www.b.com/test/webinfo.html网页,而不会导致计算机浏览器地址栏中的URL发生变化。这个作用在新旧网站更替的情况下非常有效。
三。设置命令
根据set命令,可以设置变量并获取其值。值可以是文字、变量或它们的组成部分。也可以用set定义一个新的变量,但是不能用set在$http_xxx头的顶部设置变量的值。
设置的 *** 作方法如下:
英语语法:设置变量值
初始值:无
应用程序字段名:服务器位置if
默认情况下,set命令的初始值是空,如果它是Nginx环境变量的一部分,它可以应用于服务器位置。下面是一个配置示例:
location / { proxy_pass http://127.0.0.1:8080/; set $query $query_string; rewrite /dede /wordpress?$query?; }在这种情况下,为了完成对http://www.a.com/wp/?.的请求,p=160的页面被重写到http://www.b.com/wordpress/?.的详细地址P=160,也就是说,用主参数重写URL。这里涉及到变量$query_string。这个变量相当于请求行中的主参数,即“?”内容背后。也可以使用$args代替$query_string变量。
第四,中断命令
Break表示执行当前设置标准后,与下面的重写标准不匹配。
断线的 *** 作方法如下:
英语语法:break
初始值:无
应用程序字段名:服务器位置if
默认情况下,break的命令值也是空。如果是Nginx的环境变量,它可以应用在服务器位置的一部分。下面是一个设备案例:
server { listen 80; server_name www.a.com www.b.com; if ($host != ‘www.a.com’) { rewrite ^/(.*)$ http://www.a.com/error.txt; break; rewrite ^/(.*)$ http://www.a.com/$1 permanent; } }这个例子定义了两个网站域名:www.a.com和www.b.com。根据网站域名www.a.com浏览网站时,请求会跳转到http://www.a.com/error.txt.的网页因为设置了break命令,下面的重写不太容易实现,立即撤销!
好了,下面是一些URL重写的例子,仅供参考!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)