##Nginx 重定向 伪静态 rewrite index.php
仔细观察 rewrite ^(.*)/t(d+).html$ $1/index.php?t=3 last;其实感觉nginx的伪静态规则蛮好写的。
就是用正则的基础上,一个rewrite来声明,然后^是伪静态规则开头,(.*)匹配任意字符,这里匹配的就是域名了,t就是你在这里想加的字符,
如你可以加apple、orange这样的分类名了,(d+)匹配的是数字,.html匹配的是后缀,$就是正则匹配的结束。
后面半部分就是要改写的url了,用$1打头,表示域名,/index.php?t=3就是要改写的URL,用last;结束即可。
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
文件和目录不存在的时候重定向:
解释 rewrite ^(.*)$ /index.php$1 last; 的正则表达式部分 ^(.*)$:
rewrite 是Nginx的重写指令。
^(.*)$ 是正则表达式,用于匹配请求的URI。
^ 表示字符串的开始。
(.*) 是一个捕获组,用于匹配任意字符(.)零次或多次(*)。
$ 表示字符串的结束。
因此,^(.*)$ 可以匹配任意请求URI,并将其捕获为第一个参数(即$1)。
解释 rewrite ^(.*)$ /index.php$1 last; 的重写目标部分 /index.php$1:
/index.php$1 是重写后的目标URI。
/index.php 是目标文件的路径。
$1 是前面正则表达式中捕获的第一个参数,即原请求的URI。
因此,重写后的URI会将原请求的URI作为参数传递给index.php文件。
解释 rewrite ^(.*)$ /index.php$1 last; 中的 last 标志的作用:
last 是Nginx重写指令的标志之一。
当使用last标志时,Nginx会停止处理后续的rewrite指令,并使用重写后的URI重新发起一次搜索。
如果重写后的URI匹配到一个location块,Nginx将使用该location块处理请求。
概括整段伪代码的功能:
整段伪代码的功能是:当Nginx接收到一个请求时,如果该请求的文件或目录在服务器上不存在,Nginx会将该请求重写为对index.php文件的请求,并将原请求的URI作为参数传递给index.php。这通常用于实现前端控制器模式,将所有请求都转发给一个入口文件(如index.php),然后由该文件根据请求的URI进行进一步的处理。
示例代码片段如下:
nginxCopy Code
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
break;
}
}
这段配置位于Nginx的配置文件中,通常用于处理网站的根目录(/)下的请求。当请求的文件或目录不存在时,Nginx会将请求重写为对index.php的请求,并将原请求的URI作为参数传递。