二级目录隐藏 index.php 路径

nginx_rewrite 规则介绍

rewrite 使用 nginx 提供的全局变量和自己设置的变量,结合正则表达式和标志位 实现 url 重写以及重定位。

rewrite 只能放在 server{},location{},if{} 中使用,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://domain.com/shop/goods/index.php?id=1&u=str 只能对 /shop/goods/index.php 重写。

rewrite 语法规则: rewrite regex replacement [flag]; // rewrite 正则表达式 替换文本;

隐藏 index.php 路径

示例代码

location / {
    index  index.html index.htm index.php;  

    if (!-e $request_filename) { # 如果文件或文件夹不存在则重写
        rewrite ^/(.*)$ /index.php?$1 last;
        break;
    }
}

二级目录隐藏 index.php 路径

比如: https://domain.net/api/index.php/notify/message
可以这样 https://domain.net/api/notify/message 访问。

示例代码:

location /api/ {
    index  index.html index.htm index.php;

    if (!-e $request_filename) {
        rewrite ^/(\w+)/(.*)$ /$1/index.php last;
        # rewrite ^/api/(.*)$ /api/index.php?$1 last; 这样写也可以
        break;
    }
}

标志位 flag

`last` : 表示完成 rewrite,相当于 Apache 的 [L] 标记

`break` : 停止执行当前虚拟主机的后续 rewrite 指令集

`redirect` : 返回 302 临时重定向,地址栏会显示跳转后的地址

`permanent` : 返回 301 永久重定向,地址栏会显示跳转后的地址

last 和 break の 区别注释:

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

last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配

break和last都能阻止继续执行后面的rewrite指令

在 “二级目录隐藏 index.php 路径” 上有 1 条评论

  1. \w+ 匹配由数字、26个英文字母或者下划线组成的字符串

    .* 意味着能够匹配任意数量的任何字符

    $1-$9存放着正则表达式中最近的 9 个正则表达式的匹配结果,这些结果按照子匹配的出现顺序依次排列。

    $1 代表的是匹配的第一个结果.括号表示的是表达式定义的 “组” (group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个)上面的表达式有 2 个匹配组 (\w+)(.*) 所有后面可以用 $1$2 来用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*