Apache 301跳转实用案例小记
参考文档: Query String 官方帮助文档: 一.通过URL参数进行访问控制 如果 http://example.com/page?var=val中的var=val包含字符串foo,则禁止访问。 1.RewriteCond %{QUERY_STRING} foo 2.RewriteRule ^/page - [F] 二.删除URL参数 将URL参数直接从URL中删除。 RewriteRule ^/page /page? 三.增加URL参数 通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:var=val RewriteRule ^/page /page? var=val [QSA]
QSA|qsappend
QSA|qsappend 意思: 字符 'QSA' 或者 字符串 'qsappend' 不怎么好表示. 看例子:
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
如果又标志: [QSA] 那么重写后的URL是: /page.php?page=123 &one=two
如果没有[QSA]标志, 那么结果是: /page.php?page=123 四.重写某些URL参数 当URL参数包含字符串val时,将URL:http://example.com/page1?var=val 重写为:http://example.com/page2?var=val RewriteCond %{QUERY_STRING} val RewriteRule ^/page1 /page2 注意:在这里如果不修改URL参数则不需要[QSA]标志,原来的URL参数是默认附加的。 五.修改URL参数 当访问/path时,将字符串val修改为other_val 。 RewriteCond %{QUERY_STRING} ^(.*)val(.*)$ RewriteRule /path /path? %1other_val %2 上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果 六.将URL参数转换为路径 将URL:http://example.com/path?var=val 转换为:http://example.com/path/var/val RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$ RewriteRule ^/path /path/%1/%2? 注意:上面的转换仅用于单一的var=val参数,且其中只能包含字母、数字和下划线。
七.将路径转换为URL参数 这是上面的转换的反向操作。 这个例子可以转换有效的任意三级路径的URL: http://example.com/path/var/val 将转换为 http://example.com/path?var=val RewriteRule ^/path/([^/]+)/([^/]+) /path?$1=$2 八.URL参数引用 示例1: RewriteCond %{QUERY_STRING} ^static-(\w+)$ #RewriteRule ^/$ http://example.com/bbs/%1.html? [R=301,L] RewriteRule ^/$ /var/www/html/bbs/%1.html? [P,L,NC] 示例2: RewriteCond %{QUERY_STRING} ^(.+)$ RewriteRule ^/(.*)/(\d+)-(\d+)/$ /webapp/wcs/stores/servlet/ProductListCmd?%1 [PT,L] RewriteRule ^/(.*)/(\d+)-(\d+)/$ /webapp/wcs/stores/servlet/ProductListCmd?catalogId=10052&orderBy=18&top_category= $3&categoryId= $2&langId=-7&subCategoryClick= $2&storeId=10001 [PT,L] 示例3: 只要域名不是foo.com,则全部转到 http://foo.com - rewrite:if ( in_header["host"] !~ "^foo.com" && path ~ "^(.*)$" ) goto "http://foo.com/$1 [L,QSA,R=301]" ProxyPass
九.禁止爬虫
示例
#Forbiden Robots
RewriteCond %{HTTP_USER_AGENT} (^$|Baiduspider|360Spider|Sougospider|Googlebot|bingbot|Yahoo!\ Slurp) [NC]
RewriteRule ^(.*)$ - [F]
测试
模拟百度蜘蛛的抓取:
curl -I -A 'Baiduspider' stage.sephora.cn
ProxyPass /news/ http://example.com/news/
ProxyPassReverse /news/ http://example.com/news/