用星空极速的朋友来看一下,限制路由是其真正目的.齐心协力放倒它

--------------------------------------------------------------------------------
看看星空急速的鬼把戏吧!
此主题相关图片如下:

点击在新窗口中浏览此图片




此主题相关图片如下:


这是winxp自带的PPPOE拨号地抓包,另一个是winpOET6的抓包可以看出,两个标准的PPPOE软件拨号时的数据包是一样。PPPOE是一个二层的协议,不需要3层IP的支持,所以抓到的广播包是你计算机上的网卡MAC地址。其工作原理是:主机程序启动PPPOE拨号,PPPOE协议使用主机网卡MAC地址作为原地址,由于目标radius服务器地址不明,所以采用广播方式广播,此时ADSLmodem应处于RFC1483桥接方式,只负责将以太网信号转换成能够在电话线上传输的高频数字信号向对段电信服务器传输,而对端一般是电信级的ADSL接入设备,说白了就是个巨大的ADSLmodem池,然后将接收到高频数字信号转换成以太网信号,同时判断这个数据是做什么的,当接到的是用户网卡发来的PPPOE拨号请求,就将这个请求发给radius认证服务器,而服务器认证后将返回认证信息给ADSL接入设备,以让ADSL接入设备判断是否允许该用户数据通过,同时返回给用户3层IP地址和DNS和网关(这由DHCP服务器完成),此时用户端接收到返回信息,就得到了相应的参数,在按照标准以太网的工作原理工作,也就是说,ADSLmodem对于用户来说是透明的。

现在再来看看垃圾电信的星空急速拨号式的数据包吧:

点击在新窗口中浏览此图片


点击在新窗口中浏览此图片


首先是一批IPARP广播,而不是PPPOE的广播!这个ARP广播将直接将你的网卡MAC地址广播给电信端,有理由相信这样电信局能够得到你的MAC地址并在端口上进行基于MAC地址的限制,但是PPPOE也会广播MAC地址,所以这个不因该是导致电信局发现你路由共享原因。在朝下看,224.0.0.22? my god!IGMP(internt组管理协议),该协议主要的作用是将信息发布给参加入组的所有路由器和主机!看到这里大家应该明白了吧!这个是其他PPPOE软件根本不具备的,所以在普通宽带路由器中的规范PPPOE拨号是根本没有办法发出IGMP请求的,这样自然对方的特殊服务器就能区分你使用的是不是电信的星空急速拉,剩下的么…………(当然,电信那端使用什么样的服务器来检测和具体检测流程还不清楚,但应该是这个原理了),另外,由于使用星空急速相当于将计算机加入到IGMP组中,这样IGMP服务器下发任何信息都会忠实地发送到这个组的所有成员,所以嘛,强制广告啊、病毒啊。。。


为什么中国电信要搞星空极速?

主要原因: 从根本上解决ADSL用户一线多机的状况. 缓解带宽压力.
次要原因: 增加第三产业收入

为什么安装了中国电信的星空极速后,无法共享上网?

原因: 安装该软件后,系统会自动捆绑您的宽带电话号码与帐户,连接中国电信中心机房,更改您在该机房系统中一个类似于PUK码(有人说是PING码)的参数值.
这个参数更改后(比如,默认是0,0代表可以共享上网,而更改为1后,就做了共享限制)您就无法使用路由或者单机共享来访问INTERNET了.
目前,暂时没有彻底的办法来帮助已经安装了该软件的用户解脱痛苦.原因大概是,该软件利用了很底层的数据传输协议,(比如TCP/IP)来进行了源头过滤,所以,就算您卸载了该软件, 由于您在电信中心机房内的系统参数仍为更改后的参数,所以您还是无法象以前那样共享上网.

另外,给大家一个相对的解决办法:
如果您被B安装,而您又希望恢复原来的状态. 那么您可以直接CALL 10000号,拨0,转数据专线,告诉接电话的人,你的电脑安装完星空极速后,系统崩溃了,要求他们给个解决办法, 这时,对方有可能会把你的限制参数更改回去. 但是这要看人家的心情了....

最后说一下,这个软件是中国电信委托相关软件公司耗资几百万元开发出来的,所以,目前不会有比较根本的解决办法.... 除非...大家改用其他网络公司的宽带业务.


“星空极速”,它会自动将用户网卡的MAC地址在×电×信×的服务器端绑定了,说是为了保护帐号,同时也限制用户开路由了,同时它还有一些屏蔽词语内置的别的功能(类似于间谍软件):监视用户的上网情况,以及是否又多机连接(局域网),等等。。。。。。

查看IIS里每个站点的资源使用情况



很多管理员,特别是做虚拟主机可能到遇到过IIS cpu100%占用,但又不知道哪些网站资源占用多,下面介绍一个方法可以,查看每个web站点的资源使用情况

这个方法平时不推荐使用,只是在出现问题的时候使用

1,把每个站点设为独立进程

打开IIS 站点属性 -- 主目录 -- 应用程序保护改成 高

打开任务管理器 查看进程 你就会看到多出一些dllhost.exe进程 和他们的资源使用情况 这些就是 每个web点点的进程,但现在好不知道 哪个web站点使用那个进程

2,对应web站点的dllhost.exe进程

打开管理工具--- 组件服务 -- 计算机 -- 我的电脑 -- com+ 应用程序

