苗启源
百度空间 | 百度首页 
               
 
文章列表
 
2008-12-12 23:29

TENCENT协议的实现原理-通过自定义协议执行程序.

通过Tencent://Message/可以打开QQ和朋友聊天,一直对他挺好奇?到底是什么原理?
今天,我在网上找了一下TENCENT协议的实现原理,还真找到了;文章请访问:http://hi.baidu.com/kmiaoer/blog/item/799fd388ec403691a5c2723b.html
原来是在注册表中修改的。
知道了原理就好办了,我们也来写一个

定义一个miaoqiyuan协议。实现什么功能的,哦,多了,miaoqiyuan:你好。这样来实现弹出对话框,弹出你好。

Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\miaoqiyuan]
@="miaoqiyuan Protocol"
"URL Protocol"="D:\\miaoqiyuan\\miaoqiyuan.exe"
 
[HKEY_CLASSES_ROOT\Smiaoqiyuan\DefaultIcon]
@="D:\\miaoqiyuan\\miaoqiyuan.exe,0"
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell]
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell\open]
 
[HKEY_CLASSES_ROOT\miaoqiyuan\shell\open\command]
@=\"D:\\miaoqiyuan\\miaoqiyuan.exe\" %1"

这样,通过miaoqiyuan:链接的文件都可以通过miaoqiyuan.exe打开了

下面说说怎样来弹出对话框。

在VB中新建一个标准的EXE程序,新建一个按钮,改名为Showmsg,双击,输入END(点击退出程序)

然后添加

Private Sub Form_Load()
    showmsg.Caption = Replace(Command(), "miaoqiyuan:", "")
End Sub

这样就可以通过输入miaoqiyuan:1234弹出1234的警告了

这样就可用通过一个自定义的协议来执行程序了

 
2008-12-08 20:30

序一:
      自古以来,中国读书人都有出版文集传诸后世的雅兴。可以说个人出书在中国古代很流行,但新中国成立后,国家实行了出版管制,个人出书就增加了很多难度;市场经济后,出版社只出版能快速获取经济利益的书籍,如果想个人出书,恐怕就要动辄几万元的成本费用。
      难道作为一个天天写博客草根,个人出书就没有希望了吗?今天我为大家提供一个个人出书的方法,即使仅一本书,也可是出版,想个人出书的博主也可以来DIY一下在即的书籍,做DIY一本超级个性的书籍,也过一把个人出书瘾。
      感谢超印速。

序二:
      从小我就有很多和别人不同的想法,曾经幻想过自己出三本书。一本科幻的《源知传》、一本《毕业》、令一本书名忘了,上了大学之后选择了网络专业,业余时间全用在研究WEB程序上,慢慢的出书的幻想就淡忘了,现在想想自己当时是多么幼稚。
      我一直坚信有外星人,上高中的时候痴迷于外星人的故事,以至于有很多人嘲笑说我是“外星人”。在上边我提过一本《源知传》,其内容还与外星人相关。该书解释了中国传统的神话故事全部与外星人有关。当时思路很清晰,可能由于我的懒惰,一直没有动笔,或许一出还能轰动中国呢。秦始皇时代所说的不死药实际是外星人研究的基因药品,仙人实际就是外星人,仙人会飞是因为他们乘坐的是UFO。

序三:
      学习WEB编程后,少儿时的作家梦慢慢淡忘了,今天看到超印速能提够博客出书的服务,少儿时的出书的梦想恐怕不能实现了,因为离现在太远太远了。
      博客出书,在百度的博客上有很多我在校期间的原创作品及编程新的,将新博客(miaoqiyuan.cn)中的几篇文章转抄过来记凑成一本书吧。明年就要结婚了,再不出书可能就没有机会了。
     有机会,我还要出书。

 
2008-12-08 20:10

数据库 仅有一menu表
menu_id 菜单ID
menu_title 菜单显示的名称
menu_url 连接的目的地址
menu_par 父项ID

用ASP+MDB实现动态生成,LI+CSS实现弹出动态效果,JS使用myw3sys.js框架
程序测试下载地址:http://www.miaoqiyuan.cn/products/asp_css_li.rar
太晚了,就不截图了,下面是程序的核心代码。

ASP

< %
function menu_adds(rs,ji,par,max,subme)
 submenu=subme+1
 response.write ji&"
<ul>"+chr(10)
 do while not rs.eof
  set demo=Conn.execute("select * from menu where menu_par="&amp;rs("menu_id"))
  if not demo.eof and submenu<span><a href="about:blank">"&amp;rs("menu_title")&amp;"</a></span>"+chr(10)
   call menu_adds(demo,ji&amp;" ",rs("menu_id"),max,submenu)
  else
   response.write ji&amp;"
 <li><span><a href="about:blank">"&amp;rs("menu_title")&amp;"</a></span>"+chr(10)
  end if
  response.write ji&amp;" 
 
"+chr(10)
  rs.movenext
 loop
 response.write ji&amp;""+chr(10)
end function
 
'用法 menu_add(父ID,最大几级,所处级别)
sub menu_add(par,max,submenu)
 set rs=Conn.execute("select * from menu where menu_par="&amp;par)
 call menu_adds(rs," ",par,max,submenu)
end sub
 
'列出所有级别菜单
sub menuall()
 call menu_add(0,9999,0)
end sub
 
'列出一级菜单
sub menu1()
 call menu_add(0,1,0)
end sub
 
'列出二级菜单
sub menu2()
 call menu_add(0,2,0)
end sub
 
'列出编号为2的菜单下的子菜单,只显示一级
sub menu02_1()
 call menu_add(2,1,0)
end sub
%&gt;</li>
</ul>

CSS

