阅读量:0
Nginx伪静态Rewrite正则资源汇总:在Nginx中,可以使用
rewrite
指令实现URL重写和伪静态功能。通过编写正则表达式来匹配请求的URL,并使用rewrite
指令进行相应的替换操作,实现对资源的重新定位和映射。,,下面是一个示例的Nginx伪静态Rewrite规则的配置:,,``nginx,location / {, rewrite ^/old-url$ /new-url permanent; # 将旧URL永久重定向到新URL, rewrite ^/product/([0-9]+)$ /product.php?id=$1 last; # 将/product/数字形式的URL重写为/product.php?id=数字, rewrite ^/article/([a-zA-Z0-9_-]+)$ /article.php?title=$1 last; # 将/article/字母数字下划线形式的URL重写为/article.php?title=字母数字下划线,},
`,,上述配置中,
^表示匹配字符串的开头,
$表示匹配字符串的结尾。方括号
[]用于定义字符集,[0-9]
表示匹配任意数字,[a-zA-Z0-9_-]
表示匹配任意大小写字母、数字、下划线和连字符。()
用于捕获匹配的子串,可以在后续的重写规则中使用$1
、$2
等变量来引用捕获的内容。,,这只是一个示例配置,你可以根据自己的需求和实际情况进行相应的修改和扩展。1. 正则表达式匹配
符号 | 描述 |
~ | 区分大小写的匹配 |
~ | 不区分大小写的匹配 |
!~ | 区分大小写的不匹配 |
!~ | 不区分大小写的不匹配 |
2. 文件及目录匹配标志
标志 | 描述 |
-f | 判断是否存在文件 |
-d | 判断是否存在目录 |
-e | 判断是否存在文件或目录 |
-x | 判断文件是否可执行 |
3. Rewrite指令标志
标志 | 描述 |
last | 相当于Apache的[L]标记,表示完成rewrite |
break | 终止匹配,不再匹配后面的规则 |
redirect | 返回302临时重定向,地址栏会显示跳转后的地址 |
permanent | 返回301永久重定向,地址栏会显示跳转后的地址 |
4. Nginx变量
变量 | 描述 |
$args | 与请求行中的参数相等 |
$content_length | 等于请求行的“Content_Length”的值 |
$content_type | 等同于请求头部的”Content_Type”的值 |
$document_root | 等同于当前请求的root指令指定的值 |
$document_uri | 与$uri一样 |
$host | 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样 |
$limit_rate | 允许限制的连接速率 |
$request_method | 等同于request的method,通常是“GET”或“POST” |
$remote_addr | 客户端ip |
$remote_port | 客户端port |
$remote_user | 等同于用户名,由ngx_http_auth_basic_module认证 |
$request_filename | 当前请求的文件的路径名,由root或alias和URI request组合而成 |
$request_body_file | 请求体文件 |
$request_uri | 含有参数的完整的初始URI |
$query_string | 与$args一样 |
$server_protocol | 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1” |
$server_addr | request到达的server的ip,一般获得此变量的值的目的是进行系统调用,为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数 |
$server_name | 请求到达的服务器名 |
$server_port | 请求到达的服务器的端口号 |
$uri | 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index |
5. 示例
结合PHP的例子
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 ~* (.*)\.domain\.com) { set $sub_name $1; rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; }
相关问题与解答
1、问题:在Nginx配置中,如何将动态URL重写为静态URL?
答案:可以使用Nginx的rewrite模块来实现URL重写,将动态URL www.example.com/index.php?id=1&u=str 重写为静态URL www.example.com/a/we/index.php,具体配置如下:
```nginx
rewrite ^/index\.php$ /a/we/index.php?id=$arg_id&u=$arg_u last;
```
2、问题:如何在Nginx中实现URL重定向?
答案:可以使用Nginx的rewrite指令和flag标记来实现URL重定向,将www.example.com/old-path重定向到www.example.com/new-path:
```nginx
rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
```
是关于Nginx伪静态Rewrite正则资源的详细汇总,包括正则表达式、文件及目录匹配标志、Rewrite指令标志、Nginx变量以及实际应用示例,希望这些信息对您在使用Nginx进行URL重写和优化时有所帮助。
以上就是关于“nginx 伪静态Rewrite正则资源汇总”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!