本文共 4596 字,大约阅读时间需要 15 分钟。
apache rewrite 参数和例子
1.Apache mod_rewrite重写规则的标志1) R[=code](force redirect) 重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。 2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。 4) P(force proxy) 强制使用代理转发。 5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。 6) N(next round) 重新从第一条规则开始运行重写过程。 7) C(chained with next rule) 与下一条规则关联,如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。 8) T=MIME-type(force MIME type) 强制MIME类型 9) NS (used only if no internal sub-request) 只用于不是内部子请求 10)NC(no case) 不区分大小写 11)QSA(query string append) 追加请求字符串 12)NE(no URI escaping of output) 不在输出转义特殊字符 例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo 13)PT(pass through to next handler) 传递给下一个处理 例如:RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理Alias /def /ghi 14)S=num(skip next rule(s)) 跳过num条规则 15)E=VAR:VAL(set environment variable) 设置环境变量
2.服务器变量
HTTP headers: connection & request:HTTP_USER_AGENTHTTP_REFERERHTTP_COOKIEHTTP_FORWARDEDHTTP_HOSTHTTP_PROXY_CONNECTIONHTTP_ACCEPTREMOTE_ADDRREMOTE_HOSTREMOTE_USERREMOTE_IDENTREQUEST_METHODSCRIPT_FILENAMEPATH_INFOQUERY_STRINGAUTH_TYPE
server internals: system stuff: specials:
DOCUMENT_ROOTSERVER_ADMINSERVER_NAMESERVER_ADDRSERVER_PORTSERVER_PROTOCOLSERVER_SOFTWARETIME_YEARTIME_MONTIME_DAYTIME_HOURTIME_MINTIME_SECTIME_WDAYTIMEAPI_VERSIONTHE_REQUESTREQUEST_URIREQUEST_FILENAMEIS_SUBREQ 3.举例说明例一.把client请求的主机前缀不是www.owjee.com和70.40.213.183都跳转到主机前缀为http://www.owjee.com,避免相同内容的网页有多个指向的域名如http://owjee.com。
NameVirtualHost 70.40.213.183:80 ServerAdmin DocumentRoot “/web” ServerName kiya.cn RewriteEngine on #打开rewirte功能 RewriteCond %{HTTP_HOST} !^www.owjee.com [NC] #声明Client请求的主机中前缀不是www.owjee.com,其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的主机中前缀不是70.40.213.183,其中 [NC] 的意思是忽略大小写 RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空 RewriteRule ^(.*) http://www.owjee.com [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.owjee.com这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.
例二.将输入en.owjee.com的域名时跳转到http://www.owjee.com
RewriteEngine on RewriteCond %{HTTP_HOST} ^en.owjee.com [NC] RewriteRule ^(.*) http://www.owjee.com[L]
例三.新域名为www.sicasoft.com,这时需要将原来的域名ss.kiya.cn, 以及论坛所在地址ss.kiya.cn/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛URL继续有效而不出现404未找到.
RewriteEngine On RewriteCond %{REQUEST_URI} ^/bbs/ RewriteRule ^bbs/(.*) http://bbs.sicasoft.com/$1 [R=permanent,L] RewriteCond %{REQUEST_URI} !^/bbs/ RewriteRule ^(.*) http://www.sicasoft.com/$1 [R=permanent,L]
例四.同时达到下面两个要求:
1.用http://www.zzz.com/xxx.php 来访问 2.用http://yyy.zzz.com 来访问 的功能RewriteEngine On RewriteCond %{HTTP_HOST} ^www.zzz.com RewriteCond %{REQUEST_URI} !^user.php$ RewriteCond %{REQUEST_URI} .php$ RewriteRule (.*).php$ http://www.zzz.com/$1/ [R] RewriteCond %{HTTP_HOST} !^www.zzz.com RewriteRule ^(.+) %{HTTP_HOST} [C] RewriteRule ^([^.]+).zzz.com http://www.zzz.com/user.php?username=$1
例五.首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如把 .kiya.us和 .kiya.cn全部解析到了IP地址70.40.213.183上。Apache中关于*.kiya.us的虚拟主机的设定。
ServerAdmin DocumentRoot /home/www/www.kiya.us ServerName dns.kiya.us ServerAlias dns.kiya.us kiya.us *.kiya.us CustomLog /var/log/httpd/osa/access_log.log” common ErrorLog /var/log/httpd/osa/error_log.log” AllowOverride None Order deny,allow #AddDefaultCharset GB2312 RewriteEngine on RewriteCond %{HTTP_HOST} ^[^.]+.kiya.(cn|us)$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+).kiya.(cn|us)(.*)$ /home/www/www.kiya.us/sylvan$3?un=$1&%{QUERY_STRING} [L]
例六.Rewrite防盗链正则,不允许这两个网站盗链,其它的网站都可以盗链的规则怎么写.
RewriteEngine On RewriteCond %{HTTP_REFERER} chinaz.com [NC] RewriteCond %{HTTP_REFERER} im286.com [NC] RewriteRule .*\.(jpg|jpeg|gif|png|rar|zip|txt|ace|torrent|gz|swf)$ http://www.xxx.com/fuck.png [R,NC,L]
列七.两个关于判断USER AGENT 例子和自动添加.php扩展名及自动换.html到.php扩展名的例子:
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Opera [NC] RewriteRule ^.* – [F,L] 这里”-”表示没有替换,浏览器为IE和Opera的访客将被禁止访问。 RewriteEngine On RewriteBase /test RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ([^/]+)$ /test/$1.php #for example: /test/admin => /test/admin.php RewriteRule ([^/]+)\.html$ /test/$1.php [L] #for example: /test/admin.html => /test/admin.php 限制目录只能显示图片 < IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$ RewriteRule .*$ – [F,L] < /IfModule>
例八.关于特定文件扩展名的重写。
重写有某些扩展名的文件: RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L] 如果要排除一些扩展名: RewriteRule !\.(js|ico|gif|jpg|JPG|png|PNG|css|pdf|swf)$ index.php
转载于:https://blog.51cto.com/10884109/2315751