今天某大佬网站被查封整改,要求关掉所有页面,只留下一个维护页面。问如何利用Nginx规则屏蔽所有网页只留维护页面?下面提供Nginx服务器下的实现规则,规则很简单,为了方便大家理解,先讲讲Nginx的匹配规则。
先看看下面的标识符
标识符 | 描述 |
= | 精确匹配;用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该location里面的请求。 |
~ | 正则匹配;用于正则uri前,表示uri里面包含正则,并且区分大小写。 |
~* | 正则匹配;用于正则uri前,表示uri里面包含正则,不区分大小写。 |
^~ | 非正则匹配;用于标准uri前,nginx服务器匹配到前缀最多的uri后就结束,该模式匹配成功后,不会使用正则匹配。 |
无 | 普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。 |
使用方法
“=”精准匹配案例
复制
location = /login { # 精确匹配 /login ,匹配成功后,立即结束 }
“~”区分大小写正则匹配案例
复制
location ~ /images/ { #正则匹配,区分大小写,匹配成功后,立即结束 }
“~*”不区分大小写正则匹配案例
复制
location ~* /images/ { #正则匹配,不区分大小写,匹配成功后,立即结束 }
“^~” 不进行正则匹配的标准匹配
复制
location ^~ /images/ { # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。 }
普通匹配(最长字符匹配)
复制
location /blog/ { # 与location顺序无关 # 若完全匹配成功,就不在继续匹配,否则还会进行正则匹配 }
匹配顺序如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (location /)
即
(精确匹配)> (最长字符串匹配,但完全匹配) >(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)
结合上文的使用规则,假设仅允许访问/login页面,其它所有页面全部404,则使用下面规则,
由于/login页面是伪静态后的地址,所有要为 /login 页面提供伪静态规则,否则会404
复制
location = /login { try_files $uri $uri/ /index.php?$args; }
如果是wordpress你还需要加上这一句,写到括号外就行了。
复制
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
然后所有页面返回404;
复制
location / { return 404; }
如果没有使用伪静态的地址,使用下面的规则
复制
location = /login { //地址随便换 } rewrite /wp-admin$ $scheme://$host$uri/ permanent; location / { return 404; }
评论 (5)
//维护模式
function maintenance_mode()
{
if (!current_user_can('edit_themes') || !is_user_logged_in()) {
wp_die('网站备案中...', '网站备案中...', array('response' => '503'));
}
}
add_action('get_header', 'maintenance_mode');
这样只有管理员可见,多简单!