body{margin:0px;background:#666}
ul{list-style:none;margin:0px;padding:0px;}
 
/*弹出CSS菜单*/
#Menu_0 ul.show{display:block;border-bottom:#333 solid 2px;border-right:#333 solid 2px;}
 
/*一级菜单*/
#Menu_0 li{float:left;}
#Menu_0 a{background:#AAA;width:180px;height:40px;text-decoration:none;text-align:center;line-height:40px;color:#000;display:block;}
#Menu_0 a:hover{background:#CCC;}
 
/*二级菜单*/
#Menu_0 ul{display:none;position:absolute;z-index:1;}
#Menu_0 ul li{float:none;}
#Menu_0 ul li a{background:#BBB;}
 
/*三级菜单*/
#Menu_0 ul ul{float:left;display:none;position:absolute;z-index:20;}
#Menu_0 ul ul li a{background:#999;}

Javascript

/*使用myw3sys.js框架 http://labs.myw3sys.cn/js/myw3sys */
function Menu_Create(){
 var oMenu=_Get("li","tagname");
 for(i=0;i
 
 
2008-12-08 20:10

站长,做站的最主要目的就是赚钱,像玩博客,玩空间那些了,只是广义上的。站长只能喝西北风了。有一个好站长。网站是站长的饭碗,所以百度成了很多站长的老板。一不小心,就炒你鱿鱼的网站,接下来就是赚钱了。一般现在的站长都是挂广告赚钱的,大的有,GG,百度,阿里妈妈。但是还有很多站长的生存是靠小广告联盟赚钱的,像麒润(扣量重,不推荐),易特,还有很多这类型的广告联盟。当然,更多的垃圾站站长是靠交换链来生存的。交换链,起初是以交换为主的一种联盟。你点给他1个IP,他还你一个IP。这是交换链的基本模式,其实,交换链还有一种最重要的模式,那就是累计点击,用以来换取佣金。他们的图片或者广告词一般都诱惑十足,点击比较高。(当然,这是相对于阿里妈妈那样的联盟)。推荐电影站,图片站,感觉网站有点色的站点都可以挂交换链的广告。交换链的优点就是:佣金是周付的。一个礼拜满100就付款,工行或者支付宝付钱,不像GG那样,收个钱都要半年。另一个优点就是规则没那么严,很多站长做GG很长时间才满100美元,可惜无情的GG却说你作弊,那时候真是欲哭无泪,交换链即时说你作弊,封了你的ID,跟客服说下,基本就没事了。大不了再注册个ID。

3、就是单价,即1000点击所能兑换的人民币,7C扣税之后是21块多,779 18块,28也是18块,八方15块^_^。(单价要跟扣量相结合,大家别以为单价高就好,目前本人觉得28交换链这个比例不错,所以也是我一直做的原因)
4、联盟的信誉很重要,不然辛苦了半死,联盟跑了,站长只好欲哭无泪了。所以选要选个大联盟。口碑好的,发钱及时的。

5、客服也很重要,建议站长找MM客服^_^

综上所述,个人建议站长选择交换链可以选择28链(28lian.com),个人感觉信誉不错,发钱及时,扣量还是能接受。就是规则太严了点。嘿嘿。你不作弊就没事啦

PS:如果有人认为我是枪手的话,欢迎来砸鸡蛋,本人QQ:119382832。落伍ID:尐傑(万贴俱乐部预备会员)。

下面说说如何选择交换链:

1、一般交换链扣量都比较严重,所以,这个时候你需要根据口碑来选择了,还有最卑鄙的就是在代码上挂马(目前只有733联盟这么无耻)。本人做过很多,七夕,779,28link,还有一堆没拿到钱的交换链,目前本人一直做的是28链,因为这个交换链刚刚成立不是很长时间,所以扣量基本可以忽略,最多一个礼拜有2000来块钱吧,发钱也及时。管理层自己也有做网站,日IP几十万吧,交换链只是他们的一个获取IP的方式。所以不存在欺骗或者携款而逃的可能。

2、交换链最重要的就是图片显示速度要快,这样不会拖累网站的速度,还能获得更多的点击,28链,7C跟779的图片显示速度算比较快的,八方据说3台百独服务器,但是图片显示的速度真不敢说,经常送我一个大大的红X。

 
2008-12-08 20:09

首先附上的时阿捷站上的CSSHack图

CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点。

常见兼容问题:

1.DOCTYPE 影响 CSS 处理

2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行

3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中

4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width

5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式

6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了缺点是要控制内容不要换行

7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以

8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:

div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;

10.IE5 和IE6的BOX解释不一致
IE5下
div{width:300px;margin:0 10px 0 10px;}
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)

11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义
ul{margin:0;padding:0;}
就能解决大部分问题

注意事项:

1、float的div一定要闭合。

例如:(其中floatA、floatB的属性已经设置为float:left;)

<#div id=”floatA” ></#div>
<#div id=”floatB” ></#div>
<#div id=”NOTfloatC” ></#div>
这里的NOTfloatC并不希望继续平移,而是希望往下排。
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。

<#div class=”floatB”></#div>
<#div class=”NOTfloatC”></#div>
之间加上

<#div class=”clear”></#div>
这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
并且将clear这种样式定义为为如下即可:

.clear{
clear:both;}
此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
例如某一个wrapper如下定义:

.colwrapper{
overflow:hidden;
zoom:1;
margin:5px auto;}

2、margin加倍的问题。

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
解决方案是在这个div里面加上display:inline;
例如:
<#div id=”imfloat”></#div>
相应的css为
#IamFloat{
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/}

3、关于容器的包涵关系

很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。

4、关于高度的问题

如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)

5、最狠的手段 - !important;

如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略.如下

.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

[2008年9月16日新增]屏蔽IE浏览器(也就是IE下不显示)
*:lang(zh) select {font:12px !important;} /*FF,OP可见,特别提醒:由于Opera最近的升级,目前此句只为FF所识别*/
select:empty {font:12px !important;} /*safari可见*/
这里select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。

仅IE7与IE5.0可以识别
*+html select {…}
当面临需要只针对IE7与IE5.0做样式的时候就可以采用这个HACK。

仅IE7可以识别
*+html select {…!important;}
当面临需要只针对IE7做样式的时候就可以采用这个HACK。

IE6及IE6以下识别
* html select {…}
这个地方要特别注意很多博客都写成了是IE6的HACK其实IE5.x同样可以识别这个HACK。其它浏览器不识别。
html/**/ >body select {…}
这句与上一句的作用相同。

仅IE6不识别,屏蔽IE6
select { display /*屏蔽IE6*/:none;}
这里主要是通过CSS注释分开一个属性与值,注释在冒号前。

仅IE6与IE5不识别,屏蔽IE6与IE5
select/**/ { display /*IE6,IE5不识别*/:none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。不屏蔽IE5.5

仅IE5不识别,屏蔽IE5
select/*IE5不识别*/ {…}
这一句是在上一句中去掉了属性区的注释。只有IE5不识别,IE5.5可以识别。

盒模型解决方法
selct {width:IE5.x宽度; voice-family :”\”}\”"; voice-family:inherit; width:正确宽度;}
盒模型的清除方法不是通过!important来处理的。这点要明确。

清除浮动
select:after {content:”.”; display:block; height:0; clear:both; visibility:hidden;}
在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级做一次定义,那么就可以解决这个问题。

截字省略号
select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-space:nowrap; overflow:hidden; }
这个是在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,很好的一个技术。只是目前Firefox并不支持。

只有Opera识别
@media all and (min-width: 0px){ select {……} }
针对Opera浏览器做单独的设定。
以上都是写CSS中的一些HACK,这些都是用来解决局部的兼容性问题,如果希望把兼容性的内容也分离出来,不妨试一下下面的几种过滤器。这些过滤器有的是写在CSS中通过过滤器导入特别的样式,也有的是写在HTML中的通过条件来链接或是导入需要的补丁样式。

IE5.x的过滤器,只有IE5.x可见
@media tty {
i{content:”\”;/*” “*/}} @import ‘ie5win.css’; /*”;}
}/* */

IE5/MAC的过滤器,一般用不着
/*\*//*/
@import “ie5mac.css”;
/**/

IE的if条件Hack
Only IE < ![endif]-->
所有的IE可识别

 
2008-12-08 20:09

属性 描述
activeElement 获取当父 document 拥有焦点时获得焦点的对象。
alinkColor 设置或获取元素中所有激活链接的颜色。
bgColor 不赞成。设置或获取表明对象后面的背景颜色的值。
charset 设置或获取用于解码对象的字符集。
cookie 设置或获取 cookie 的字符串值。
defaultCharset 从当前的区域语言中获取默认字符集。
designMode 设置或获取表明文档是否可被编辑的值。
dir 设置或获取表明对象的阅读顺序的值。
doctype 获取与当前文档关联的文档类型声明。
documentElement 获取对文档根结点的引用。
domain 设置或获取文档的安全域名。
expando 设置或获取表明是否可对象内创建任意变量的值。
fgColor 设置或获取文档的前景(文本)颜色。
fileCreatedDate 获取文件创建的日期。
fileModifiedDate 获取文件上次修改的日期。
fileSize 获取文件大小。
implementation 获取当前文档的 implementation 对象。
lastModified 获取页面上次修改的日期,若页面提供的话。
linkColor 设置或获取对象文档链接的颜色。
parentWindow 获取容器对象所在窗口的引用。
protocol 设置或获取 URL 的协议部分。
readyState 获取表明对象当前状态的值。
referrer 获取将用户引入当前页面的位置 URL。
uniqueID 获取为对象自动生成的唯一标识符。
URL 设置或获取当前文档的 URL。
URLUnencoded 获取文档的 URL,去除所有字符编码。
vlinkColor 设置或获取用户已访问过的链接颜色。
XMLDocument 获取对由对象引出的的 XML 文档对象模型(DOM)的引用。
XSLDocument 获取对 XSL 文档的顶层结点的引用。