在这里 我么可以看到类似IIS-{domain.com//Root}这样的,不设为独立进程就看不到,这个就是IIS里的web站点,选择工具栏上的 状态查看

你就会看到 类似这样的

名称 运行 PID

IIS-{down.789game.com//Root} 是 1688

其中 PID 就是任务管理里的 dllhost.exe得 pid值

好了 现在知道每个web站点使用的dllhost.exe进程了,而在任务管理器又可以知道dllhost.exe占用的资源,那你应该知道那个网站占用资源不正常了吧!
MySQL数据库中mysqldump命令使用详解

MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导出数据。一个重要的原因是用于备份数据库。数据的造价常常是昂贵的,需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是,也许您希望导出数据来共享。 在这个信息技术不断成长的世界中,共享数据变得越来越常见。

  比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。世界变得越来越小,信息也被共享得越来越多。有很多中导出数据得方法,它们都跟导入数据很相似。因为,毕竟,这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各样的导出数据的方法,您将学会如何用MySQL来实现数据导出。
  
  使用mysqldump:
  
  (mysqldump命令位于mysql/bin/目录中)

  mysqldump工具很多方面类似相反作用的工具mysqlimport。它们有一些同样的选项。但mysqldump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。决不会有半点让人头疼地地方。
  
  因此,如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用下面的命令:

  bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
  
  这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,可以使用下面的命令:

  bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt
  
  这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:

  bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
  
  mysqldump工具有大量的选项,部分选项如下表:

  选项/Option 作用/Action Performed

  --add-drop-table

  这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

  --add-locks

  这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
  
  -c or - complete_insert

这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。

  --delayed-insert 在INSERT命令中加入DELAY选项

  -F or -flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log.

  -f or -force 使用这个选项,即使有错误发生,仍然继续导出

  --full 这个选项把附加信息也加到CREATE TABLE的语句中

  -l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。

  -t or -no-create- info

  这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
  
  -d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。

  在您只需要DDL语句时,可以使用这个选项。

  --opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。

  -q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

  -T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
  
  -w "WHERE Clause" or -where = "Where clause "

  如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。
  
  假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣,并且需要文件有逗号分隔,因为这样就很容易导入到Excel中。 为了完成这个人物,您可以使用下面的句子:

  bin/mysqldump –p –where "Order_Date >=’2000-01-01’"
  –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

  这将会得到您想要的结果。
  
  schema:模式

  The set of statements, expressed in data definition language, that completely describe the structure of a data base.

  一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。
  
  SELECT INTO OUTFILE :

如果您觉得mysqldump工具不够酷,就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令,这就是SELECT INTO OUTFILE 命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用mysqldump完成的功能,可以依照下面的步骤进行操作:
  
  1. 确保mysqld进程(服务)已经在运行

  2. cd /usr/local/mysql

  3. bin/mysqladmin ping ;// 如果这个句子通不过,可以用这个:mysqladmin -u root -p ping

  mysqladmin ping用于检测mysqld的状态,is alive说明正在运行,出错则可能需要用户名和密码。

  4. 启动MySQL 监听程序.

  5. bin/mysql –p Meet_A_Geek;// 进入mysql命令行,并且打开数据库Meet_A_Geek,需要输入密码

  6. 在命令行中,输入一下命令:

  SELECT * INTO OUTFILE ’/home/mark/Orders.txt’
  FIELDS
  TERMINATED BY = ’,’
  FROM Orders
  WHERE Order_Date >= ’2000-01-01’
  
  在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。
  
  比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:
  
  在mysql目录建立一个名为Report_G.rpt 的文本文件,加入下面的行:

  USE Meet_A_Geek;
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Kinnard", "Vicky");
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Kinnard", "Steven");
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Brown", "Sam");
  SELECT Last_Name INTO OUTFILE ’/home/mark/Report.rpt’
  FROM Customers WHERE Customer_ID > 1;

  然后确认 mysql进程在运行,并且您在mysql目录中, 输入下面的命令:

bin/mysql < Report_G.rpt检查您命名作为输出的文件,这个文件将会包含所有您在Customers表中输入的顾客的姓。 如您所见,您可以使用今天学到的导入/导出(import/export)的方法来帮助得到报表。
(e129)

如果你不能连接服务器,如何重新获得对服务器的控制

在某些情况下,你可能由于不能连接它而手工重启服务器。当然,这有点矛盾。因为一般你通过连接服务器而手工关掉它,那么这种情况如何会出现。

首先,MySQL root口令可以已经设置为你不知道的值,这可能发生在你修改口令时,例如,如果你在输入新口令时偶然键入一个不可见的控制字符。你也可能忘记口令。

其次,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。

如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你必须建立一个TCP/IP连接,例如,如果服务器主机是pit.snake.net,你可以这样连接:

%mysqladmin -p -u root -h pit.snake.net shutdown

如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,如果数据目录是/usr/local/var,你可以通过将下列行加入/etc/my.cnf中,将套接字文件移到那里:

[mysqld]socket=/usr/local/var/mysql.sock[client]socket=/usr/local/var/mysql.sock

对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置创建套接字。

如果你由于忘记root口令或已经将它设置为不同于认为的值而不能连接,你需要重新获得对服务器的控制,是你能再次设置口令:

中断服务器

如果你以root登录服务器主机,你可以用kill命令终止服务器。你可以使用ps命令或通过寻找服务器的PID文件(通常在数据目录中)找出服务器进程的ID。

最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。

如果你用kill -9终止服务器,要确保在启动服务器前用myisamchk和isamchk检查你的表。

用--skip-grant-table选项重启服务器。

这告诉服务器不使用授权表验证连接,这允许你以root连接而无须口令。在你已经连接后,改变root口令。

具体的操作方法:
打开根目录下的tb.php
找到:

if ($seid[3]==$tb_id)

将其修改为:

if ($seid[3]==$tb_id && $extra==tbcertificate ($tb_id))


再打开:global.php
在其末尾加上

function tbcertificate ($blog) {
  $certifystring='fdsfsdfsfsfdsfdsdfsfsfsf';  //此处可以自己定义加密字串
  $str=substr(md5($blog.$certifystring), 0, 5);
  return $str;
}

如果你了解程序,可以自己定义这个函数
我此处只传递一个参数!^~^

打开include/seetb.php文件
找到:

$addresses="$langlist[12] <span id='tbid'> $weburl"."/tb.php?tb_id=$tbid</span> [<a href=# onClick='copyText(document.all.tbid)'>$langlist[8]</a>]<br/><br/>  $langlist[13]";

在其上加上:

$certify=tbcertificate ($tbid);

并将其修改为:

$addresses="$langlist[12] <span id='tbid'> $weburl"."/tb.php?tb_id=$tbid&extra=$certify</span> [<a href=# onClick='copyText(document.all.tbid)'>$langlist[8]</a>]<br/><br/>  $langlist[13]";


//更新于06年5月20日20:40
打开include/art.php文档
找到

$catidd=$latest[4];

在它下面加上

$certify = tbcertificate ($latest[3]);

找到

$tblinkshow="<strong>$langmain[37]</strong> <a href="{$weburl}/tb.php?tb_id={$latest[3]}">".shortenurl("{$weburl}/tb.php?tb_id={$latest[3]}")."</a>";

换成

$tblinkshow="<strong>$langmain[37]</strong> <a href=\"{$weburl}/tb.php?tb_id={$latest[3]}&amp;extra=$certify\">".shortenurl("{$weburl}/tb.php?tb_id={$latest[3]}&amp;extra=$certify")."</a>";




OK!到这里就好了!
请在修改任何文件之前备份一下要改的文件,操作不成功的话还可以恢复呢!
有什么问题可以给我留言,我会尽量快点回复的!

http://www.ewjy.com/read.php?54
Just like you need to defrag and check your file system, it's important to do the same thing with MySQL tables. If you don't, you might end up with slow and corrupted database tables. Follow this easy tutorial to set up an automatic optimization for your db.

Want to speed up your MySQL performance in a simple but effective way?
Speed in MySQL is all about how fast the database can find the information you request. To help MySQL clean up and get all the best possibilities to gather your information, you can perform the command “Optimize” on your tables.

Because you probably will add and delete tables from time to time, you want a solution that works no matter how your database looks like. For this I will give you a PHP script that finds all your tables, and then perform Optimize on every single one. A good idea can be to do this every night (or whenever your server is least accessed) with “cron” because you don’t want to delay your surfers to much.

Here is the script (really simple actually):
Make sure you modify the four variables at the top of the script so they match your configuration.

// Change these four variables to match your configuration.
// You will probably only need to change “user”, “pwd” and “dbName”.
$server = ”localhost”;
$user = ”mysql_user”;
$pwd = ”mysql_password”;
$dbName = ”mysql_dbName”;

$link = mysql_connect($server, $user, $pwd);
if (!$link) {
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db($dbName, $link);
if (!$db_selected) {
die ('Can't use $dbName : ' . mysql_error());
}

// Find the names of all tables in the selected db.
$alltables = mysql_query("SHOW TABLES");

// Go through all tables.
while ($table = mysql_fetch_assoc($alltables))
{
foreach ($table as $db => $tablename)
{
// Perform the magic “OPTIMIZE” on every table in the db.
mysql_query("OPTIMIZE TABLE '".$tablename."'")
or die(mysql_error());
}

}

mysql_close($link);
?>

ISAPI_rewrite中文手册



配置:
在NT 2000 XP和2003平台上,在系统帐户下应该INETINFO程序应该与IIS5以共存模式过滤器运行。所以系统帐户应该给予对所有的ISAPI-REWIRITE DLLS 和所有的HTTPD。INI文件至少可读权限,我们也推荐对给予系统帐户对于所有包括HTTPD。INI文件的文件夹的可写权限,这将允许产生HTTP。PARSE。ERRORS文件,这些文件包含配置文件语法错误。对于PROXY模块也需要额外的权限,因为它将运行于连接池或HIGH-ISPLATED应用模式,IIS帐户共享池和HIGH-ISOLATION池应被给予 对RWHELPERE。DLL的可读权限。缺省情况下IWAM-《计算机名》被用于所有的池,在相应的COM+应用设置中应借助COM+ADMINISTRATION MMC SNAP-IN建立池帐户
配置文件格式化:

有两种形式的配置文件-GLOBAL(SERVER-LEVEL)和INDIVIDUAL(SITE-LEVAL)文件,GLOBAL配置文件应被命名为HTTPD.INI并出现在ISAPI-REWRITE安装目录中,文件的快捷方式通过开始菜单提供,INDIVIDUAL配置文件应名为HTTPD。INI并且能够出现在虚拟站点的物理根目录中,两种类型的格式化是相同的并是标准的WINDOWS。INI文件,所有的指令都应该放在这一部分并且所有指令都应该以分隔线放置,任何这一部分以外的文本都将被忽略

HTTPD.INI文件示例

[ISAPI_Rewrite]

# This is a comment

# 300 = 5 minutes
CacheClockRate 300
RepeatLimit 20

# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors) / [F,I,O]

# Block external access to the Helper ISAPI Extension
RewriteRule .*\.isrwhlp / [F,I,O]

# Some custom rules
RewriteCond Host: (.+)

RewriteCond 指令

Syntax:(句法) RewriteCond TestVerb CondPattern [Flags]
这一指令定义一个条件规则,在 RewriteRule 或者 RewriteHeader或 RewriteProxy指令前预行RewriteCond指令,后面的规则 只有它的,模式匹配URI的当前状态并且额外的条件也被应用才会被应用。

TestVerb

Specifies verb that will be matched against regular expression.
特别定义的动词匹配规定的表达式
TestVerb=(URL | METHOD | VERSION | HTTPHeaderName: | %ServerVariable) where:

URL - returns Request-URI of client request as described in RFC 2068 (HTTP 1.1);
返回客户端在RFC2068中描述的需求的Request-URI
METHOD - returns HTTP method of client request (OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE);
返回客户端需求(OPTIONS, GET, HEAD, POST, PUT, DELETE or TRACE)的HTTP方法
VERSION - returns HTTP version;
返回HTTP版本
HTTPHeaderName - returns value of the specified HTTP header. HTTPHeaderName can be any valid HTTP header name. Header names should include the trailing colon “:”. If specified header does not exists in a client’s request TestVerb is treated as empty string.
返回特定义的HTTP头文件的值
HTTPHeaderName =
Accept:
Accept-Charset:
Accept-Encoding:
Accept-Language:
Authorization:
Cookie:
From:
Host:
If-Modified-Since:
If-Match:
If-None-Match:
If-Range:
If-Unmodified-Since:
Max-Forwards:
Proxy-Authorization:
Range:
Referer:
User-Agent:
Any-Custom-Header
得到更多的关于HTTP头文件的和他们的值的信息参考RFC2068
ServerVariable 返回特定义的服务器变量的值 。例如服务器端口,全部服务器变量列表应在IIS文档中建立,变量名应用%符预定;
CondPattern
The regular expression to match TestVerb
规则表达式匹配TestVerb
[Flags]
Flags is a comma-separated list of the following flags:
O (nOrmalize)
Normalizes string before processing. Normalization includes removing of an URL-encoding, illegal characters, etc. This flag is useful with URLs and URL-encoded headers
RewriteRule 指令
Syntax: RewriteRule Pattern FormatString [Flags]
这个指令可以不止发生一次,每个指令定义一个单独的重写规则,这些规则的定义命令很重要,因为这个命令在应用运行时规则是有用途的

I (ignore case)
不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令
F (Forbidden)
对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。
L (last rule)
不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写
N (Next iteration)
强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略
NS (Next iteration of the same rule)
以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目,
P (force proxy)
强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求,必须确认代理字符串是一个有效的URI包括协议 主机等等否则代理将返回错误
R (explicit redirect)
强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则
RP (permanent redirect)
几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码
U (Unmangle Log)
当URI是源需求而不是重写需求时记载URI
O (nOrmalize)
在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的
CL (Case Lower)
小写
CU (Case Upper)
大写
RewriteHeader directive
Syntax: RewriteHeader HeaderName Pattern FormatString [Flags]
这个指令是RewriteRule的更概括化变种,它不仅重写URL的客户端需求部分,而且重写HTTP头,这个指令不仅用于重写。生成,删除任何HTTP头,甚至改变客户端请求的方法
HeaderName
指定将被重写的客户头,可取的值与 RewriteCond 指令中TestVerb参数相同

Pattern
限定规则表达式以匹配Request-URI,
FormatString
限定将生成新的URI的FormatString
[Flags]
是一个下列FLAGS的命令分隔列表
I (ignore case)
不管大小写强行指定字符匹配,这个FLAG影响RewriteRule指令和相应的RewriteCond 指令
F (Forbidden)
对客户端做反应,停止REWRITING进程并且发送403错误,注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。
L (last rule)
不应用任何重写规则在此停止重写进程,使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写
N (Next iteration)
强制REWRITINGENGINE调整规则目标并且从头重启规则检查(所有修改将保存),重启次数由RepeatLimit指定的值限制,如果这个数值超过N FLAG将被忽略

NS (Next iteration of the same rule)
以N标记工作不从相同的规则重启规则规则进程(例如强制重复规则应用),通过RepeatLimit指令指定一个反复实行某一规则的最大数目,

R (explicit redirect)
强制服务器对客户端发出重定向指示即时应答,提供目的URI的新地址,重定向规则经常是最后规则
RP (permanent redirect)
几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码
U (Unmangle Log)
当URI是源需求而不是重写需求时记载URI
O (nOrmalize)
在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的
CL (Case Lower)
小写
CU (Case Upper)
大写

要重移动头,FORMAT STRING模式应该生成一个空字符串,例如这一规则将从客户请求中重移代理信息
RewriteHeader User-Agent: .* $0
并且这一规则将把OLD-URL HEADER 加入请求中。
RewriteCond URL (.*)RewriteHeader Old-URL: ^$ $1
最后一个例子将通过改变请求方法定向所有的WEBDAV请求到/WEBDAV。ASP
RewriteCond METHOD OPTIONS
RewriteRule (.*) /webdav.asp?$1
RewriteHeader METHOD OPTIONS GET
RewriteProxy directive
Syntax: RewriteProxy Pattern FormatString [Flags]
强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求,这将允许IIS作为代理服务器并且重路由到其他站点和服务器
Pattern
限定规则表达式以匹配Request-URI,
FormatString
限定将生成新的URI的FormatString
[Flags]
是一个下列FLAGS的命令分隔列表
D (Delegate security)
代理模式将试图以当前假冒的用户资格登陆远程服务器,
C (use Credentials)
代理模式将试图一在URL或基本授权头文件中指定的资格登陆远程服务器,用这个标记你可以使用http://user:password@host.com/path/ syntax 作为URL
F (Follow redirects)
缺省情况下ISAPI_Rewrite 将试图将MAP远程服务器返回的重定向指令到本地服务器命名空间,如果远程服务器返回重定向点到那台服务器其他的某个位置,ISAPI_Rewrite 将修改这一重定向指令指向本服务器名,这将避免用户看到真实(内部)服务器名称
使用F标记强制代理模式内部跟踪远程服务器返回的重定向指令,使用这个标记如果你根本不需要接受远程服务器的重定向指令,在WINHTTP设置中有重定向限制以避免远程重定向循环
I (ignore case)
不管大小写强行指定字符匹配
U (Unmangle Log)
当URI是源需求而不是重写需求时记载URI
O (nOrmalize)
在实行之前标准化字符串。标准化包括URL-ENCODING,不合法的字符的再移动等,这个标记对于URLS和URLS-ENDODED头是有用的
CacheClockRate directive
Syntax: CacheClockRate Interval
这个指令只在GLOBAL配置内容中出现,如果这个指令在SITE-LEVEL内容中出现将被忽略并把错误信息写入httpd.parse.errors 文件
ISAPI_Rewrite caches每次在第一次加载时配置,使用这个指令你可以限定当一个特定站点从缓存中清理的不活动周期,把这个参数设置的足够大你可以强制ISAPI_Rewrite 永不清理缓存,记住任何配置文件的改变将在下次请求后立即更新而忽略这个周期
Interval
限定特定配置被清理出缓存的不作为时间(以秒计),缺省值3600(1小时)
EnableConfig and DisableConfig directives
Syntax:
EnableConfig [SiteID|”Site name”]
DisableConfig [SiteID|”Site name”]
对所选站点激活或不激活SITE-LEVEL配置或者改变缺省配置,缺省SITE-LEVEL配置不激活,这个指令只出现在GLOBAL配置内容中
SiteID
Numeric metabase identifier of a site

Site name
Name of the site as it appears in the IIS console
不用参数使用这个命令将改变缺省配置到ENABLE/DISABLE配置进程
例子
下面例子将使配置仅作用于ID=1(典型是缺省站点)名字是MY SITE的站点
DisableConfig
EnableConfig 1
EnableConfig”My site”
下边例子将激活名称为SOMESITE配置因为它分割设置重载了缺省设置
EnableConfig”Some site”
DisableConfig
EnableRewrite and DisableRewrite directives
Syntax:
EnableRewrite [SiteID|”Site name”]
DisableRewrite [SiteID|”Site name”]
对所选站点激活或不激活重写或者改变缺省配置,缺省重写配置激活,这个指令只出现在GLOBAL配置内容中
SiteID
Numeric metabase identifier of a site

Site name
Name of the site as it appears in the IIS console.

不使用参数这个命令将全部激活或者不激活
RepeatLimit directive
Syntax: RepeatLimit Limit
这个指令可以出现在GLOBAL和SITE-LEVEL配置文件中,如果出现在GLOBAL配置文件中竟改变GLOBAL对于所有站点的限制,出现在SITE-LEVEL配置中竟只改变对于这个站点的限制并且这个限制不能超过GLOBAL限制
ISAPI_Rewrite在实行规则时允许循环,这个指令允许限制最大可能循环的数量,可以设置为0或1而不支持循环,
LIMIT
限制最大循环数量,缺省32
RFStyle directive
Syntax: RFStyle Old | New
Configuration Utility
ISAPI_Rewrite Full包括配置功用(可以在 ISAPI_Rewrite 程序组中启动),它允许你浏览测试状态并输入注册码(如果在安装过程中没有注册),并且调整部分与代理模式操作相关的产品功能,UTILITY是由三个页面组成的属性表
Trial page允许你浏览TIRAL状态并输入注册码(如果在安装过程中没有注册)
Settings page
这页包含对下列参数的编辑框

Helper URL
这个参数影响过滤器和代理模块之间的联系方式,它即可以是以点做前缀的文件扩展名(如 .isrwhlp)也可以是绝对路径,
第一种情况下扩展名将追加在初始请求URI上并且代理模块竟通过SCRIPT MAP激活,缺省扩展名isrwhlp在安装进程中加在global script map 中,如果你改变这个扩展名或者你的应用不继承global script map 设置你应该手动添加向script map 所需求的入口。这个应该有如下参数
Executable: An absolute path to the rwhelper.dll in the short form
Extension: Desired extension (.isrwhlp is default)
Verbs radio button: All Verbs
Script engine checkbox: Checked
Check that file exists checkbox: Unchecked
我们已经创建了一个WSH script proxycfg.vbs ,可以简单在一个a script maps中注册,她位于安装文件夹并且可以在命令行一如下方式运行
cscript proxycfg.vbs [-r] [MetabasePath]
Optional -r 强制注册扩展名
Optional MetabasePath parameter allows specification of the first metabase key to process. By default it is “/localhost/W3SVC”.
要在所有现存的 script maps 中注册你可以以如下命令行激活 script
cscript proxycfg.vbs -r
第二种情况下你应该提供一个URI作为’Helper URL’的值,你也应该map 一个 ISAPI_Rewrite的安装文件夹作为美意个站点的虚拟文件家
注意:根据顾客反应,IIS5(也许包括IIS4)对长目录名有问题。所以我们强烈推荐使用短目录名
Worker threads limit
这个参数限制在代理扩展线程池中工作线程数,缺省为0意味着这个限制等于处理器数量乘以2
Active threads limit
这个参数限制当前运行线程数,这个数量不可大于”Worker threads limit”. 缺省0意思是等于处理器数量
Queue size 这个参数定义最大请求数量,如果你曾经看到Queue timeout expired” 信息在 the Application event log中你可以增加这个参数
Queue timeout
这个参数定义你在内部请求队列中防止新请求的最大等待时间,如果你曾经看到Queue timeout expired” 信息在 the Application event log中你可以增加这个参数
Connect timeout
以毫秒设定代理模块连接超时
Send timeout
以毫秒设定代理模块发送超时
Receive timeout
以毫秒设定代理模块发送超时
About page.
It contains copyright information and a link to the ISAPI_Rewrite’s web site.

Regular expression syntax
这一部分覆盖了 ISAPI_Rewrite规定的表达句法
Literals
所有字符都是原意除了 “.”, “*”, “?”, “+”, “(”, “)”, “{”, “}”, “[”, “]”, “^” and “$”.,这些字符在用“\”处理时是原意,原意指一个字符匹配自身
Wildcard
The dot character “.” matches any single character except null character and newline character
以下为句法
Repeats
A repeat is an expression that is repeated an arbitrary number of times. An expression followed by “*” can be repeated any number of times including zero. An expression followed by “+” can be repeated any number of times, but at least once. An expression followed by “?” may be repeated zero or one times only. When it is necessary to specify the minimum and maximum number of repeats explicitly, the bounds operator “{}” may be used, thus “a{2}” is the letter “a” repeated exactly twice, “a{2,4}” represents the letter “a” repeated between 2 and 4 times, and “a{2,}” represents the letter “a” repeated at least twice with no upper limit. Note that there must be no white-space inside the {}, and there is no upper limit on the values of the lower and upper bounds. All repeat expressions refer to the shortest possible previous sub-expression: a single character; a character set, or a sub-expression grouped with “()” for example.

Examples:

“ba*” will match all of “b”, “ba”, “baaa” etc.
“ba+” will match “ba” or “baaaa” for example but not “b”.
“ba?” will match “b” or “ba”.
“ba{2,4}” will match “baa”, “baaa” and “baaaa”.
Non-greedy repeats
Non-greedy repeats are possible by appending a ‘?’ after the repeat; a non-greedy repeat is one which will match the shortest possible string.

For example to match html tag pairs one could use something like:

“< \s*tagname[^>]*>(.*?)< \s*/tagname\s*>“

In this case $1 will contain the text between the tag pairs, and will be the shortest possible matching string.

Parenthesis
Parentheses serve two purposes, to group items together into a sub-expression, and to mark what generated the match. For example the expression “(ab)*” would match all of the string “ababab”. All sub matches marked by parenthesis can be back referenced using \N or $N syntax. It is permissible for sub-expressions to match null strings. Sub-expressions are indexed from left to right starting from 1, sub-expression 0 is the whole expression.

Non-Marking Parenthesis
Sometimes you need to group sub-expressions with parenthesis, but don’t want the parenthesis to spit out another marked sub-expression, in this case a non-marking parenthesis (?:expression) can be used. For example the following expression creates no sub-expressions:

“(?:abc)*”

Alternatives
Alternatives occur when the expression can match either one sub-expression or another, each alternative is separated by a “|”. Each alternative is the largest possible previous sub-expression; this is the opposite behaviour from repetition operators.

Examples:

“a(b|c)” could match “ab” or “ac”.
“abc|def” could match “abc” or “def”.
Sets
A set is a set of characters that can match any single character that is a member of the set. Sets are delimited by “[” and “]” and can contain literals, character ranges, character classes, collating elements and equivalence classes. Set declarations that start with “^” contain the compliment of the elements that follow.

Examples:

Character literals:

“[abc]” will match either of “a”, “b”, or “c”.
“[^abc] will match any character other than “a”, “b”, or “c”.
Character ranges:

“[a-z]” will match any character in the range “a” to “z”.
“[^A-Z]” will match any character other than those in the range “A” to “Z”.
Character classes
Character classes are denoted using the syntax “[:classname:]” within a set declaration, for example “[[:space:]]” is the set of all whitespace characters. The available character classes are:

alnum Any alpha numeric character.
alpha Any alphabetical character a-z and A-Z. Other characters may also be included depending upon the locale.
blank Any blank character, either a space or a tab.
cntrl Any control character.
digit Any digit 0-9.
graph Any graphical character.
lower Any lower case character a-z. Other characters may also be included depending upon the locale.
print Any printable character.
punct Any punctuation character.
space Any whitespace character.
upper Any upper case character A-Z. Other characters may also be included depending upon the locale.
xdigit Any hexadecimal digit character, 0-9, a-f and A-F.
word Any word character - all alphanumeric characters plus the underscore.
unicode Any character whose code is greater than 255, this applies to the wide character traits classes only.

There are some shortcuts that can be used in place of the character classes:

\w in place of [:word:]
\s in place of [:space:]
\d in place of [:digit:]
\l in place of [:lower:]
\u in place of [:upper:]
Collating elements
Collating elements take the general form [.tagname.] inside a set declaration, where tagname is either a single character, or a name of a collating element, for example [[.a.]] is equivalent to [a], and [[.comma.]] is equivalent to [,]. ISAPI_Rewrite supports all the standard POSIX collating element names, and in addition the following digraphs: “ae”, “ch”, “ll”, “ss”, “nj”, “dz”, “lj”, each in lower, upper and title case variations. Multi-character collating elements can result in the set matching more than one character, for example [[.ae.]] would match two characters, but note that [^[.ae.]] would only match one character.

Equivalence classes
Equivalenceclassestakethegeneralform[=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].

To include a literal “-” in a set declaration then: make it the first character after the opening “[” or “[^”, the endpoint of a range, a collating element, or precede it with an escape character as in “[\-]”. To include a literal “[” or “]” or “^” in a set then make them the endpoint of a range, a collating element, or precede with an escape character.

Line anchors
An anchor is something that matches the null string at the start or end of a line: “^” matches the null string at the start of a line, “$” matches the null string at the end of a line.

Back references
A back reference is a reference to a previous sub-expression that has already been matched, the reference is to what the sub-expression matched, not to the expression itself. A back reference consists of the escape character “\” followed by a digit “1″ to “9″, “\1″ refers to the first sub-expression, “\2″ to the second etc. For example the expression “(.*)\1″ matches any string that is repeated about its mid-point for example “abcabc” or “xyzxyz”. A back reference to a sub-expression that did not participate in any match, matches the null string. In ISAPI_Rewrite all back references are global for entire RewriteRule and corresponding RewriteCond directives. Sub matches are numbered up to down and left to right beginning from the first RewriteCond directive of the corresponding RewriteRule directive, if there is one.

Forward Lookahead Asserts
There are two forms of these; one for positive forward lookahead asserts, and one for negative lookahead asserts:

“(?=abc)” matches zero characters only if they are followed by the expression “abc”.
“(?!abc)” matches zero characters only if they are not followed by the expression “abc”.

Word operators
The following operators are provided for compatibility with the GNU regular expression library.

“\w” matches any single character that is a member of the “word” character class, this is identical to the expression “[[:word:]]”.
“\W” matches any single character that is not a member of the “word” character class, this is identical to the expression “[^[:word:]]”.
“\< " matches the null string at the start of a word.
“\>” matches the null string at the end of the word.
“\b” matches the null string at either the start or the end of a word.
“\B” matches a null string within a word.
Escape operator
The escape character “\” has several meanings.

The escape operator may introduce an operator for example: back references, or a word operator.
The escape operator may make the following character normal, for example “\*” represents a literal “*” rather than the repeat operator.
Single character escape sequences:
The following escape sequences are aliases for single characters:
Escape sequence Character code Meaning
\a 0×07 Bell character.
\t 0×09 Tab character.
\v 0×0B Vertical tab.
\e 0×1B ASCII Escape character.
\0dd 0dd An octal character code, where dd is one or more octal digits.
\xXX 0xXX A hexadecimal character code, where XX is one or more hexadecimal digits.
\x{XX} 0xXX A hexadecimal character code, where XX is one or more hexadecimal digits, optionally a unicode character.
\cZ z-@ An ASCII escape sequence control-Z, where Z is any ASCII character greater than or equal to the character code for ‘@’.

Miscellaneous escape sequences:
The following are provided mostly for perl compatibility, but note that there are some differences in the meanings of \l \L \u and \U:

Escape sequence Meaning
\w Equivalent to [[:word:]].
\W Equivalent to [^[:word:]].
\s Equivalent to [[:space:]].
\S Equivalent to [^[:space:]].
\d Equivalent to [[:digit:]].
\D Equivalent to [^[:digit:]].
\l Equivalent to [[:lower:]].
\L Equivalent to [^[:lower:]].
\u Equivalent to [[:upper:]].
\U Equivalent to [^[:upper:]].
\C Any single character, equivalent to ‘.’.
\X Match any Unicode combining character sequence, for example “a\x 0301″ (a letter a with an acute).
\Q The begin quote operator, everything that follows is treated as a literal character until a \E end quote operator is found.
\E The end quote operator, terminates a sequence begun with \Q.
What gets matched?
The regular expression will match the first possible matching string, if more than one string starting at a given location can match then it matches the longest possible string. In cases where their are multiple possible matches all starting at the same location, and all of the same length, then the match chosen is the one with the longest first sub-expression, if that is the same for two or more matches, then the second sub-expression will be examined and so on. Note that ISAPI_Rewrite uses MATCH algorithm. The result is matched only if the expression matches the whole input sequence. For example:

RewriteCond URL ^/somedir/.* #will match any request to somedir directory and subdirectories, while
RewriteCond URL ^/somedir/ #will match only request to the root of the somedir.
Special note about “pathological” regular expressions
ISAPI_Rewrite uses a very powerful regular expressions engine Regex++ written by Dr. John Maddock. But as any real thing it’s not ideal: There exists some “pathological” expressions which may require exponential time for matching; these all involve nested repetition operators, for example attempting to match the expression “(a*a)*b” against N letter a’s requires time proportional to 2N. These expressions can (almost) always be rewritten in such a way as to avoid the problem, for example “(a*a)*b” could be rewritten as “a*b” which requires only time linearly proportional to N to solve. In the general case, non-nested repeat expressions require time proportional to N2, however if the clauses are mutually exclusive then they can be matched in linear time - this is the case with “a*b”, for each character the matcher will either match an “a” or a “b” or fail, where as with “a*a” the matcher can’t tell which branch to take (the first “a” or the second) and so has to try both.

Boost 1.29.0 Regex++ could detect “pathological” regular expressions and terminate theirs matching. When a rule fails ISAPI_Rewrite sends “500 Internal Server error - Rule Failed” status to a client to indicate configuration error. Also the failed rule is disabled to prevent performance losses
Format string syntax
In format strings, all characters are treated as literals except: “(”, “)”, “$”, “\”, “?”, “:”.

To use any of these as literals you must prefix them with the escape character \

The following special sequences are recognized:

Grouping:
Use the parenthesis characters ( and ) to group sub-expressions within the format string, use \( and \) to represent literal ‘(’ and ‘)’.

Sub-expression expansions:
The following perl like expressions expand to a particular matched sub-expression:

$` Expands to all the text from the end of the previous match to the start of the current match, if there was no previous match in the current operation, then everything from the start of the input string to the start of the match.
$’ Expands to all the text from the end of the match to the end of the input string.
$& Expands to all of the current match.
$0 Expands to all of the current match.
$N Expands to the text that matched sub-expression N.

Conditional expressions:
Conditional expressions allow two different format strings to be selected dependent upon whether a sub-expression participated in the match or not:

?Ntrue_expression:false_expression

Executes true_expression if sub-expression N participated in the match, otherwise executes false_expression.

Example: suppose we search for “(while)|(for)” then the format string “?1WHILE:FOR” would output what matched, but in upper case.

Escape sequences:
The following escape sequences are also allowed:
\a The bell character.
\f The form feed character.
\n The newline character.
\r The carriage return character.
\t The tab character.
\v A vertical tab character.
\x A hexadecimal character - for example \x0D.
\x{} A possible unicode hexadecimal character - for example \x{1A0}
\cx The ASCII escape character x, for example \c@ is equivalent to escape-@.
\e The ASCII escape character.
\dd An octal character constant, for example \10
Examples例子
Emulating host-header-based virtual sites on a single site
例如你在两个域名注册www.site1.comwww.site2.com,现在你可以创建两个不同的站点而使用单一的物理站点。把以下规则加入到你的httpd.ini 文件
[ISAPI_Rewrite]

#Fix missing slash char on folders
RewriteCond Host: (.*)
RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,R]

#Emulate site1
RewriteCond Host: (?:www\.)?site1\.com
RewriteRule (.*) /site1$1 [I,L]

#Emulate site2
RewriteCond Host: (?:www\.)?site2\.com
RewriteRule (.*) /site2$1 [I,L]
现在你可以把你的站点放在/site1 和 /site2 目录中.

或者你可以应用更多的类规则:
[ISAPI_Rewrite]

#Fix missing slash char on folders
RewriteCond Host: (.*)
RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,R]

RewriteCond Host: (www\.)?(.+)
RewriteRule (.*) /$2$3
为站点应该命名目录为 /somesite1.com, /somesite2.info, etc.
Using loops (Next flag) to convert request parameters
假如你希望有物理URL如 http://www.myhost.com/foo.asp?a=A&b=B&c=C 使用请求如 http://www.myhost.com/foo.asp/a/A/b/B/c/C 参数数量可以从两个请求之间变化

至少有两个解决办法。你可以简单的为每一可能的参数数量添加一个分隔规则或者你可以使用一个技术说明如下面的例子
ISAPI_Rewrite]
RewriteRule (.*?\.asp)(\?[^/]*)?/([^/]*)/([^/]*)(.*) $1(?2$2&:\?)$3=$4$5 [NS,I]
这个规则将从请求的URL中抽取一个参数追加在请求字符的末尾并且从头重启规则进程。所以它将循环直到所有参数被移动到适当的位置,或者直到超过RepeatLimit
也存在许多这个规则的变种。但使用不同的分隔字符,例如。使用URLS如http://www.myhost.com/foo.asp~a~A~b~B~c~C 可以应中下面的规则:
ISAPI_Rewrite]
RewriteRule (.*?\.asp)(\?[^~]*)?~([^~]*)~([^~]*)(.*) $1(?2$2&:\?)$3=$4$5 [NS,I]
Running servers behind IIS
假如我们有一个内网服务器运行IIS而几个公司服务器运行其他平台,这些服务器不能从INTERNET直接进入,而只能从我们公司的网络进入,有一个简单的例子可以使用代理标记映射其他服务器到IIS命名空间:
[ISAPI_Rewrite]
RewriteProxy /mappoint(.+) http\://sitedomain$1 [I,U]
Moving sites from UNIX to IIS
这个规则可以帮助你把URL从 /~username 改变到 /username 和从 /file.html 改变到 /file.htm. 这个在你仅仅把你的站从UNIX移动到IIS并且保持搜索引擎和其他外部页面对老页面的连接时是有用的
[ISAPI_Rewrite]

#redirecting to update old links
RewriteRule (.*)\.html $1.htm
RewriteRule /~(.*) http\://myserver/$1 [R]
Moving site location
许多网管问这样的问题:他们要重定向所有的请求到一个新的网络服务器,当你需要建立一个更新的站点取代老的的时候经常出现这样的问题,解决方案是用ISAPI_Rewrite 于老服务器中
[ISAPI_Rewrite]

#redirecting to update old links
RewriteRule (.+) http\://newwebserver$1 [R]

Browser-dependent content
Dynamically generated robots.txt
robots.txt是一个搜索引擎用来发现能不能被索引的文件,但是为一个大站创建一个有许多动态内容的这个文件是很复杂的工作,我们可以写一个robots.asp script

现在使用单一规则生成 robots.txt
[ISAPI_Rewrite]

RewriteRule /robots\.txt /robots.asp
Making search engines to index dynamic pages
站点的内容存储在XML文件中,在服务器上有一个/XMLProcess.asp 文件处理XML文件并返回HTML到最终用户,URLS到文档有如下形式
http://www.mysite.com/XMLProcess.asp?xml=/somdir/s...
但是许多公共引擎不能索引此类文档,因为URLS包含问号(文档动态生成),
ISAPI_Rewrite可以完全消除这个问题
[ISAPI_Rewrite]

RewriteRule /doc(.*)\.htm /XMLProcess.asp\?xml=$1.xml
现在使用如同http://www.mysite.com/doc/somedir/somedoc.htm的URL进入文档,搜索引擎将不知道不是somedoc.htm 文件并且内容是动态生成的
Negative expressions (NOT
有时当模式不匹配你需要应用规则,这种情况下你可以使用在规则表达式中称为Forward Lookahead Asserts
例如你需要不使用IE把所有用户移动到别的地点
[ISAPI_Rewrite]
# Redirect all non Internet Explorer users
# to another location
RewriteCond User-Agent: (?!.*MSIE).*
RewriteRule (.*) /nonie$1
Dynamic authentification
例如我们在站点上有一些成员域,我们在这个域上需要密码保护文件而我们不喜欢用BUILT-IN服务器安全,这个情况下可以建立一个ASP脚本(称为proxy.asp),这个脚本将代理所有请求到成员域并且检查请求允许,这里有一个简单的模板你可以放进你自己的授权代码
现在我们要通过配置 ISAPI_Rewrite 通过这个页面代理请求:

[ISAPI_Rewrite]
# Proxy all requests through proxy.asp
RewriteRule /members(.+) /proxy.asp\?http\://mysite.com/members$1
Blocking inline-images (stop hot linking

假设我们在http://www.mysite.com/下有些页面有一些内联 GIF图片很好,他人可以不直接协商通过盗链到他们的页面上,我们不喜欢这样因为加大了服务器流量
当我们不能100%保护图片,我们至少可以在浏览器发送一个HTTP Referer header的地方限制这种情况
[ISAPI_Rewrite]
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|png) /block.gif [I,O]

注:ISAPI_Rewrite分精简(Lite)和完全(Full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理.不过对于有服务器的朋友,精简版也就够啦.精简版下载地址:http://www.helicontech.com/download/,就是那Lite Version (free)啦.
我把BO-BLOG相关资料整理在这里,以方便大家查阅提供帮助.

本手册最后修正于: 2005年12月15日
最后适用的版本: 2.0.1

第一部分 风格组成

一个完整的Bo-Blog 2.0的风格(以下简称风格)由以下几个部分组成:
风格文件夹,位于template/文件夹下
|- 风格的CSS文件 style.css;
|- 风格的图片文件夹;
|- 风格的信息文件 info.php;
|- 风格的结构定义文件 element.php;
|- 风格的缩略图文件。

其中,粗体字标出的文件为必需。

这些文件的作用和注释如下:
1. CSS文件
该文件是整个风格的最主要部分,我们建议所有的风格都尽力在配合默认架构 default/template.php 文件的基础上修改。也就是说,建议只修改CSS文件达到您想要的效果,而不是修改模板架构本身。CSS+DIV的网页排版方式符合标准,也能创造出风格迥异的丰富效果来。
有关CSS文件中各个Class的命名和对应区域,请阅读第三部分。

2. 风格的图片文件夹
我们建议您在专门建立一个文件夹以存放该风格用到的图片,而不是将所有图片都存放在风格的根目录下。
推荐您在风格所在的文件夹下建立images子文件夹,放置用到的图片文件。

3. 风格的信息文件 info.php
这个文件存放了风格的作者等重要信息。它必须是没有错误的PHP文件,编码必须采用UTF-8。(我们推荐使用的文本编辑器见第二部分。)
下面是默认风格的 info.php ,存在于 template/default/ 文件夹下。结合这个文件为您说明该文件的结构。注意:双斜杠 // 后面以及 和 /* 与 */ 之间的文字为注释,事实上您的文件不需要包括这些注释。



<?PHP
//PHP文件开始。
//请使用这样的形式而不是short tag,即:不要缩写成 <? ,也不要写成 <%,尽管这样可能也能被识别。

$template['id']="60A13BBE-C069-47A1-A0A1-FA7C4ECCAA47";
//这一行的引号中是这个风格的ID。ID是便于程序识别一个风格的一个字符串,可以是任何拉丁字符、数字等。比如 mystyle、style200601等都是允许的。但为了减少你的ID和任何人发布的其它风格重复的概率,建议您将ID设置得复杂一些。一个建议是像默认风格这样使用GUID。

$template['name']="Default";
//引号中是这个风格的名字。

$template['author']="Bob Shen";
//引号中是这个风格的作者。注意这里是支持HTML代码的。

$template['intro']="Default skin of Bo-blog 2.0.1.";
//引号中是这个风格的简介。

$template['dirname']="default";
//引号中是这个风格所在文件夹的名字。假如您的风格名为pure,那么它的所有文件就应该存放在 template/pure/ 下,而这里的值也应该改为 pure。

$template['thumbnail']="thumb.jpg";
//引号中是这个风格的缩略图文件的文件名。缩略图应该放置在这个风格文件夹下。文件名在此指定。

$template['structure']="template/default/elements.php";
//引号中是这个风格的结构定义文件的位置和文件名。对于只修改CSS就能完成的风格,您不必再在风格文件夹中放置一个 elements.php,而完全可以采用默认的,也就是保持该行不修改。

$template['images']="template/default/images";
//引号中指定了blog界面上的部分图片的位置。这些图片包括RSS图标、上/下一篇日志的图标等等。具体的文件名请阅读第四部分。

$template['css'][0]="template/default/styles.css";
/* 引号中是CSS文件的位置和文件名。Bo-Blog 2.0支持同一风格载入多个CSS。因此这里可以写成数组的形式。比如,如果您的风格用到了3个CSS文件,分别是 structure.css、style.css、extra.css,您可以写成:
$template['css'][0]="template/default/structure.css";
$template['css'][1]="template/default/style.css";
$template['css'][2]="template/default/extra.css";
注意数组上标从 0 开始。
这些css文件会被程序自动全部载入模板。*/



4. 风格的结构定义文件 element.php
这也是一个PHP文件,也必须使用UTF-8编码。它规定了模板的结构,也就是各个区域具体的HTML代码。有关这个文件的详细说明,请参考第五部分。

5. 风格缩略图文件
大小是400*300像素,建议为JPG、GIF和PNG格式。为了不增加额外的空间负担,不建议您截取精读太高的缩略图。
(第一部分完,待续)

第二部分 一些建议和要求

1. 文本编辑器
编辑文本文件的编辑器可谓多如牛毛,您完全可以选择最顺手的使用。但是有一些情况您需要了解。
Bo-Blog采用 UTF-8 编码,因此所有文本文件(风格中涉及的是PHP文件)必须储存为 UTF-8 编码。另外,部分文本编辑软件,如Dreamweaver、记事本等,在保存UTF-8文件时会在文件最开始加入UTF-8识别记号(BOM)。BOM在WINDOWS下打开文件时不可见,但PHP在读取文件时仍会将其作为文件的一部分,由此会产生cookie失效(无法登入),模板无法顶住页面顶部等现象。

解决的方法:
建议您使用 Editplus 2.12 或者 EmEditor 编辑PHP文件。它们对无BOM的UTF-8文件兼容较好;
UltraEdit用户需将 Write UTF-8 BOM header to ALL UTF-8 files when saved 选项设置为关;
其它文本编辑器用户,在编辑完后如发现程序异常,可参考这篇文章解决。

2. 针对发布者的建议
您可以将您修改、制作的风格发布到论坛的2.0模板风格专版,我们会非常感谢您的分享。
对于出色的风格,将被收入官方网站的“风格”栏目(筹)。

对发布者有这样的一些建议:
1. 兼容性
建议您在制作风格时考虑到浏览器的兼容问题。由于 2.0 采用的是CSS+DIV布局,因此可能在不同的浏览器上存在不同的显示效果。建议您在发布时考虑到主流浏览器的兼容问题。一个方法是:在发布的帖子里注明:在IE下测试通过;暂不兼容Firefox;可在IE、Fx、Opera下正确显示 等等类似的字样。
对于收入官方风格栏目的风格,至少需要做到同时与IE和Firefox兼容。

2. thumb.db
Windows XP会在您的图片文件夹下生成一个名为 thumb.db 的隐藏文件。当您把这个文件也打包到压缩包里时,会导致压缩文件体积增大不少!所以建议您不要把这个文件放到压缩包里。以常用软件winrar为例,可以在压缩完成后,打开压缩文件,就能看到这个文件是否存在了。

3. 压缩格式
推荐的压缩包格式为: Zip和Gzip两种。

4. 源文件
您可以自主决定是否将图片的源文件放入压缩包。如果您不打算提供源文件的话,建议您提供一张没有加过自己站名的空白logo图,方便下载者修改。当然,这都出于自愿。

5. elements.php 文件
这个文件可能会随着程序的不断完善而不断修改,因此如果非必要,建议您使用默认的elements.php,也就是在风格的info.php中将structure指向template/default/elements.php(请参考第一部分的说明)。

(第二部分完,待续)

(接上,第三部分继续)

2. CSS详解
下面介绍主要的CSS类的用途和一些说明。请参考整体框架图阅读。

2.1 整体框架
#wrapper - 整个页面的框架。
#innerWrapper - 内嵌在wrapper里的整个页面的框架。

2.2 顶部框架
#header - 整个顶部框架
#innerHeader - 内嵌在header里的框架。
.blog-header - 包含blog标题和描述。
h1 - blog的标题。
.blog-desc - blog的描述语。
menu - blog的顶部模块(导航条)。

2.3 主体框架
#mainWrapper - 整个主体部分的框架,包含了侧边栏和主内容这两个框架。

2.4 侧边栏框架
.sidebar - 整个侧边栏框架。
#innerSidebar - 内嵌在sidebar内的框架。
.sidebar-hide - 当侧边栏关闭时的侧边栏样式。(display: none;)
.panel - 具体到某一个侧边栏项目的总框架。
.panel h5 - 侧边栏项目的抬头部分。
.panel-content - 侧边栏项目的主要内容区域。
.panel-content li - 侧边栏包含列表项的样式。
.panel-content li.indent - 侧边栏列表项缩进后的样式(如链接前的列表符号)。
.search-field - 搜索框样式。

2.5 主内容框架
.content - 主内容的总框架。
#innerContent - 内嵌于content的框架。
.announce - 公告框样式。
.announce-content - 公告内容样式。
.article-top - 分页条(位于顶部)样式。
.article-bottom - 分页条(位于底部)样式。
.pages - 分页条文字样式。
.pagelink-current - 当前页文字样式。
..textbox - 每篇日志的总框架。
.textbox-title - 日志标题位置样式。
.textbox-title h4 - 日志标题文字样式。
.textbox-label - 发表日期栏样式。
.textbox-fontsize - 日志工具条(字号选择等)样式。
.textbox-content - 日志内容样式。
.textbox-bottom - 日志底部工具条样式。
.textbox-adminbar - 管理工具条样式。
.textbox-tburl - Trackback地址条样式。
.tags - tags显示条样式。
.prev-article - 上一篇提示文字样式。
.next-article - 下一篇提示文字样式。

2.6 日历部分
#calendar - 日历总框架。
.calendar-main - 日历总体样式。
.calendar-top - 日历顶端文字样式。
.calendar-year - 年的样式。
.calendar-month - 月的样式。
.calendar-weekday-cell - 星期的样式。
.calendar-day - 普通工作日样式。
.calendar-saturday - 星期六的样式。
.calendar-sunday - 星期日的样式。
.calendar-today - 今日样式。

2.7 评论显示框
.commentbox - 单条评论(或留言,下同)整体框架。
.commentbox-title - 评论标题样式。
.commentbox-label - 评论日期文字样式。
.commentbox-content - 评论内容样式。
.trackbackbox - 单条trackback框架。
.trackbackbox-title - trackback标题样式。
.trackbackbox-label - trackback日期文字样式。
.trackbackbox-content - trackback内容样式。

2.8 表格样式
.listbox - 表格整体框架。
.listbox-table - 表格的宽度。
.listbox-header - 表格头部文字样式。
.listbox-entry - 表格正文文字样式。

2.9 添加评论框
.formbox - 评论表单所在框。
.formbox-title - 评论表单标题文字样式。
.panel-smilies - 表情选择栏。
.panel-smilies-title - 表情栏文字样式。
.panel-smilies-content - 表情栏内容样式。

2.10 提示页样式
.messagebox - 消息框整体。
.messagebox-title - 消息框标题。
.messagebox-content - 消息框内容样式。
.messagebox-bottom - 消息框底部文字样式。

2.11 细节样式
.code - 代码框样式。
.quote - 引用框整体框架。
.quote-title - 引用框标题文字样式。
.quote-content - 引用框内容样式。

2.12 底部框架
#footer - 底部总框架。
#innerFooter - 底部内嵌框架。

(第三部分完)

(接上)
第四部分 风格所需图片

以下介绍位于 $template['images'] 所在位置(参考第一部分)的图片名称和作用:

detail.gif - 查看用户列表时,点击查看用户资料的图标(默认:一个小人)
download.gif - 使用[ file ]下载UBB标签后,文件下载框中的图标(默认:一个磁盘)
email.gif - 评论和留言中,点击给他/她发邮件的图标(默认:一个信封)
folder.gif - 展开/折叠被折叠的置顶日志的图标(默认:两个向下的箭头)
homepage.gif - 评论和留言中,点击访问他/她的主页的图标(默认:一个外部链接箭头)
ip.gif - 评论和留言中,点击查看他/她的IP来源的图标(默认:一个放大镜)
readmore.gif - 查看更多内容(默认:多页纸重叠)
real.gif - Real文件播放框内的图标(默认:RealOne的图标)
rss.png - 侧边栏分类名称旁的RSS链接所用图标(默认:写有rss字样的方框)
swf.gif - Flash文件播放框内的图标(默认:Flash的图标)
toolbar_fontsize.gif - 日志阅读工具栏的字体大小提示图标(默认:一个向右的箭头)
toolbar_next.gif - 日志阅读工具栏的下一篇日志提示图标(默认:一个向下的箭头)
toolbar_previous.gif - 日志阅读工具栏的上一篇日志提示图标(默认:一个向上的箭头)
toolbar_rss.gif - 日志阅读工具栏的本文rss链接的图标(默认:写有rss字样的小方框)
toolbar_save.gif - 日志阅读工具栏的保存本文的图标(默认:一页纸)
trackback.gif - Trackback条目前的提示图标(默认:一个气泡)
viewimage.gif - 查看图片前的链接图标(默认:一张照片)
wmp.gif - Windows Media Player文件播放框内的图标(默认:WMP的图标)

提示:
IE 7.0以前的版本不能正确显示PNG的透明色。在制作 rss.png时需注意。

(第四部分完,待续)



第五部分 elements.php文件

下面解释elements.php文件的作用和内容。
这个文件里定义了各个部分的html表现代码。之所以设立这样一个文件,是为了满足在仅仅修改css无法达到布局更改时的需求。

这个文件的内容就是一些赋值语句。形式为 $elements[ElementName]=ElementHtmlCode; 。
Element的名称和含意对照如下:

$elements['header'] 文件开始
$elements['displayheader'] 顶部
$elements['mainpage'] 日志页面
$elements['otherpage'] 其它页面
$elements['displayside'] 侧边栏
$elements['displayfooter'] 底部
$elements['footer'] 文件结束
$elements['msgbox'] 出错/成功信息提示框
$elements['sideblock'] 侧栏项目
$elements['excerpt'] 摘要
$elements['excerptontop'] 置顶的摘要
$elements['viewentry'] 查看日志
$elements['listbody'] 日志列表
$elements['list'] 日志列表单行
$elements['comment'] 评论
$elements['trackback'] 引用
$elements['form_reply'] 评论发表框
$elements['endviewentry'] 查看日志的补充
$elements['entryadditional'] “查看更多”区域
$elements['login'] 登入表单
$elements['contentpage'] 内容页
$elements['taglist'] tags
$elements['register'] 注册表单
$elements['normaltable'] 一般表格
$elements['normaltablewithtitle'] 一般表格(带有表格标题)
$elements['form_eachline'] 表格一行
$elements['eachlink'] 链接页(单项)
$elements['linkdiv'] 链接页(组)
$elements['tips'] 提示信息的页面

1. 被替换标签以 {开头,以}结束,在模板解析时会被替换为实际的内容。例如,星标的标签为
由于这里的标签很多,时间有限暂不一一讲解,大部分标签都是可以顾名思义的,在制作模板时可以边测试边修改。

2. 不同侧边栏项目的区块可以分别定义。
例如,$elements['sideblock_categories'] 可定义名为 categories 的项目(即分类项目)的html。
形式为 sideblock_itemname 。当一个item显示时,如果有 $elements['sideblock_item'] ,则优先使用此处的定义,否则使用默认($elements['sideblock'])。

(全文完)

附:风格制作手册Flash阅读版下载:

[swf width=400 height=100]up/boblog-skintutorial.swf[/swf]



2.0 模块配置帮助  


1. 什么是模块?什么是项目?
在2.0中,规定了三个可以任意添加代码的地方,分别是顶部的导航栏(顶部模块)、侧边栏(侧边模块)和页面底部(底部模块)。每个“模块”允许用户通过自建“项目”的方法,添加一段代码,增添一个链接,起到扩充blog功能的作用。
模块和项目功能的意义在于,不必再为了添加代码(比如加一个计数器、加狗狗的广告)而修改模板甚至修改源程序,并且可以通过项目自动安装文件自动添加。

2. 如何添加一个项目?
项目有两种添加方式:手动或者自动。

3. 如何手动增加项目?
请依次点击:
常规管理 - 模块配置 - 新增/编辑项目,然后选择该项目应该出现的位置,即可出现添加页面。
添加完毕的项目将出现在模块的项目管理中,可启用、禁用、删除、编辑和排序。

4. 为什么我加入的广告/计数器/blog联播代码不显示?
这样的代码多半是j avascript脚本。由于系统的原因,您插入的代码中的换行符号将被清除。因此如果js代码中有注释行( // <!-- --> /* */ ),那么该行之后的所有内容都会被当成注释而不执行,也就出现了添加无效的问题。
要解决这个问题,请在添加时删除所有的注释行。这些注释删除并不会影响您的代码执行的效果。
比如,以google广告的部分代码为例:


以下是代码:

<script type="text/j avascript">
<!--
google_ad_client = "pub-12345678";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "660000";
google_color_bg = "7D2626";
google_color_link = "FFFFFF";
google_color_url = "DAA520";
google_color_text = "BDB76B";
//-->
</script>


其中的 <!-- 和 //--> 两行是注释*,直接添加进侧边模块后不能显示,需要删除这两行。
识别注释的方法很简单,// (两斜杠)符号所在的一行,从/*到*/之间的所有行,都是注释。
注: *这两个符号严格来说不是注释,而是为了兼容不支持js的浏览器而书写的。

5. 为什么添加的模块项目无法删除和修改?
在2.0.1 RC 1(含)以前的版本中,项目的名字不能为中文,否则会造成无法识别而无法删除。在2.0.1 RC 2中这个问题被修正。

6. 哪些东东可以通过项目添加而不必改源程序?
可以添加的代码种类包括:
顶部模块可添加:导航栏中的链接,适合添加转向链接等。
侧边模块可添加:与“日历”、“分类”等系统自带侧边项目风格一致的功能区,适合广告、flash音乐播放器、天气预报等大块显示的内容。
底部模块可添加:HTML内容,适合用于添加底部的横幅广告、放在页底的计数器、不出现实质内容的js(例如弹出窗口代码)等。

7. 为什么系统自带的项目无法编辑和删除?
因为这些项目的代码都写在了程序里,而不是像自定义项目那样用专门的数据文件储存。

8. 可以用php代码吗?
可以。侧边栏项目的内容和底部模块的内容是支持内嵌PHP代码的。不过,您需要将代码以base64_encode函数编码,然后以 <php>代码</php> 的形式插入。
在“模板选择器”这个侧边模块项目中,就采用了内嵌php代码的方法。否则这种动态内容靠html和js是无法实现的。

您可以将您自己改写、原创的项目制作成一个自动安装文件,分享给其他的用户。这样,别人就可以直接使用自动安装的功能来添加一个模块项目了。

巧妙提高激光打印机打印效果

由于激光打印机具有很高的打印质量以及很方便的操作性能,因此许多办公用户都愿意选择激光打印机来打印材料。

   但是如果激光打印机在长时间地使用后,激光打印机内部的硒鼓很容易产生疲劳现象,这种疲劳现象会导致硒鼓表面不容易退电,这样就会在打印纸张上产生很深的底色,从而影响激光打印机的输出效果,那么我们有什么办法才能避免硒鼓的疲劳现象,改善激光打印机的输出效果呢?

不少用户都进行了尝试,他们认为使用三氧化二铬来擦拭硒鼓,就能将硒鼓的疲劳现象消除,但在实际操作中我们发现,这种三氧化二铬是一种固体颗粒,使用它来擦拭硒鼓时,硒鼓的表面很容易受伤,从而影响激光打印机的使用寿命。针对上面方法存在的缺陷,笔者经过多次试验又发现了另外一种比较简单的方法,这种方法既能消除硒鼓的疲劳现象,又不损伤打印机的硒鼓。

   1、一旦发现激光打印机的输出纸张上出现很深的底色时,立即打开激光打印机的外壳,然后将硒鼓小心从激光打印机中取出来;

   2、接着再细心地拆下硒鼓的外壳,在拆卸的过程中,为防止操作不慎损伤硒鼓的表面,大家可以找一块软布来将硒鼓的表面包裹住;

   3、将硒鼓的外壳拆下来以后,就立即把硒鼓放置到有阳光的地方,让它接受1到2个小时的光线照射,尽管许多激光打印机使用说明书上强调,不能将硒鼓放置到有阳光的地方,但笔者经过测试,该方法确实非常有效;

   4、接下来大家可以使用小螺丝刀在废墨盒端口处来回划动,这样就很容易地倒出废墨盒中的剩余墨粉出来,而且还能避免在倒出墨粉的过程中,墨粉到处飞扬飘舞;

   5、将从废墨盒中倒出来的墨粉统一收集起来,并再将它倒入墨粉盒中,这样就能为自己又节省一笔费用了;

   6、用细软的棉布将硒鼓的表面和墨粉盒的表面再清洁干净,然后按照正确的安装顺序来将硒鼓安装到激光打印机内部;

   7、安装完成以后,重新使用激光打印机来打印内容时,大家就会发现原先底色很深的背景没有了,而且输出效果非常清晰;

   8、使用该方法处理以后,激光打印机的硒鼓疲劳现象就会暂时消失,而且可以继续处理10000张以上的输出文稿。

激光打印机维护规范集

一、清洁工具

1、高级镜头纸:抹净感光鼓、激光头玻璃、CIS玻璃用。

2、无绒软布:抹净外壳、鼓粉壳用。

3、无水酒精(乙醇):99.7%纯度,严重的污点,用微量酒精(一点点湿)抹擦。

4、异丙醇:除面板、传感器或激光头玻璃外、其它可用微量抹擦。

5、镜头刷:1/2英寸、1/4英寸,维护硒鼓时用。

6、绒毯:不脱毛,新机放在绒毯上维护。

7、小皮老虎:橡皮吹灰用。

8、一次性塑料手套维护鼓粉用、防止墨粉污染。

9、照明灯和电筒:观察墨粉盒用,严禁照射感光鼓(硒鼓)。

10、喷雾器:放酒精。

11、中性洗涤剂或肥皂洗干净、方可正式抹擦。

二、整机清洁维护

1、清洁CIS玻璃盖板镜头纸抹擦。污点严重时,可使用美工刀片刮去修正液或胶水,使用微量无水酒精。注意:如液体流入,CIS易烧坏;切勿用异丙醇。

2、清洁白条;(白条有黑线,复印有白线)干软布抹擦、可使用微量异丙醇。

3、清洁激光头玻璃窗口镜头纸。污点严重时使用微量无水酒精。注意:(1)液体流入、严重损伤 (2)切勿用异丙醇。

4、清洁墨粉传感器镜头纸。注意:切勿用异丙醇。

5、清洁电子端子高压:干软布抹擦金属丝。

6、清洁面板干软布抹擦。污点严重时使用微量无水酒精。注意:切勿用异丙醇。

   三、硒鼓清洁维护

(一)换新鼓

1、电晕丝来回拉6次,一定要停在箭头处。

2、放鼓时才打开厚包装。避免光线照射损伤感光鼓。

3、切勿碰起动页,初用时会自动弹出。

4、装干净的墨盒:左右摇晃6次。

5、整机清洁后开机

(二)清洁硒鼓

1、中性洗涤剂洗净双手。

2、清洁外壳:干软布抹擦。

3、清洁感光鼓表面:用镜头纸抹擦,污点严重时,用微量中性洗涤剂(切忌用酸性)抹擦、最后抹干为止。

注意:(1)切勿用异丙醇。

     (2)切勿用镊子等尖锐工具划破感光膜,露出铝的白色底。(划伤不保修)

     (3)切勿光线照射。

     (4)切勿过湿的、甚至液体进入鼓内部。

     (5)切勿用棉花签、纱布、脱毛纤维抹感光鼓,卷入鼓内形成损坏。

   四、墨盒清洁维护

(一)换新墨盒

1、左右摇晃6次。

2、注意有无漏粉。

3、清洁整机和硒鼓。

4、拉掉封条、装入硒鼓内。

5、切忌灌墨粉,切忌使用非兄弟牌墨盒。

6、功能14可设置省墨模式。

(二)清洁墨盒

1、用中性洗涤剂洗净双手。

2、清洁外壳:干软布抹擦。

3、左右摇晃6次。

MySQL中的mysqldump命令使用详解


MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一半是从MySQL数据库中导出数据。有许多的原因我们需要导出数据。一个重要的原因是用于备份数据库。数据的造价常常是昂贵的,需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是,也许您希望导出数据来共享。 在这个信息技术不断成长的世界中,共享数据变得越来越常见。
比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。世界变得越来越小,信息也被共享得越来越多。有很多中导出数据得方法,它们都跟导入数据很相似。因为,毕竟,这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各样的导出数据的方法,您将学会如何用MySQL来实现数据导出。
  
  使用mysqldump:
  
  (mysqldump命令位于mysql/bin/目录中)

  mysqldump工具很多方面类似相反作用的工具mysqlimport。它们有一些同样的选项。但mysqldump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。决不会有半点让人头疼地地方。
  
  因此,如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用下面的命令:

  bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
  
  这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,可以使用下面的命令:

  bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt
  
  这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:

  bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt
  
  mysqldump工具有大量的选项,部分选项如下表:

  选项/Option 作用/Action Performed

  --add-drop-table

  这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

  --add-locks

  这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
  
  -c or - complete_insert

  这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。

  --delayed-insert 在INSERT命令中加入DELAY选项

  -F or -flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log.

  -f or -force 使用这个选项,即使有错误发生,仍然继续导出

  --full 这个选项把附加信息也加到CREATE TABLE的语句中

  -l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。

  -t or -no-create- info

  这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
  
  -d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。


在您只需要DDL语句时,可以使用这个选项。

  --opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。

  -q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

  -T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
  
  -w "WHERE Clause" or -where = "Where clause "

  如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。
  
  假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣,并且需要文件有逗号分隔,因为这样就很容易导入到Excel中。 为了完成这个人物,您可以使用下面的句子:

  bin/mysqldump –p –where "Order_Date >='2000-01-01'"
  –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

  这将会得到您想要的结果。
  
  schema:模式

  The set of statements, expressed in data definition language, that completely describe the structure of a data base.

  一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。
  
  SELECT INTO OUTFILE :

  如果您觉得mysqldump工具不够酷,就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令,这就是SELECT INTO OUTFILE 命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用mysqldump完成的功能,可以依照下面的步骤进行操作:
  
  1. 确保mysqld进程(服务)已经在运行

  2. cd /usr/local/mysql

  3. bin/mysqladmin ping ;// 如果这个句子通不过,可以用这个:mysqladmin -u root -p ping

  mysqladmin ping用于检测mysqld的状态,is alive说明正在运行,出错则可能需要用户名和密码。

  4. 启动MySQL 监听程序.

  5. bin/mysql –p Meet_A_Geek;// 进入mysql命令行,并且打开数据库Meet_A_Geek,需要输入密码

  6. 在命令行中,输入一下命令:

  SELECT * INTO OUTFILE '/home/mark/Orders.txt'
  FIELDS
  TERMINATED BY = ','
  FROM Orders
  WHERE Order_Date >= '2000-01-01'
  
  在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。
  
  比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:
  
  在mysql目录建立一个名为Report_G.rpt 的文本文件,加入下面的行:

  USE Meet_A_Geek;
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Kinnard", "Vicky");
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Kinnard", "Steven");
  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
  VALUES (NULL, "Brown", "Sam");
  SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'
  FROM Customers WHERE Customer_ID > 1;

  然后确认 mysql进程在运行,并且您在mysql目录中, 输入下面的命令:

  bin/mysql < Report_G.rpt检查您命名作为输出的文件,这个文件将会包含所有您在Customers表中输入的顾客的姓。 如您所见,您可以使用今天学到的导入/导出(import/export)的方法来帮助得到报表。
htaccess文件使用大全

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

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

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

错误文档的定位

常用的客户端请求错误返回代码:
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指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

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

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

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

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

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


文档访问的密码保护

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

zheng:y4E7Ep8e7EYV

这里密码经过加密,用户可以自己找些工具将密码加密成.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,也可以用域名来设定。

保护.htaccess文档

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

order allow,deny
deny from all

URL转向

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

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

或者整个目录的转向:

Redirect 旧目录 新目录

改变缺省的首页文件

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

DirectoryIndex 新的缺省文件名

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

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

防止盗链

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

所需要的指令如下:

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

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

RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?mydomain.com/.*$ [NC]
RewriteRule .(gif&line;jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]
分页: 5/26 第一页 上页 1 2 3 4 5 6 7 8 9 下页 最后页 [ 显示模式: 摘要 | 列表 ]