apache mod_write技术概述

参考资料

rewriterule详解
标识位详解
全面理解Rewritecond与rewriterule

语法

  • RewriteCond与RewriteRule的第一个参数都是正则表达式的pattern。

RewriteCond TestString CondPattern [flags]

exp
RewriteCond “%{HTTP_USER_AGENT}” “(iPhone|Blackberry|Android)”
上述指令含义为,判断http头的user_agent字段是否(iPhone|Blackberry|Android)中的任意一个。

RewriteCond这个指令的用途定义重写的条件。

  • RewriteRule
    语法
    RewriteRule Pattern Substitution [flags]

exp
RewriteRule “^/$” “/homepage.std.html” [L]
上述指令含义为,将URI中所有的"/“换成”/homepage.std.html" ,且不管其他的匹配项.

RewriteRule是定义重写的规则。

常用标识位
[L]标志导致mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,将不再处理其他规则,即使下面有其他的RewriteRule也不用管。
[R]标志会导致向浏览器发出HTTP重定向,且可以自定义http状态码。RewriteRule ^.$ https://www.baidu.com/? [L,R=302],如果没有自定义默认为302。这上述指令就是直接重定向到百度。
[p]标志是代表的是以apache服务所在的主机位代理服务器去访问其他东西。
例如
RewriteRule ^.
$ “https://127.0.0.1%{REQUEST_URI}” [P,L]。这句指令的意思是将所有访问本机的URI,以本机为代理,重定向到127.0.0.1上。例如本来有一个用户访问了本机的update.php,这时候就会被重定向到127.0.0.1/update.php,ip可以更改,且因为有[L]存在,所以忽略后面所有的重写规则。

RewriteCond标识位

[NC]表示忽略大小写
[OR]如果不满足这个条件则判断下一个条件,如果rewritecond没有带标识为,那么默认为[AND]。
[AND],如果这个条件满足则判断下个条件,如果不满足则跳出判断,去找下一个判断模块。

一个完整的mod_rewrite模块的demo

RewriteEngine On
#开启rewrite引擎

RewriteCond %{REQUEST_METHOD} GET [NC]
#判断请求方式是否是get且忽略大小写

RewriteCond %{REQUEST_URI} ^/…/?$
#同时判断是否有请求内容

RewriteCond %{HTTP_USER_AGENT} “Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08”
#同时判断user_agent头是否是后面那一串

RewriteRule ^.*$ “https://127.0.0.1%{REQUEST_URI}” [P,L]
#如果以上条件都满足则将这个请求重定向到https://127.0.0.1。
第一个完整的判断模块结束。

RewriteCond %{REQUEST_METHOD} ^(GET|POST) [NC]
#判断请求的方式是GET或者POST中任意一个的话(忽略大小写)。

RewriteCond %{REQUEST_URI} ^(/api/516280565959.|/wp06/wp-includes/po.php.|/api/516280565958.|/blog/wp-includes/pomo/src.php.|/modules/mod_search.php.|/include/template/isx.php.|/includes/phpmailer/class.pop3.php.|/wp08/wp-includes/dtcla.php.)$
#判断URI时候是在指定的列表中。

RewriteCond %{HTTP_USER_AGENT} “Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08”
如果user agent头是后面这一串Mozilla什么什么的。

RewriteRule ^.*$ “https://127.0.0.1%{REQUEST_URI}” [P,L]
#将所有访问本机的URI,以本机为代理,重定向到127.0.0.1上。例如本来有一个用户访问了本机的update.php,这时候就会被重定向到127.0.0.1/update.php,ip可以更改,且因为有[L]存在,所以忽略后面所有的重写规则。

RewriteRule ^.*$ https://www.baidu.com/? [L,R=302]
#如果以上条件都不满足,则重定向到百度。

  • tips
    RewriteCond就类似于python中的if,如果所有的RewriteCond都满足了,则会执行这组RewriteCond下的第一条RewriteRule。
    例如
    rewritecond … … #第1个条件
    rewritecond … … #第2个条件
    rewriterule … … #第一个循环介入,如果满足上面两个条件则会执行这个重写语句。
    rewriterule … … #如果上面的条件都不符合,则执行这条rewriterule语句。
    整体逻辑还需要多看多理解。

URL与URI

http:/www.demo.com/update.php是URL。
/update.php是URI。

你可能感兴趣的:(渗透测试基础知识,C2伪装,cobalt,strike相关,安全)