属性

集合

集合 描述
all 返回对象所包含的元素集合的引用。
anchors 获取所有带有 name 和/或 id 属性的 a 对象的集合。此集合中的对象以 HTML 源顺序排列。
applets 获取文档中所有 applet 对象的集合。
childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合。
embeds 获取文档中所有 embed 对象的集合。
forms 获取以源顺序排列的文档中所有 form 对象的集合。
frames 获取给定文档定义或与给定窗口关联的文档定义的所有 window 对象的集合。
images 获取以源顺序排列的文档中所有 img 对象的集合。
links 获取文档中所有指定了 HREF 属性的 a 对象和所有 area 对象的集合。
namespaces 获取 namespace 对象的集合。
scripts 获取文档中所有 script 对象的集合。
styleSheets 获取代表与文档中每个 link 或 style 对象的实例相对应的样式表的 styleSheet 对象的集合。

事件

事件 描述
onactivate 当对象设置为活动元素时触发。
onbeforeactivate 对象要被设置为当前元素前立即触发。
onbeforecut 当选中区从文档中删除之前在源对象触发。
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即触发。
onbeforeeditfocus 在包含于可编辑元素内的对象进入用户界面激活状态前或可编辑容器变成控件选中区前触发。
onbeforepaste 在选中区从系统剪贴板粘贴到文档前在目标对象上触发。
onclick 在用户用鼠标左键单击对象时触发。
oncontextmenu 在用户使用鼠标右键单击客户区打开上下文菜单时触发。
oncontrolselect 当用户将要对该对象制作一个控件选中区时触发。
oncut 当对象或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。
ondblclick 当用户双击对象时触发。
ondeactivate 当 activeElement 从当前对象变为父文档其它对象时触发。
ondrag 当进行拖曳操作时在源对象上持续触发。
ondragend 当用户在拖曳操作结束后释放鼠标时在源对象上触发。
ondragenter 当用户拖曳对象到一个合法拖曳目标时在目标元素上触发。
ondragleave 当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。
ondragover 当用户拖曳对象划过合法拖曳目标时持续在目标元素上触发。
ondragstart 当用户开始拖曳文本选中区或选中对象时在源对象上触发。
ondrop 当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。
onfocusin 当元素将要被设置为焦点之前触发。
onfocusout 在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。
onhelp 当用户在浏览器为当前窗口时按 F1 键时触发。
onkeydown 当用户按下键盘按键时触发。
onkeypress 当用户按下字面键时触发。
onkeyup 当用户释放键盘按键时触发。
onmousedown 当用户用任何鼠标按钮单击对象时触发。
onmousemove 当用户将鼠标划过对象时触发。
onmouseout 当用户将鼠标指针移出对象边界时触发。
onmouseover 当用户将鼠标指针移动到对象内时触发。
onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。
onmousewheel 当鼠标滚轮按钮旋转时触发。
onmove 当对象移动时触发。
onmoveend 当对象停止移动时触发。
onmovestart 当对象开始移动时触发。
onpaste 当用户粘贴数据以便从系统剪贴板向文档传送数据时在目标对象上触发。
onpropertychange 当在对象上发生对象上发生属性更改时触发。
onreadystatechange 当对象状态变更时触发。
onresizeend 当用户更改完控件选中区中对象的尺寸时触发。
onresizestart 当用户开始更改控件选中区中对象的尺寸时触发。
onselectionchange 当文档的选中状态改变时触发。
onstop 当用户单击停止按钮或离开 Web 页面时触发。

方法

方法 描述
attachEvent 将指定函数绑定到事件,以便每当该事件在对象上触发时都调用该函数。
clear 目前尚未支持。
close 关闭输出流并强制将数据发送到显示。
createAttribute 以指定名称创建 attribute 对象。
createComment 以指定数据创建 comment 对象。
createDocumentFragment 创建一个新文档。
createElement 为指定标签创建一个元素的实例。
createEventObject 生成当使用 fireEvent 方法时用于传递事件相关信息的 event 对象。
createStyleSheet 为文档创建样式表。
createTextNode 从指定值中创建文本字符串。
detachEvent 从事件中取消指定函数的绑定,这样当事件触发时函数就不会收到通知了。
elementFromPoint 返回指定 x 和 y 坐标的元素。
execCommand 在当前文档、当前选中区或给定范围上执行命令。
focus 使得元素得到焦点并执行由 onfocus 事件指定的代码。
getElementById 获取对 ID 标签属性为指定值的第一个对象的引用。
getElementsByName 根据 NAME 标签属性的值获取对象的集合。
getElementsByTagName 获取基于指定元素名称的对象集合。
hasFocus 获取表明对象目前是否拥有焦点的值。
mergeAttributes 复制所有读/写标签属性到指定元素。
open 此方法以两种方式工作。该方法打开一个文档用于收集 write 和 writeln 方法的输出。在这种情况下,只使用前两个参数 url 和
name。若指定了附加参数,此方法将打开一个窗口,这与 window 对象的 window.open 方法相同。
queryCommandEnabled 返回表明指定命令是否可于给定文档当前状态下使用 execCommand 命令成功执行的 Boolean 值。

queryCommandIndeterm 返回表明指定命令是否处于模糊状态的 Boolean 值。
queryCommandState 返回表明命令当前状态的 Boolean 值。
queryCommandSupported 返回表明当前命令是否在当前区域上支持的 Boolean 值。
queryCommandValue 返回文档、范围或当前选中区对于给定命令的当前值。
recalc 重新计算当前文档中的全部动态属性。
releaseCapture 释放当前文档中对象的鼠标捕捉。
setActive 设置对象为当前对象而不将对象置为焦点。
write 在指定窗口的文档中写入一个或多个 HTML 表达式。
writeln 在指定窗口的文档中写入一个或多个 HTML 表达式,后面追加一个换行符。

对象

元素 对象 描述
BODY body 指定文档主体的开始和结束。
implementation 包含了关于对象支持的模块信息。
location 包含关于当前 URL 的信息。
selection 代表了当前激活选中区,即高亮文本块,和/或文当中用户可执行某些操作的其它元素。
TITLE title 包含文档的标题。

样式

样式属性 描述
compatMode 设置或获取表明此对象是否应用标准兼容模式的值。

注释

此对象在 Microsoft&reg; Internet Explorer 3.0 的脚本中可用。

使用 document 对象可以对 HTML 文档进行检查、修改或添加内容,并处理该文档内部的事件。在 Web 页面上,document 对象可通过
window 对象的 document 属性引用,或者直接引用。

document 对象在主文档的任意时间均可用,但是对于目前正在轻便动态 HTML(DHTML) 行为中使用的 HTML
组件(HTC)来说却不可用。这是因为轻便的行为仅当在 HTC 文件中不使用 document
对象时才可被定义。结果将使得轻便的行为比常规行为运行更加快速和有效率。但是,轻便的 DHTML 行为可以与常规的 DHTML
行为一样的方法访问主文档的 document 对象。

ondocumentready 事件将通知 DHTML 行为包含该行为的主 Web 页面的 document 对象可用。只要
ondocumentready 被触发,行为就可以开始处理主 document 属性。

