索引
localtion匹配规则
nginx匹配请求该被哪个location处理时,使用的是精确匹配原则,哪个location最精确就使用哪个location。没有匹配到时使用location /
的处理块。
所以下面配置解析中的location /
块才会处理那些非静态资源。
解析rewrite逻辑
if条件含义
参数 | 含义 |
---|---|
-f | 文件存在为true |
!-f | 文件不存在为true |
location / { # 文章链接的rewrite逻辑 # 如果不存在这个资源,就请求index.php去处理 # 例如本片文章请求的是/archives/2558,根本不存在这个文件啊,就会在nginx内部重写这个请求,去请求index.php,php的请求被wordpress接管,所以就处理ok了。 # 但是如果请求的是/abc.js,这种静态文件都是存在的啊,所以就不重写请求,wordpress的index.php不会接管 if (!-f $request_filename){ rewrite (.*) /index.php; } # 少了这个,进入/wp-admin页面会死循环 # 死循环就是因为/wp-admin时,发现/wp-admin是不存在的文件,所以被wordpress接管 # 接管后,wordpress返回302重定向,wordpress认为这个地址是可以请求的,所以又让浏览器请求/wp-admin,所以就死循环了 # 而实际上wordpress的内部是存在/wp-admin/index.php文件的,所以应该由wordpress去处理/wp-admin/index.php这个资源 if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } }
重定向的截图如下
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2558