Apache 301跳转实用案例小记

Apache 301跳转实用案例小记

参考文档:

Query String
官方帮助文档:
http://wiki.apache.org/httpd/RewriteQueryString

一.通过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]"

九.禁止爬虫
示例
#Forbiden Robots
RewriteCond %{HTTP_USER_AGENT} (^$|Baiduspider|360Spider|Sougospider|Googlebot|bingbot|Yahoo! Slurp) [NC]
RewriteRule ^(.*)$ - [F]
测试
模拟百度蜘蛛的抓取:
curl -I -A 'Baiduspider' stage.sephora.cn
Apache <wbr>301跳转实用案例小记


ProxyPass
ProxyPass /news/ http://example.com/news/
ProxyPassReverse /news/ http://example.com/news/
原文地址:https://www.cnblogs.com/lixuebin/p/10814345.html