行为中的脚本可以在 HTC 或主文档中引用 document 对象。如果要在 HTC 文件中编码脚本,应使用 element.document
来引用主文档的 document 对象。

示例

下面的例子使用了 document 对象检查文档标题并在消息框中显示该标题(如果非空)。

if (document.title!=”")
alert(”标题为 ” + document.title)

下面的例子演示了在浏览器的状态栏上显示鼠标当前位置的事件句柄函数,所得位置相对于文档的左上角。

显示示例

<HTML>
<HEAD><TITLE>报告鼠标移动</TITLE>
<SCRIPT LANGUAGE=”JScript”>
function reportMove()
{
window.status = “X=” + window.event.x + ” Y=” + window.event.y;
}
</SCRIPT>
<BODY onmousemove=”reportMove()”>
<H1>欢迎!</H1>
</BODY>
</HTML>

标准信息

没有应用于此对象的公共标准。

应用到

[ 对象名称 ]
平台 版本
Win32:
Unix:
Win16:
WinCE:
Mac:
版本数据当鼠标指向链接或链接获得焦点时在此列出。
CUSTOM, window
将鼠标光标移动到应用到清单中的元素即可显示关于列出平台的可用信息。

 
2008-12-08 20:08

.htaccess文件使用教程

1.1 什么是.htaccess文件从本指南中,你将可以学习到有关.htaccess文件及其功能的知识,并用以优化你的网站。尽管.htaccess 只是一个文件,但它可以更改服务器的设置,允许你做许多不同的事情,最流行的功能是您可以创建自定义的“404 error”页面。.htaccess 并不难于使用,归根结底,它只是在一个text文档中添加几条简单的指令而已。

首先你要判断主机支持它

这可能很难用简单的答案来回答。许多主机支持.htaccess,但实际上并不会特别声明,许多其他类型的主机有能力 但并不允许他们的用户使用. htaccess。一般来说,如果你的主机使用Unix或Linux系统,或任何版本的Apache网络服务器,从理论上都是支持.htaccess的, 尽管你的主机服务商可能不允许你使用它。

判断你的主机是否允许.htaccess,一个标志很好的是它是否支持文件夹密码保护。为达到此功能,主机服务商需要 使用.htaccess(当然,少数情况下他们虽提供密码保护功能,但却并不允许你使用.htaccess)。如果你不确定自己的主机是否支持. htaccess,最好的办法是上传你自己的.htaccess文件看看是否有用,或者直接发送e-mail向你的主机服务商咨询。

Apache系统中的.htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法,即,在一个特定 的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的 AllowOverride指令来设置。

子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

.htaccess必须以ASCII模式上传,最好将其权限设置为644。

.htaccess可以做大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件。

1.2 如何创建.httaccess文件创建.htaccess文件也许会给你带来一些困难。写文件很容易,你只需要在文字编缉器(例如:写字板)里写下适当 的代码。真正困难的可能是文件的保存,因为.htaccess是一个古怪的文件名(它事实上没有文件名,只有一个由8个字母组成的扩展名),而在一些系统 (如windows 3.1)中无法接受这样的文件名。在大多数的操作系统中,你需要做的是将文档保存成名为:“.htaccess” (包括引号)。如果这也不行,你需要将其先命名为其它名字(例如htaccess.txt),再将其上传到服务器上,之后直接使用FTP软件来重命名。

警告

在使用.htaccess之前,我必须给你一些警告。虽然在服务器上使用.htaccess绝对不太可能给你带来任何 麻烦(如果有些东西错了,它只是没效用罢了),但如果你使用Microsoft FrontPage Extensions,就必须特别小心。因为FrontPage Extensions本身使用了.htaccess,因此你不能编辑它并加入你自己的信息。如果确实有这方面的需要(并不推荐,但是可能),你应该先从服 务器上下载.htaccess文档(如果存在),之后在前面加上你的代码。

2|.httacces文件的配置

2.1.配置.htaccess 自定义错误页
我要介绍的.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自己的、个性化的错误页面(例如找不到 文件时),而不是你的服务商提供的错误页或没有任何页面。这会让你的网站在出错的时候看上去更专业。你还可以利用脚本程序在发生错误的时候通知你(例如我 使用Free Webmaster Help的PHP脚本程序,当找不到页面的时候自动e-mail给我)。

你所知道的任何页面错误代码(像404找不到页面),都可以通过在.htaccess文件里加入下面的文字将其变成自定义页面:

ErrorDocument errornumber /file.html

举例来说,如果我的根目录下有一个nofound.html文件,我想使用它作为404 error的页面:

ErrorDocument 404 /notfound.html

如果文件不在网站的根目录下,你只需要把路径设置为:ErrorDocument 500 /errorpages/500.html

以下是一些最常用的错误:

常用的客户端请求错误返回代码:

400 - Bad request 错误请求
401 Authorization Required需要验证
403 Forbidden禁止
404 Not Found找不到页面
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type

常见的服务器错误返回代码:

500 Internal Server Error内部服务器错误

接下来,你要做的只是创建一个错误发生时显示的文件,然后把它们和.htaccess一起上传。

用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html

一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument 错误代码 /目录名/文件名.扩展名

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument 401 “你没有权限访问该页面,请放弃!”

2.2.配置.htaccess 停示显示目录列表
有些时候,由于某种原因,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。

为避免这种情况(而不必创建一堆的新index文件),你可以在你的.htaccess文档中键入以下命令,用以阻止目录列表的显示: Options -Indexes

2.3.配置.htaccess 阻止/允许特定的IP地址某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站(例如:只允许使用特定ISP的用户进入某个目录), 或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使 用动态IP地址,所以这并不是限制使用的常用方法。

你可以使用以下命令封禁一个IP地址:

deny from 000.000.000.000

这里的000.000.000.000是被封禁的IP地址,如果你只指明了其中的几个,则可以封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的所有IP地址。

你可以使用以下命令允许一个IP地址访问网站:

allow from 000.000.000.000

被允许的IP地址则为000.000.000.000,你可以象封禁IP地址一样封禁整个网段。

如果你想阻止所有人访问该目录,则可以使用:

deny from all

不过这并不影响脚本程序使用这个目录下的文档。

2.4.配置.htaccess 替换index文件
改变缺省的首页文件

一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在w3sky中是 w3sky.PHP。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:

DirectoryIndex 新的缺省文件名

也可以列出多个,顺序表明它们之间的优先级别,例如:

DirectoryIndex filename.html index.cgi index.pl default.htm

也许你不想一直使用index.htm或index.html作为目录的索引文件。举例来说,如果你的站点使用PHP 文件,你可能会想使用 index.PHP来作为该目录的索引文档。当然也不必局限于“index”文档,如果你愿意,使用.htaccess你甚至能够设置 foofoo.balh来作为你的索引文档这些互为替换的索引文件可以排成一个列表,服务器会从左至右进行寻找,检查哪个文档在真实的目录中存在。如果一个也找不到,它将会把目录列表显示出来(除非你已经关闭了显示目录文件列表)。

DirectoryIndex index.PHP index.PHP3 messagebrd.pl index.html index.htm

2.5.配置.htaccess 重定向页面
.htaccess最有用的功能之一就是将请求重定向到同站内或站外的不同文档。这在你改变了一个文件名称,但仍然想 让用户用旧地址访问到它时,变的极为有用。另一个应用(我发现的很有用的)是重定向到一个长URL,例如在我的时事通讯中,我可以使用一个很简短的URL 来指向我的会员链接。以下是一个重定向文件的例子:

Redirect /location/from/root/file.ext
http://www.w3sky.com/new/file/123.html

上述例子中,访问在root目录下的名为oldfile.html可以键入:

/oldfile.html

访问一个旧次级目录中的文件可以键入:

/old/oldfile.html

你也可以使用.htaccess重定向整个网站的目录。假如你的网站上有一个名为olddirectory的目录,并且你已经在一个新网站 http://www.w3sky.com/newdirectory/上建立了与上相同的文档,你可以将旧目录下所有的文件做一次重定向而不必一一声明:

Redirect /olddirectory http://www.w3sky.com/newdirectory

这样,任何指向到站点中/olddirectory目录的请求都将被重新指向新的站点,包括附加的额外URL信息。如果正确使用,此功能将极其强大。

我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:

Redirect /旧目录/旧文档名 新文档的地址

或者整个目录的转向:

Redirect 旧目录 新目录

3.1.密码保护的.htaccess文件尽管有各种各样的.htaccess用法,但至今最流行的也可能是最有用的做法是将其用于网站目录可靠的密码保护。尽管JavaScrip等也能做到,但只有.htaccess具有完美的安全性(即访问者必须知晓密码才可以访问目录,并且绝无“后门”可走)。

利用.htaccess将一个目录加上密码保护分两个步骤。第一步是在你的.htaccess文档里加上适当的几行代码,再将.htaccess文档放进你要保护的目录下:

AuthName “Section Name”
AuthType Basic
AuthUserFile /full/path/to/.htpasswd
Require valid-user

你可能需要根据你的网站情况修改一下上述内容中的一些部分,如用被保护部分的名字”Members Area”,替换掉“Section Name”。

/full/parth/to/.htpasswd则应该替换为指向.htpasswd文件(后面详述该文档)的完整服务器路径。如果你不知道你网站空间的完整路径,请询问一下你的系统管理员。

3.2.密码保护的.htpasswd文件
目录的密码保护比.htaccess的其他功能要麻烦些,因为你必须同时创建一个包含用户名和密码的文档,用于访问你 的网站,相关信息(默认)位于一个名为.htpasswd的文档里。像.htaccess一样,.htpasswd也是一个没有文件名且具有8位扩展名的 文档,可以放置在你网站里的任何地方(此时密码应加密),但建议你将其保存在网站Web根目录外,这样通过网络就无法访问到它了。

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess 也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

order allow,deny
deny from all

3.3.配置 .htaccess 输入用户名和密码
要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

forge:y4E7Ec8e7EwV

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile .htpasswd的服务器目录
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)

