一.web.config 适用iis7以上
实例1:普通重写 实例2:其他重写功能 (1)301重定向 (2)取消目录执行权限 (3)屏蔽来源域名 (4)屏蔽ip地址 (5)过滤静态文件 (6)屏蔽蜘蛛 语法总结 (2) (3)参数 二.htaccess 适用iis6(rewrite3.1)|linux实例1:普通重写 动态地址跳转到静态地址 实例2:其他重写功能 (1)301重定向 (2)取消目录执行权限 (3)屏蔽来源域名 (4)屏蔽ip地址 (5)过滤静态文件 (6)屏蔽蜘蛛 语法总结 (1)RewriteCond条件判断,就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的 (2)处理方式 参数解释: 三.nginx 规则 实例1.普通重写 实例2.其他重写 (1).301重定向 http跳转https 有cdn (3).屏蔽来源域名 防盗链 (4).屏蔽ip地址 前端还有cdn情况 (5).屏蔽蜘蛛 (6).禁止非GET|HEAD|POST方式的抓取 语法总结 (2).处理方式 参数解释 全局变量
.htaccess转换web.config 注意: 1.添加
(1)#判断访问域名:
#禁止访问:
忽略大小写: ignoreCase="true"|ignoreCase="false"
非(不等于): negate="true"
不带?后面的参数: appendQueryString="false"
永久重定向: redirectType="Permanent"
匹配条件为所有还是一条: logicalGrouping="MatchAll"|logicalGrouping="MatchAny" # 用于conditions节点
RewriteRule ^goods-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^goods.php$ /goods-%1.html? [L,R=301]
RewriteCond %{QUERY_STRING} ^id=1$ [NC]
RewriteRule ^category.php$ http://www.yaolongnonwoven.com/? [L,R=301] 加?不带参数,不加带上参数
RewriteCond %{HTTP_HOST} ^xxxx1.com$ [NC]
RewriteCond %{HTTP_HOST} ^xxxx2.com$ [NC]
RewriteRule ^(.*)$ http://www.xxxx1.com/$1 [R=301,L]
RewriteCond % !^$
RewriteRule uploads/(.*).(php)$ – [F]
RewriteRule data/(.*).(php)$ – [F]
RewriteCond %{HTTP_REFERER} www.baidu.com [NC]
RewriteRule ^(.*)$ - [F]
RewriteCond %{http:X-Forwarded-For}&%{REMOTE_ADDR}&%{http:X-Real-IP} (8.8.4.4|8.8.8.) [NC]
RewriteRule (.*) - [F]
RewriteCond %{REQUEST_URI} ^.*(.css|.js|.gif|.png|.jpg|.jpeg|.xml)
RewriteRule ^(.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_USER_AGENT} (baiduspider|googlebot) [NC]
RewriteRule ^(.*)$ - [F]
RewriteRule语句
#判断访问域名: RewriteCond %{HTTP_HOST} ^xxxx.com$ [NC]
#判断user_agent: RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC]
#判断访问来源域名: RewriteCond %{HTTP_REFERER} www.baidu.com [NC]
#判断METHOD: RewriteCond %{REQUEST_METHOD} ^(TRACE|OPTIONS)
#判断url中?后参数: RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
#判断url路径地址: RewriteCond %{REQUEST_URI} ^/bbs
#判断ip(包括代理): RewriteCond %{http:X-Forwarded-For}&%{REMOTE_ADDR}&%{http:X-Real-IP} (8.8.4.4|8.8.8.) [NC]
#判断真实文件: RewriteCond %{REQUEST_FILENAME} !-f
#判断真实目录: RewriteCond %{REQUEST_FILENAME} !-d
#判断header RewriteCond %{HTTP:header}
#判断以上所有情况: RewriteCond $1 !^(bbs|blog)
#其他 RewriteCond % !^$
#禁止访问: RewriteRule (.*) - [F]
#重定向到 RewriteRule ^(.*)$ http://www.xxx.com/404.html [R=301,L]
#重写到 RewriteRule ^goods-([0-9]+)(.*)\.html$ goods\.php\?id=$1 [QSA,L]
#不做操作 RewriteRule ^(.*)$ - [L]
$N 规则后向引用
%N RewriteCond 后向引用
${mapname:key|default}
%{VARNAME} 服务器变量
‘!’ 取非
[C] 与下一个规则联锁
[CO=name:val:domain:lifetime:path] 设置cookie
[F] 强制禁止应答
[G] 强制继续应答
[H=content-handler] 明确的内容处理 (不适用)
[L] 上一个规则标记
[N] 再次应用规则
[NC] 大小写不敏感
[NE] 不转义输出
[NS]非内部子请求
[P]代理通过
[QSA] 追加查询字符串
[R =code] 重定向
[S=num] 跳到下面第n条规则
[T=MIME-type] 强制明确应答 MIME 类型
RewriteCond
[NC] 大小写不敏感
[OR] 逻辑并集
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
server_name test.com www.test.com;
if ($host ~* test.com) {
rewrite ^/(.*)$ http://www.test.com/$1 permanent;
}
普通rewrite ^(.*) https://www.abc.com$1 permanent;
if ( $http_from_https != 'on' ){
rewrite ^(.*) https://www.abc.com$1 permanent;
}
(2). 取消目录执行权限location ~* ^/(uploads|templets|data)/.*.(php|php5)$ {
deny all;
}
location / {
valid_referers www.baidu.com www.360.cn;
if ($invalid_referer){
return 403;
}
}
location ~* \.(gif|jpg|png|webp)$ {
valid_referers none blocked domain.com *.domain.com server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www.domain.com/403.jpg;
}
root /opt/www/image;
}
allow 1.1.1.2;
allow all;
deny all;
deny 1.1.1.2
location ^~ /xxx/xxx/xx/
{
allow 172.0.0.1;
allow xxx.xxx.0.0/8;#表示允许xxx.xxx.0.1 ~ xxx.xxx.255.254
allow xxx.0.0.0/16;#表示允许xxx.0.0.1 ~ xxx.255.255.254
allow xxx.xxx.xxx.x;
deny all;
}
map $http_x_forwarded_for $clientIp {
"" $remote_addr;
~^(?P
if ($http_user_agent ~ "FeedDemon|JikeSpider|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms" )
{
return 403;
}
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
(1)RewriteCond条件判断,就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句#判断访问域名: if ($host ~* test.com)
#判断user_agent: if ($http_user_agent ~* "baiduspider" )
#判断访问来源域名: valid_referers www.baidu.com;if ($invalid_referer){return 403;}
#判断METHOD: if ($request_method !~ ^(GET|HEAD|POST)$)
#判断url中?后参数: if ($request_uri ~* ^/list.php\?([^_]+)(_[0-9]+)$)
#判断url路径地址: if ($uri ~* ^/list.php\?([^_]+)(_[0-9]+)$)
#判断ip: if ($remote_addr ~* "127.0.0.1|127.0.0.2")
#判断真实文件: -e filename
#判断真实目录: -d filename
#禁止访问: return 403; deny all;
#重定向到 rewrite ^/(.*)$ http://www.test.com/$1 permanent;
#重写到 rewrite ^(.*)$ /index.php?s=$1 last;
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query