Nginx伪静态配置详解:规则、匹配与重定向

0 下载量 31 浏览量 更新于2024-08-28 收藏 68KB PDF 举报
Nginx的Rewrite模块是实现URL路径重写的关键组件,它允许你根据预定义的规则将请求的URL转换为服务器可以处理的格式。在进行伪静态配置时,Nginx的Rewrite指令结合了正则表达式的强大功能,提供了丰富的选项来控制请求的处理方式。 首先,理解几个关键概念: 1. **区分大小写匹配(*~)与不区分大小写匹配(*~*)**:前者用于严格匹配URL中的字符,而后者则是忽略大小写的匹配。例如,`rewrite ^/(a-zA-Z+)/(.*)$ /index.php?name=$1&title=$2;` 和 `rewrite ^/(a-z-a-z)+/(.*)$ /index.php?name=$1&title=$2;*~*;` 分别对应大小写和不区分大小写的路径匹配。 2. **文件与目录检查**:`-f` 和 `!-f` 用于检测文件存在与否,`-d` 和 `!-d` 判断目录,`-e` 和 `!-e` 则检查文件或目录存在,`-x` 和 `!-x` 检查文件是否可执行。这些标志可以在Rewrite规则中作为条件,决定是否执行特定的重定向操作。 3. **Flag标记**: - `last`:标记Rewrite操作结束,后续的规则不会被执行,类似Apache中的 `[L]`。 - `break`:强制停止当前规则链,不继续匹配后面的规则。 - `redirect` 和 `permanent`:分别用于临时和永久重定向,URL栏中会显示新的地址。 4. **全局变量**:Nginx提供了多个全局变量,如 `$request_uri`、`$host` 等,这些变量可以在Rewrite规则中用作条件,帮助你根据请求的具体信息执行不同的重写策略。 举例来说,QeePHP框架的Rewrite配置可能如下: ```nginx location / { 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; } } location /sort/ { # 对于以'sort/'开头的URL,提取域名后缀并存储到$sub_name变量中,然后进行重写 set $sub_name $host; rewrite ^/so(.*)$ /index.php?act=sort&name=$sub_name&$1; } ``` 这些规则展示了如何使用Rewrite来隐藏URL的真实结构,提高网站的可维护性和SEO友好性。通过结合正则表达式、文件和目录检查以及灵活的标记,Nginx的Rewrite模块为创建动态且高效的URL映射提供了强大的工具。理解并熟练运用这些配置参数,能够帮助你优化网站性能,提升用户体验。