require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

注,括号部分为学习时候自己添加的注释

拒绝来自某个IP的访问

如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255

想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。

创建好.htpasswd文档后(可以通过文字编辑器创建),下一步是输入用于访问网站的用户名和密码,应为:

username:password

“password”的位置应该是加密过的密码。你可以通过几种方法来得到加密过的密码:一是使用一个网上提供的 permade脚本或自己写一个;另一个很不错的username/password加密服务是通过KxS网站,这里允许你输入用户名及密码,然后生成正 确格式的密码。

对于多用户,你只需要在.htpasswd文档中新增同样格式的一行即可。另外还有一些免费的脚本程序可以方便地管理.htpasswd文档,可以自动新增/移除用户等。

3.4.配置.htaccess 直接访问加密网站
当你试图访问被.htaccess密码保护的目录时,你的浏览器会弹出标准的username/password对话 窗口。如果你不喜欢这种方式,有些脚本程序可以允许你在页面内嵌入username/password输入框来进行认证,你也可以在浏览器的URL框内以 以下方式输入用户名和密码(未加密的):
http://username:password@www.w3sky.com/directory/

3.5.利用 .htaccess 防止盗链
如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

所需要的指令如下:

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
RewriteRule .(gif &line;jpg)$ - [F]

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC]
RewriteRule .(gif &line;jpg)$ http://www.w3sky.com/替代图片文件名 [R,L]

3.6.利用 .htaccess进行地址转向
这种方法,就是把yourdomain.com的流量全部301转向到www.yourdomain.com(或者反过来)。其实对于这种方法,国外有人认为对PageRank没有帮助。我觉得是因为他们看到Google管理员工具中有一个首选域工具,可以指定Google的爬虫把 www.yourdomain.com或者yourdomain.com作为抓取和排名的首选域,转向似乎就没有必要了。但确实又有不少人证实这是有效的,反正目前还没有人说这种方法会对SEO或者pagerank有什么损害。

在.htaccess中写入:

Options +FollowSymlinks All -Indexes
rewriteEngine on
rewriteBase /
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

3.7.利用 .htaccess对域名中“www”的控制
强制去除3w

下面以 Wordpress 为例,其它的情况,可以自己参照解决。在你的 Wordpress 目录下通常会有一个 .htaccess 文件,如果没有,那就手动建立一个。如果你设定了 permalink 的话,.htaccess 里面的内容会有如下一坨:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
具体是啥意思咱就甭管它了,只管在 RewriteBase / 这行下面加上:

RewriteCond %{HTTP_HOST} ^www.yourdomain.tld$ [NC]
RewriteRule ^(.*)$ http://yourdomain.tld/$1 [R=301,L]

这样就大功告成了。当然要把 yourdomain.tld 换成你自己的域名。上面两行的意思是把 www.yourdomain.tld 这种形式改写成 yourdomain.tld, 并把访问前者的所有链接永久转向到后者。

域名前强制加上www

如果你实在是坚持要把 www 加在前面,我上面的算是白写了,表示遗憾。但,你可以。只需把上面添加的两行代码改成这样:

RewriteCond %{HTTP_HOST} ^yourdomain.tld$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.tld/$1 [R=301,L]

4.1. .htaccess 总结
.htaccess是一个站点管理员可以应用的强大工具,有更多的变化以适应不同的用途,可以节约时间及提高网站的安全性

.htaccess的特别说明

* 启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用
* 如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:

AccessFileName .config

* 一般情况下,不应该使用. htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户 认证写在主配置文件中是完全可行的,而且是一种很好的方法。.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有 root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了 多个用户站点,而又希望用户可以自己改变配置的情况下。虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。避免使用.htaccess文件有两个主要原因,即性能和安 全。

在线 .htaccess文件生成器http://cooletips.de/htaccess/
能够在线生成. htaccess文件,很简单的就配置重定向,系统错误文件等。
敢想敢做敢坚持

.htaccess文件提供了针对每个目录改变配置的方法。
top
.htaccess文件*
相关模块相关指令

*core
*mod_authn_file
*mod_authz_groupfile
*mod_cgi
*mod_include
*mod_mime

*AccessFileName
*AllowOverride
*Options
*AddHandler
*SetHandler
*AuthType
*AuthName
*AuthUserFile
*AuthGroupFile
*Require

top
工作原理和使用方法*

.htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

说明:如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:

AccessFileName.config

允许放在这些文件中的指令取决于AllowOverride指令,此指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许放在.htaccess文件中,则,在本手册的说明中,此指令会有一个覆盖段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。

例如,本手册对AddDefaultCharset指令的说明表明了,此指令可以用于.htaccess文件(见Context一行),而Override一行是”FileInfo”,那么为使.htaccess中的此指令有效,则至少要设置”AllowOverrideFileInfo”。

例子:
Context:serverconfig,virtualhost,directory,.htaccess
Override:FileInfo

如果不能确定一个特定的指令是否允许用于.htaccess文件,可以查阅手册中对指令的说明,看在Context(“上下文”)行中是否有”.htaccess.”。

使用.htaccess文件的场合

一般情况下,不应该使用.htaccess文件,除非你对主服务器配置文件没有存取权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,但并不是这样,把用户认证写在主服务器配置中是完全可行的,而且是一种很好的方法。

在内容提供者需要针对目录改变服务器的配置而对服务器系统没有root权限时,则应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一个机器上宿主多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主服务器的&lt;Directory&gt;段中,而且更高效。

避免使用.htaccess文件有两个主要原因。

首先是性能。如果AllowOverride允许使用.htaccess文件,则,Apache需要在每个目录中查找.htaccess因此,无论是否真正用到,允许使用.htaccess文件都会导致性能的下降。另外,每次请求一个页面时,都需要读取.htaccess文件。

还有,Apache必须在所有更高级的目录中查找.htaccess文件,使所有有效的指令都起作用(参见howdirectivesareapplied.),所以,如果有对/www/htdocs/example中页面的请求,Apache必须查找以下文件:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

而且,对此目录以外的每个文件访问,还有4个附加的文件系统访问,即使这些文件都不存在。(注意,这可能仅仅发生在/允许使用.htaccess文件的情况下,虽然这种情况并不多。)

其次是安全。如此,会允许用户修改服务器的配置,可能会导致未加限制的修改,请认真考虑是否给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后许多麻烦。

注意,在/www/htdocs/example目录下.htaccess文件中放置指令,与,在主服务器配置文件中&lt;Directory/www/htdocs/example&gt;段中放置相同指令,是等效的。:

/www/htdocs/example中的.htaccess:

/www/htdocs/example中.htaccess文件的内容
AddTypetext/example.exm

httpd.conf文件中的段
&lt;Directory/www/htdocs/example&gt;
AddType

text/example.exm
&lt;/Directory&gt;

但是,把这个配置放置在服务器配置文件中则更加高效,因为只需要在Apache启动时读取一次,而不是在有文件请求时每次都读取。

将AllowOverride设置为”none”可以完全禁止使用.htaccess文件。

AllowOverrideNone

指令的生效

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是,很重要需要记住的是,其更高级的目录也可能会有.htaccess文件,而指令是按查找顺序依次生效,所以,一个特定目录下的.htaccess文件中的指令可能会覆盖其更高级目录中的.htaccess文件的指令,即,子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

例如:目录/www/htdocs/example1中的.htaccess文件有如下内容:

Options+ExecCGI

(注意:必须设置”AllowOverrideOptions”以允许在.htaccess文件中使用”Options”指令。)

在目录/www/htdocs/example1/example2中的.htaccess文件有如下内容:

OptionsIncludes

由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许OptionsIncludes,它完全覆盖了之前的设置。

认证举例

如果你为了知道如何认证,直接从这里开始看,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实不是这样。把认证指令放在主服务器配置文件的&lt;Directory&gt;段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主服务器配置文件的时候。参见上述的使用.htaccess文件的场合。

有此声明在先,如果你仍然需要使用.htaccess文件,请看以下说明。

必须设置”AllowOverrideAuthConfig”以允许这些指令生效

.htaccess文件的内容:

AuthTypeBasic
AuthName”PasswordRequired”
AuthUserFile/www/passwords/password.file
AuthGroupFile/www/passwords/group.file
RequireGroupadmins

注意,必须设置AllowOverrideAuthConfig以允许这些指令生效

更详细的有关身份识别和认证的说明,请参见authenticationtutorial。

服务器端包含举例

.htaccess文件的另一个常见用途是允许一个特定目录的服务器端包含(ServerSideIncludes),可以在需要的目录中放置.htaccess文件,并如下配置:

Options+Includes
AddTypetext/htmlshtml
AddHandlerserver-parsedshtml

注意,必须同时设置AllowOverrideOptions和AllowOverrideFileInfo使这些指令生效。

更详细的有关服务器端包含的说明,请参见SSItutorial。

CGI举例

最后,可以通过.htaccess文件允许在特定目录中执行CGI程序,需按如下配置:

Options+ExecCGI
AddHandlercgi-scriptcgipl

另外,如下,可以使给定目录下所有文件被视为CGI程序:

Options+ExecCGI
SetHandlercgi-script

注意,必须设置AllowOverrideOptions使这些指令生效。

更详细的有关CGI编程和配置的说明,请参见CGItutorial。

疑难解答

如果在.htaccess文件中写入了配置指令但不起作用,可能有多种原因。

最常见的原因是,AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置AllowOverrideNone。有一个很好的测试方法,即,在.htaccess文件随便增加点没用的内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了AllowOverrideNone。

在访问文档时,如果收到服务器的出错消息,应该检查Apache的出错日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。

 
2008-12-08 20:08

http://miaoqiyuan.cn/p/js-top_clienttop_scrolltop_offsettop/

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth   (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;

 
2008-12-08 20:06
< %
'ASP获取文章列表
function getHTTPPage(url)  
 dim Http  
 set Http=server.createobject("MSXML2.XMLHTTP")  
 Http.open "GET",url,false  
 Http.send()  
 if Http.readystate<>4 then  
  exit function  
 end if  
 getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")  
 set http=nothing  
 if err.number<>0 then err.Clear  
end function  
 
Function BytesToBstr(body,Cset)  
 dim objstream  
 set objstream = Server.CreateObject("adodb.stream")  
 objstream.Type = 1  
 objstream.Mode =3  
 objstream.Open  
 objstream.Write body  
 objstream.Position = 0  
 objstream.Type = 2  
 objstream.Charset = Cset  
 BytesToBstr = objstream.ReadText  
 objstream.Close  
 set objstream = nothing  
End Function  
 
Function ZZ(ustr,uexp)
 Set regEx=New RegExp
 regEx.Pattern=uexp
 regEx.IgnoreCase=True
 regEx.Global=True
 Set ZZ=regEx.Execute(ustr)
End Function
 
Sub Echo(t)
 response.write t&"<br />"&vbcrlf
End Sub
 
Sub getall(url,xurl,uri)
 Html = getHTTPPage(uri&Url)
 set Rs=ZZ(html,"("&xurl&"?.*)[#""].*>(.*)< \/a")
 for each uurl in Rs
  'echo uri&replace(uurl,"""","")
  Set oMacs=uurl
  echo uri&oMacs.SubMatches(0)&"|"&oMacs.SubMatches(1)
 next
End Sub
 
urls=split("ftgb|ftlg|zykt","|")
xurls=split("ftgbxx|ftlgxx|zyktcpxx","|")
for i=0 to ubound(urls)
 getall urls(i)&".jsp",xurls(i)&".jsp","http://gree.com.cn/gree_product/"
next
%>

下边发个VBscript版本的

'VBScript获取文章列表
function getHTTPPage(url)  
 dim Http  
 set Http=createobject("MSXML2.XMLHTTP")  
 Http.open "GET",url,false  
 Http.send()  
 if Http.readystate<>4 then  
  exit function  
 end if  
 getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")  
 set http=nothing  
 if err.number<>0 then err.Clear  
end function  
 
Function BytesToBstr(body,Cset)  
 dim objstream  
 set objstream = CreateObject("adodb.stream")  
 objstream.Type = 1  
 objstream.Mode =3  
 objstream.Open  
 objstream.Write body  
 objstream.Position = 0  
 objstream.Type = 2  
 objstream.Charset = Cset  
 BytesToBstr = objstream.ReadText  
 objstream.Close  
 set objstream = nothing  
End Function 
 
Function ZZ(ustr,uexp)
 Set regEx=New RegExp
 regEx.Pattern=uexp
 regEx.IgnoreCase=True
 regEx.Global=True
 Set ZZ=regEx.Execute(ustr)
End Function
 
Sub Echo(t)
 Wscript.echo t
End Sub
 
Sub getall(url,xurl,uri)
 Html = getHTTPPage(uri&Url)
 set Rs=ZZ(html,"("&xurl&"?.*)[#""].*>(.*)< \/a")
 for each uurl in Rs
  'echo uri&replace(uurl,"""","")
  Set oMacs=uurl
  echo uri&oMacs.SubMatches(0)&"|"&oMacs.SubMatches(1)
 next
End Sub
 
urls=split("ftgb|ftlg|zykt","|")
xurls=split("ftgbxx|ftlgxx|zyktcpxx","|")
for i=0 to ubound(urls)
 getall urls(i)&".jsp",xurls(i)&".jsp","http://gree.com.cn/gree_product/"
next
 
2008-12-08 20:05

实现功能:
1.预算剩余时间
2.预测剩余进度
3.转换大小
4.自动调整比列
5.显示转换所有时间
6.显示调整所用时间
7.显示征途所有时间

下面给出程序源代码(r.vbs)

oh=640 '最大高度
op=10 '运行完等待时间,默认1000,即1秒
 
Function Mappath(v)
 Mappath=fso.getAbsolutePathName(v)
End Function
 
Sub Convert
 imgnum=fpo.files.count
 wscript.echo "图片批量转换工具 1.0 By 苗启源"&vbCrlf&String(60,"=")
 imgsta=timer()
 imgi=1
 for each file in fpo.files
     if ucase(fso.getExtensionName(file))="JPG" Then
      imgedit=timer()
   wscript.echo "开始"&file.name&"转换..."
         jpeg.open file
         owidth=jpeg.originalwidth
         oheight=jpeg.originalheight
         if owidth>oheight then
          whedit=timer()
          om=(owidth-oheight)/2
          jpeg.crop 0,0-om,owidth,oheight+om
          wscript.echo "调整长宽比完毕,用时"&(timer()-whedit)*1000&"毫秒。"
         end if
            if jpeg.height>oh then
             resizeedit=timer()
             jpeg.width=oh*jpeg.width/jpeg.height
             jpeg.height=oh
             wscript.echo "压缩图片完毕,用时"&(timer()-resizeedit)*1000&"毫秒。"
            end if
            wscript.echo "原大小:"&oWidth&"x"&oHeight&",现大小:"&jpeg.width&"x"&jpeg.height
         jpeg.save file
         jpeg.close
         wscript.echo file.name&"转换完毕,用时"&(timer()-imgedit)*1000&"毫秒。"
         wscript.echo "当前进度"&CLng((imgi/imgnum)*10000)/100&"%,已开始"&(timer-imgsta)&"秒,预计还剩"&cint((imgnum-imgi)*(timer-imgsta)/imgi)&"秒。"&vbCrlf
         wscript.sleep op
     end if
     imgi=imgi+1
 next
 wscript.echo String(60,"=")&vbCrlf&"转换完毕。"
 wscript.sleep 10000
End Sub
 
set fso=CreateObject("Scripting.FileSystemObject")
set jpeg=CreateObject("Persits.JPEG")
set fpo=fso.getFolder(Mappath(""))
Convert
原文地址:http://miaoqiyuan.cn/p/image-easy-resize/
 
2008-12-08 20:04

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>FileList with VBScript&Javascript</title>
<script type="text/vbscript">
on error resume next
 
Function Mappath(v)
 Mappath=fso.getAbsolutePathName(v)
End Function
 
Function getPath(style,path)
 pathlist="<select style=""float:left;"&style&""" ondblclick=""javascript:FileMan(this.value)"">"
 if path="" or not fso.folderexists(path) then
  pathlist=pathlist+"<option value="""">我的电脑</option>"
  for each xx in fso.drives
   pathlist=pathlist&"<option value="""&xx&""">"&xx&"\</option>"
  next
 else
  set fpo=fso.getfolder(path)
  'pathlist=pathlist&"<option value="""&path&""">当前目录==>"&path&"</option>"
  if len(path)>3 then
   pathlist=pathlist&"<option value="""&fpo.parentfolder&""">..</option>"
  else
   pathlist=pathlist&"<option value="""">我的电脑</option>"
  end if
  for each xx in fpo.subfolders
   if i=0 then x=" selected" else x=""
   i=1
   pathlist=pathlist&"<option value="""&xx&""" title="""&xx&""""&x&">"&xx&"</option>"
  next
  pathlist=pathlist&"</select><select style=""float:left;"&style&""" ondblclick=""javascript:openFile(this.value);"">"
  for each xx in fpo.files
   if i=0 then x=" selected" else x=""
   j=1
   pathlist=pathlist&"<option value="""&xx&""" title="""&xx&""""&x&">"&xx&"</option>"
  next
 end if
 pathlist=pathlist&"</select>"
 getPath=pathlist
End Function
 
Sub Loading
 FileMan("D:")
 DriversMan()
End Sub
 
function openFile(v)
 window.open v
end function
 
set fso=CreateObject("Scripting.FileSystemObject")
</script>
<script type="text/javascript">
function gettextarea(){
 ores=document.getElementById("res");
}
function getV(_id,ji){
 var sel=document.getElementsByTagName("select")[ji];
 sel.uid=_id;
 sel.onchange=function(){
  for(i=0;i<sel .options.length;i++){
   if(sel.options[i].selected!=""){
    document.getElementById(sel.uid).value=sel.options[i].value;
   }
  }
 }
}
function _ch(id){
 getV(id,1);
}
function _chf(id){
 getV(id,2);
}
function FileMan(Path){
 var oFm=document.getElementById("fileman");
 oFm.innerHTML=getPath("width:90%;\"  size=\"13",Path);
}
function DriversMan(){
 var oDm=document.getElementById("driversman");
 oDm.innerHTML=getPath("width:9%;\"  size=\"26","");
}
</script>
</sel></script></meta></head>
<body style="background:#D4D0C8;text-align:center" onload="Loading">
<div style="width:100%;height:100%">
 <div><span id="driversman"></span><span id="fileman"></span></div>
 <div>
  <input value="请点击选择目录" onclick="javascript:_ch(this.id);" id="__rst" readonly/>
  <input value="请点击选择目录"  onclick="javascript:_ch(this.id);" id="__res"  readonly/>
  <input value="请点击选择文件" onclick="javascript:_chf(this.id);" id="__rstf" readonly/>
  <input value="请点击选择文件"  onclick="javascript:_chf(this.id);" id="__resf"  readonly/>
  <input value="请点击选择目录" onclick="javascript:_ch(this.id);" id="__rst1" readonly/>
  <input value="请点击选择目录"  onclick="javascript:_ch(this.id);" id="__res1"  readonly/>
  <input value="请点击选择文件" onclick="javascript:_chf(this.id);" id="__rstf1" readonly/>
  <input value="请点击选择文件"  onclick="javascript:_chf(this.id);" id="__resf1"  readonly/>
  <input value="请点击选择目录" onclick="javascript:_ch(this.id);" id="__rst2" readonly/>
  <input value="请点击选择目录"  onclick="javascript:_ch(this.id);" id="__res2"  readonly/>
  <input value="请点击选择文件" onclick="javascript:_chf(this.id);" id="__rstf2" readonly/>
  <input value="请点击选择文件"  onclick="javascript:_chf(this.id);" id="__resf2"  readonly/>
 </div>
</div>
</body>
</html>

双击盘符目录打开该目录,双击文件可打开文件,点击下面的文本框,可以获取目录与文件名
程序比较简单,就不加注释了

原文地址:http://miaoqiyuan.cn/p/drives-files-subfiles-asp-vbscript-javascript/

 
2008-12-08 20:03

常用虚拟主机的朋友应该都能用到虚拟主机中的清空目录的功能,如果虚拟主机没有清空目录的功能,那么在FTP中删除确实是很讨厌的一件事。
今天我写了一个ASP小程序,用于清空当前目录中的所有文件,这样,即使虚拟主机中没有清空目录的功能,也能快速清空目录。

< %
set fso=createobject("scripting.filesystemobject")
set fpos=fso.getfolder(server.mappath("."))
 
sub echo(t)
 response.write t&vbCrlf
end sub
 
sub delpath(fpo)
 '删除fpo中的所有文件
 for each file in fpo.files
  echo "删除"&file
  file.delete
 next
 '遍历fpo中所有子目录,并调用子目录清空的过程
 for each path in fpo.subfolders
  call delpath(path)
 next
 
 '删除fpo
 if fpo<>fpos then
  echo "删除"&fpo
  fpo.delete
 end if
end sub
 
delpath(fpos)
%>
原文请访问:http://miaoqiyuan.cn/p/ftp-qingkong-mulu/
 
2008-12-08 20:02

学习Javascript快四年了。因为最初是从实践开始学的,真正系统的学习到了06年才开始。虽然学的时间够长了,曾经经历过两次瓶颈,第一次就是JS的对象。在初级教程中,JavaScript创建对象的方法基本上都是function,而且网网一带而过。所以如果只是买一本Javascript入门书开始学习JavaScript很容易遇到瓶颈。今天我写这篇文章,算是帮帮比我还菜的菜鸟,快速掌握Javscript创建对象的方法吧。
首先来介绍一下在Javascript书籍上最常见的一中方式function方式
function 对象名() {
this.变量1=变量1的值;
this.变量2=变量2的值;
this.函数1= function() {
函数体
};
this.函数2= function() {
函数体
};
……;
}
说明:
(1)其内的变量或者函数前必需写上this关键字;
(2)对象的内容与值以等号分隔,成对出现;
(3)包含的变量或者函数之间以分号分隔。
(4)函数需要写在function(){}的大括号之内。
例子:

function miaoqiyuan() {
 this.name="苗启源";
 this.nickname="飞猫,mqycn";
 this.homeurl=function() {
  alert("http://www.miaoqiyuan.cn");
 };
 this.gohome=function() {
  location.href="http://www.miaoqiyuan.cn";
 }
}

第二种:JSON方式
var 对象名 = {
变量1: 变量1的值,
变量2: 变量2的值,
函数1: function(){
函数体
},
函数2: function(){
函数体
},
……
};
说明:
(1)大括号内直接填写变量或者函数;
(2)对象的内容与值以冒号分隔,成对出现;
(3)包含的变量或者函数之间以逗号分隔;
(4)函数需要写在function(){}的大括号之内。
例子:

var miaoqiyuan = {
 name:"苗启源",
 nickname:"飞猫,mqycn",
 homeurl: function() {
  alert("http://www.miaoqiyuan.cn");
 },
 gohome: function() {
  location.href="http://www.miaoqiyuan.cn";
 }
};

第三种:原型方式
var 对象名 = {};
对象名.prototype.变量1=变量1的值;
对象名.prototype.变量2=变量2的值;
对象名.prototype.函数1= function() {
函数体
};
对象名.prototype.函数2= function() {
函数体
};
……;
说明:
(1)初始对象体内可以不定义任何东西;
(2)在要定义的变量前加“对象名.prototype.”的格式;
(3)对象的内容与值以等号分隔,成对出现;
(4)包含的变量或者函数之间以分号分隔,也可以省去分号。
(5)函数需要写在function(){}的大括号之内。

例子:

var data = {};
 data.prototype.name ="苗启源";
 data.prototype.nickname ="mqycn,飞猫";
 data.prototype.homeurl = function() {
  alert("http://www.miaoqiyuan.cn");
 };
 data.prototype.gohome= function() {
  location.href="http://www.miaoqiyuan.cn";
 };

第四种为create方式,该方式利用了Prototype JavaScript组件库,很少见有人用。
var 对象名 = Class.create();
Object.extend(对象名.prototype, {
变量1: 变量1的值,
变量1: 变量1的值,
函数1: function() {
函数体
},
函数2: function() {
函数体
},
……
}
);
说明:
(1)对象的创建使用了Prototype库中的Class.create()函数;
(2)对象的内容使用Prototype库中的Object.extend()函数来扩展;
(3)被扩展的对象在传入Object.extend函数时一定要带上prototype,
(4)扩展内容被大括号包含,其内与JSON方式的定义格式完全相同。
例子:

var data = Class.create();
Object.extend(dta.prototype, {
 name:"苗启源",
 nickname:"飞猫,mqycn",
 homeurl: function() {
  alert("http://www.miaoqiyuan.cn");
 },
 gohome: function() {
  location.href="http://www.miaoqiyuan.cn";
 }
});

通过上面的四种方法就可以定义对象了,使用对象的方法比较简单了:
var flycat = new miaoqiyuan();
这样就创建了一个名为flycat的对象。
创建了对象,引用的方法有两种,点号方式引用、数组方式引用。
这就很简单了,flycat["name"],flycat.name。
我学Javscript是从实践开始的,没有系统的学过。有些定义可能叫的不是很准确。欢迎大家与我讨论。本文的原始地址为:http://www.miaoqiyuan.cn/p/javascript-object

 
2008-07-12 22:45

本人更换博客,网址:http://www.miaoqiyuan.cn

 
2008-06-09 00:14
不喜欢用别人写的框架,所以没用框架,全是自己写的代码~
本来想一张惯例把代码全发出来,想了想还是只发部分代码了,毕竟这是"考试"。

浏览器兼容:火狐,IE7,IE6,IE5.5,IE5,Opera9.25,Safari3.0.5显示正常

CSS用的绝对定位,Body区域中DIV只有Class,我写过的最简洁的~
脚本只用一个document.onmouseover=function(e)加载,然后根据className来决定是否放大该层

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DEMO</title>
<style type="text/css">
<!--
body div{position:absolute;background:#66F}
//CSS略
-->
</style>
<script type="text/javascript">
document.onmouseover=function(e){
//脚本略
}
</script>
</head>

<body>
<div class="mqycn001"></div>
<div class="mqycn002"></div>
<div class="mqycn003"></div>
</body>
</html>

 
     
 
留言板
 
5
你好啊。
为什么你的文章里面的关键字可以变色?
2009-01-03 10:07| 回复
 
4
你好 想请教下 电脑的问题 如果可以 请加我QQ574069674 谢谢
2008-10-10 14:00| 回复
 
3
空间做的很好啊!! 给你加油~~~· o(∩_∩)o...哈哈 要记得回访哦~…… 顺便要留下一些指点和评价 我帮你踩 踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩踩 呵呵,在祝你新年快乐哦!~~~~ 红包就不用了,(*^__^*) 嘻嘻……
2008-02-05 16:22| 回复
 
1
很高兴认识你,多交流
2007-06-12 14:00| 回复
 
 
姓 名:    注册
网 址: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      
   
 
 
文章分类
 
 
 
 
 
 
 
 
 
 
 
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
     
 
最新评论
 
     
 
最近访客
 
 

傷葉

武士囡囡

yczhm

西部汉子

Seed_Squall

anranyx

chijsyzgywy

haruka90
     


©2009 Baidu