访问这些类型时,会返回以下信息:

HTTP 错误 404 - 文件或目录未找到。

原因分析:

IIS6.0取消了对某些MIME类型的支持,例如ISO,致使客户端下载出错。

解决方法:

在IIS中属性->HTTP头->MIME类型->新建。在随后的对话框中,扩展名填入.cert,MIME类型是application。

然后重启IIS。

[ 2005/03/16 22:52 | by 网络毛毛虫 ]
  有许多种原因可能导致Web站点无法正常工作,这使得系统地检查所有问题变得很困难。下面将集中分析总结导致Web站点崩溃的最常见的问题。如果可以解决这些常规问题,那么也将有能力对付出现的一些意外情况。

   磁盘已满

  导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。

  日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQL*Net的日志文件、JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与操作系统不同的文件系统中。日志文件系统空间已满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。

   C指针错误

  用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引用指针(即,访问指向的内存)中出现一个错误,就会导致操作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但使用Java对可靠性进行额外的度量则会对性能产生一些负面影响。

   内存泄漏

  C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要操作系统还在运行中,则进程就会一直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。

  解决方案之一是使用代码分析工具(如Purify)对代码进行仔细分析,以找出可能出现的泄漏问题。但这种方法无法找到由其他原因引起的库中的泄漏,因为库的源代码是不可用的。另一种方法是每隔一段时间,就清除并重启进程。Apache的Web服务器就会因这个原因创建和清除子进程。

  虽然Java本身并无指针,但总的说来,与C程序相比,Java程序使用内存的情况更加糟糕。在Java中,对象被频繁创建,而直到所有到对象的引用都消失时,垃圾回收程序才会释放内存。即使运行了垃圾回收程序,也只会将内存还给虚拟机VM,而不是还给操作系统。结果是:Java程序会用光给它们的所有堆,从不释放。由于要保存实时(Just In Time,JIT)编译器产生的代码,Java程序的大小有时可能会膨胀为最大堆的数倍之巨。

  还有一个问题,情况与此类似。从连接池分配一个数据库连接,而无法将已分配的连接还回给连接池。一些连接池有活动计时器,在维持一段时间的静止状态之后,计时器会释放掉数据库连接,但这不足以缓解糟糕的代码快速泄漏数据库连接所造成的资源浪费。

   进程缺乏文件描述符

  如果已为一台Web服务器或其他关键进程分配了文件描述符,但它却需要更多的文件描述符,则服务器或进程会被挂起或报错,直至得到了所需的文件描述符为止。文件描述符用来保持对开放文件和开放套接字的跟踪记录,开放文件和开放套接字是Web服务器很关键的组成部分,其任务是将文件复制到网络连接。默认时,大多数shell有64个文件描述符,这意味着每个从shell启动的进程可以同时打开64个文件和网络连接。大多数shell都有一个内嵌的ulimit命令可以增加文件描述符的数目。

   线程死锁

  由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续下去,这样就不难理解为何会发生死锁现象了。

  解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。由于使用Java进行线程编程比使用C容易,所以Java程序员中使用线程的人数更多,线程死锁也就越来越普遍了。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。

  如果程序使用了永久锁,比如锁文件,而且程序结束时没有解除锁状态,则其他进程可能无法使用这种类型的锁,既不能上锁,也不能解除锁。这会进一步导致系统不能正常工作。这时必须手动地解锁。

   服务器超载

  Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其它的Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。操作系统级别可能还在不断地接收新的连接,而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。

  解决问题的一种方法是将obj.conf参数RqThrottle的值设置为线程数目之下的某个数值,这样如果越过RqThrottle的值,就不会接收新的连接。那些不能连接的服务器将会停止工作,而连接上的服务器的响应速度则会变慢,但至少已连接的服务器不会被挂起。这时,文件描述符至少应当被设置为与线程的数目相同的数值,否则,文件描述符将成为一个瓶颈。

   数据库中的临时表不够用

  许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。

  这是一个不容易被程序员发觉的问题,但会在负载测试时显露出来。但可能对于数据库管理员(DataBase Administrator,DBA)来说,这个问题十分明显。

  此外,还存在一些其他问题:设置的表空间不够用、序号限制太低,这些都会导致表溢出错误。这些问题表明了一个好的DBA对用于生产的数据库设置和性能进行定期检查的重要性。而且,大多数数据库厂商也提供了监控和建模工具以帮助解决这些问题。

  另外,还有许多因素也极有可能导致Web站点无法工作。如:相关性、子网流量超载、糟糕的设备驱动程序、硬件故障、包括错误文件的通配符、无意间锁住了关键的表。

  (山东 王鑫)


  前段时间我市教育城域网网络结构调整,分给每校一个公网IP地址(网段:211.86.85.0),用于各校网站对外信息发布,要求每校至少配备两台专用服务器。由于学校资金紧张,Web服务器只能由一台普通的教师机来承担,不能满足学校对外网站24小时开放的要求。鉴于此,笔者曾利用“486做路由器”这一技术对学校网络结构进行过改造(详见《中国电脑教育报》2004年第43期G4版《也谈“486做路由器”在校园网中的应用》)。最近,笔者发现利用“网卡绑定多IP地址”这一简单技巧,可以将网络结构更为简化。下面谈谈操作过程及遇到的问题。

  一、改造前网络结构

  改造前学校网络结构如图1所示,其中网关服务器操作系统为Windows 2000 Server,配置成网络路由器,且添加两条静态路由(图2)。

  二、改造后网络结构

  网络结构改造思路:利用Windows 2000 Server中同一块网卡可以绑定多个IP地址这一原理,将公网IP地址211.86.85.244绑定到内网卡上,用网关服务器兼做Web服务器,从而简化网络结构。设置方法:选择“网上邻居→属性→内网卡→属性→“Internet协议(TCP/IP)→高级”,在“IP设置”选项卡中单击[添加],键入公网IP地址211.86.85.244,子网掩码255.255.255.248(图3)。简化后网络结构如图4所示。

  三、修改路由表

  网络结构改变后,在校园网内任一台电脑上均能正常访问Internet,但无法访问区教委网站(211.86.85.242)。经分析可能与网关服务器的路由表有关,于是进入命令行方式,输入“Route print”并回车(图5)。通过图5中矩形框中的一行可以看出,当网关服务器接收到IP为211.86.85.240~211.86.85.247的URL请求时,网关服务器会按照这条路由规则将其发送给指定的网关10.53.84.1——也就是在校园网内寻找211.86.85.240这个网段的地址,而不能正确地路由到默认网关172.18.15.29,从而造成无法访问。弄清楚这点就好办了,只需添加一条静态路由,将其URL请求指向默认网关即可。方法是在命令提示符下输入:

  route -p add 211.86.85.242 mask 255.255.255.255 172.18.15.29

  如果要访问211.86.85.240这个网段内其他的IP地址,同样可以按上述命令添加静态路由。

  四、安全问题

  网络结构改造前,网关服务器还同时兼做文件服务器,对内网用户开放共享,在内网卡绑定公网IP后,这些共享资源有可能暴露于Internet上,由此带来一些安全隐患。因此文件服务器要用另外一台教师机承担,并且将网关服务器的无关用户删除,增加用户密码的复杂度,避免在这些细小之处给非法侵入者可乘之机。

  (山东省莱州市三山岛街道过西小学 赵杰 赵秉玉)

Apache的mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和运用,即使是Apache专家有时也会发掘出mod_rewrite的新用途。

换句话说:对mod_rewrite,或者是打退堂鼓永不再用,或者是喜欢它并一生受用。

ReWrite可以应用在以下方面或者解决以下问题:
URL的规划
规范的URL
说明:
在有些网站服务器上,一个资源会拥有多个URL,在实际应用和发布中应该被使用的是规范的URL,其他的则是简写或者是内部使用的。无论用户在请求中使用什么形式的URL,他最终看见的都应该是规范的URL。

方案:
对所有的不规范的URL执行一个外部的HTTP重定向,以改变它在浏览器地址栏中的显示及其后继的请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀的斜杠。



代码:
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]


规范的主机名
说明:
...
方案:
代码:
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]


被移动过的DocumentRoot
说明:
通常,网站服务器的DocumentRoot直接对应于URL"/",但是,它常常不是处于最高一级,而可能只是众多数据池中的一个实体。比如,在Intranet站点中,有/e/www/(WWW的主页)、/e/sww/ (Intranet的主页)等等,而DocumentRoot指向了/e/www/,则必须保证此数据池中的所有内嵌的图片和其他元素对后继请求有效。

方案:
只须重定向URL /到/e/www/即可。这个方案看起来很简单,但只是有了mod_rewrite模块的支持,它才简单,因为传统的URL Aliases机制(由mod_alias及其相关模块提供)只是作了一个前缀匹配,DocumentRoot是一个对所有URL的前缀,因而无法实现这样的重定向。而用mod_rewrite的确很简单:

代码:
RewriteEngine on
RewriteRule ^/$ /e/www/ [R]


后缀斜杠的问题
说明:
每个网管对引用目录后缀斜杠的问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是/~quux/foo而不是/~quux/foo/,服务器会去找一个叫foo的文件,而它是一个目录,所以就报错了。事实上,大多数情况下,它自己会试图修正这个错误,但是有时候需要你手工纠正,比如,在重写了许多CGI脚本中的复杂的URL以后。

方案:
解决这个微妙问题的方案是让服务器自动添加后缀的斜杠。对此,必须使用一个外部的重定向,使浏览器正确地处理后继的对诸如图片的请求。如果仅仅作一个内部的重写,可能只对目录页面有效,而对内嵌有使用相对URL的图片的页面则无效,因为浏览器有请求内嵌目标的可能。比如,如果不用外部重定向,/~quux/foo/index.html页面中对image.gif的请求,其结果将是/~quux/image.gif!。

所以,应该这样写:

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo$ foo/ [R]

又懒又疯狂的做法是把这些写入其宿主目录中的顶级.htaccess中,但是须注意,如此会带来一些处理上的开销。

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [R]


集群网站的同类URL规划
说明:
我们希望在一个Intranet集群网站中,对所有WWW服务器建立一个同类的一致性的URL规划,也就是,所有的URL(对单个服务器来说,是本地的依赖于此服务器的!)是独立于服务器的!我们需要的是一个具有独立于服务器的一致性规划的WWW名称空间,即,URL不需要包含正确的物理的目标服务器,而由集群本身来自动定位物理的目标主机。

方案:
首先,目标服务器的信息来自(产生)于包含有用户、组以及实体的外部地图,其格式形如:

代码:
user1 server_of_user1
user2 server_of_user2
: :


这些信息被存入map.xxx-to-host文件。其次,如果URL在一个服务器上无效,需要引导所有的服务器重定向URL

代码:
/u/user/anypath
/g/group/anypath
/e/entity/anypath



代码:
http://physical-host/u/user/anypath
http://physical-host/g/group/anypath
http://physical-host/e/entity/anypath


以下规则集依靠地图文件来完成这个操作(假定,如果一个用户在地图中没有对应的项,则使用server0为默认服务器):

代码:
RewriteEngine on

RewriteMap user-to-host txt:/path/to/map.user-to-host
RewriteMap group-to-host txt:/path/to/map.group-to-host
RewriteMap entity-to-host txt:/path/to/map.entity-to-host

RewriteRule ^/u/([^/]+)/?(.*) http://${user-to-host:$1|server0}/u/$1/$2
RewriteRule ^/g/([^/]+)/?(.*) http://${group-to-host:$1|server0}/g/$1/$2
RewriteRule ^/e/([^/]+)/?(.*) http://${entity-to-host:$1|server0}/e/$1/$2

RewriteRule ^/([uge])/([^/]+)/?$ /$1/$2/.www/
RewriteRule ^/([uge])/([^/]+)/([^.]+.+) /$1/$2/.www/$3\


移动宿主目录到不同的网站服务器
说明:
通常,许多网管在建立一个新的网站服务器时,都会有这样的要求:重定向一个网站服务器上的所有宿主目录到另一个网站服务器。

方案:
很简单,用mod_rewrite。在老的网站服务器上重定向所有的URL /~user/anypath到http://newserver/~user/anypath。

代码:
RewriteEngine on
RewriteRule ^/~(.+) http://newserver/~$1 [R,L]


结构化的宿主目录
说明:
一些拥有几千个用户的网站通常都使用结构化的宿主目录规划,即,每个宿主目录位于一个带有特定前缀比如其用户名的第一个字符的子目录下。那么,/~foo/anypath代表/home/f/foo/.www/anypath,而/~bar/anypath代表/home/b/bar/.www/anypath。

方案:
可以使用下列规则集来扩展~以达到上述目的。

代码:
RewriteEngine on
RewriteRule ^/~(([a-z])[a-z0-9]+)(.*) /home/$2/$1/.www$3


文件系统的重组
说明:
这是一个不加雕琢的例子:一个大量使用针对目录的规则集以实现平滑观感,而从来不用调整数据结构的杀手级的应用。背景:net.sw从1992年开始,存放了我收集的免费的有效的Unix软件包。它是我的爱好也是我的工作,因为在学习计算机科学的同时,业余时间还做了多年的系统和网络的管理员。每周我都需要整理软件,因而建立了一个层次很深的目录结构来存放各种软件包:

代码:
drwxrwxr-x 2 netsw users 512 Aug 3 18:39 Audio/
drwxrwxr-x 2 netsw users 512 Jul 9 14:37 Benchmark/
drwxrwxr-x 12 netsw users 512 Jul 9 00:34 Crypto/
drwxrwxr-x 5 netsw users 512 Jul 9 00:41 Database/
drwxrwxr-x 4 netsw users 512 Jul 30 19:25 Dicts/
drwxrwxr-x 10 netsw users 512 Jul 9 01:54 Graphic/
drwxrwxr-x 5 netsw users 512 Jul 9 01:58 Hackers/
drwxrwxr-x 8 netsw users 512 Jul 9 03:19 InfoSys/
drwxrwxr-x 3 netsw users 512 Jul 9 03:21 Math/
drwxrwxr-x 3 netsw users 512 Jul 9 03:24 Misc/
drwxrwxr-x 9 netsw users 512 Aug 1 16:33 Network/
drwxrwxr-x 2 netsw users 512 Jul 9 05:53 Office/
drwxrwxr-x 7 netsw users 512 Jul 9 09:24 SoftEng/
drwxrwxr-x 7 netsw users 512 Jul 9 12:17 System/
drwxrwxr-x 12 netsw users 512 Aug 3 20:15 Typesetting/
drwxrwxr-x 10 netsw users 512 Jul 9 14:08 X11/

1996年7月,我决定通过一个漂亮的Web接口公开我的收藏。“漂亮”是指提供一个接口以直接浏览整个目录结构,同时不对这个结构做任何改变 - 甚至也不在结构顶部放置CGI脚本。为什么呢?因为这个结构还要能够被FTP访问,而且我不希望其中有任何Web或者CGI的成分。

方案:
这个方案分为两个部分:第一个部分,是用于在空闲时间建立所有目录页面的CGI脚本集。我把它们放在/e/netsw/.www/,如下:

代码:
-rw-r--r-- 1 netsw users 1318 Aug 1 18:10 .wwwacl
drwxr-xr-x 18 netsw users 512 Aug 5 15:51 DATA/
-rw-rw-rw- 1 netsw users 372982 Aug 5 16:35 LOGFILE
-rw-r--r-- 1 netsw users 659 Aug 4 09:27 TODO
-rw-r--r-- 1 netsw users 5697 Aug 1 18:01 netsw-about.html
-rwxr-xr-x 1 netsw users 579 Aug 2 10:33 netsw-access.pl
-rwxr-xr-x 1 netsw users 1532 Aug 1 17:35 netsw-changes.cgi
-rwxr-xr-x 1 netsw users 2866 Aug 5 14:49 netsw-home.cgi
drwxr-xr-x 2 netsw users 512 Jul 8 23:47 netsw-img/
-rwxr-xr-x 1 netsw users 24050 Aug 5 15:49 netsw-lsdir.cgi
-rwxr-xr-x 1 netsw users 1589 Aug 3 18:43 netsw-search.cgi
-rwxr-xr-x 1 netsw users 1885 Aug 1 17:41 netsw-tree.cgi
-rw-r--r-- 1 netsw users 234 Jul 30 16:35 netsw-unlimit.lst


其中的DATA/子目录包含了上述目录结构,即实在的net.sw,由rdist在需要的时候自动更新。第二个部分的遗留问题是:如何连接这两个结构为一个平滑观感的URL树?我希望在运行适当的CGI脚本而使用各种URL的时候,使用户感觉不到DATA/目录的存在。方案如下:首先,我把下列配置放在服务器上DocumentRoot中的针对目录的配置文件里,以重写公布的URL /net.sw/ 为内部路径 /e/netsw:

代码:
RewriteRule ^net.sw$ net.sw/ [R]
RewriteRule ^net.sw/(.*)$ e/netsw/$1


第一条规则是针对遗漏后缀斜杠的请求的!第二条规则才是真正实现功能的。接着,就是放在针对目录的配置文件/e/netsw/.www/.wwwacl中的杀手级的配置了:

代码:
Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine on

# we are reached via /net.sw/ prefix
RewriteBase /net.sw/

# first we rewrite the root dir to
# the handling cgi script
RewriteRule ^$ netsw-home.cgi [L]
RewriteRule ^index\.html$ netsw-home.cgi [L]

# strip out the subdirs when
# the browser requests us from perdir pages
RewriteRule ^.+/(netsw-[^/]+/.+)$ $1 [L]

# and now break the rewriting for local files
RewriteRule ^netsw-home\.cgi.* - [L]
RewriteRule ^netsw-changes\.cgi.* - [L]
RewriteRule ^netsw-search\.cgi.* - [L]
RewriteRule ^netsw-tree\.cgi$ - [L]
RewriteRule ^netsw-about\.html$ - [L]
RewriteRule ^netsw-img/.*$ - [L]

# anything else is a subdir which gets handled
# by another cgi script
RewriteRule !^netsw-lsdir\.cgi.* - [C]
RewriteRule (.*) netsw-lsdir.cgi/$1


阅读提示:

注意前半部分中的标志L(最后),和无对应项('-')
注意后半部分中的符号!(非),和标志C (链)
注意最后一条规则的全匹配模式
代码:
NCSA imagemap和Apache mod_imap
说明:
许多人都希望在从NCSA网站服务器向较现代的Apache网站服务器转移中实现平滑过渡,即希望老的NCSA imagemap程序能在Apache的较现代的mod_imap支持下正常运作。但问题在于,到处都是通过/cgi-bin/imagemap/path/to/page.map引用imagemap程序的连接,而在Apache下,应该写成/path/to/page.map。

方案:
使用全局规则在空闲时间去除所有这些请求的前缀:

代码:
RewriteEngine on
RewriteRule ^/cgi-bin/imagemap(.*) $1 [PT]


在多个目录中搜索页面
说明:
有时会有必要使网站服务器在多个目录中搜索页面,对此,MultiViews或者其他技术无能为力。

方案:
编制一个明确的规则集以搜索目录中的文件。

代码:
RewriteEngine on

# first try to find it in custom/...
# ...and if found stop and be happy:
RewriteCond /your/docroot/dir1/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir1/$1 [L]

# second try to find it in pub/...
# ...and if found stop and be happy:
RewriteCond /your/docroot/dir2/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /your/docroot/dir2/$1 [L]

# else go on for other Alias or ScriptAlias directives,
# etc.
RewriteRule ^(.+) - [PT]


按照URL的片段设置环境变量
说明:
如果希望保持请求之间的状态信息,但又不希望使用CGI来包装所有页面,而只通过分离URL中的有用信息来编码。

方案:
可以用一个规则集来分离出状态信息,并设置环境变量以备此后用于XSSI或CGI。如此,一个/foo/S=java/bar/的URL会被解析为/foo/bar/,而环境变量STATUS则被设置为"java"。

代码:
RewriteEngine on
RewriteRule ^(.*)/S=([^/]+)/(.*) $1/$3 [E=STATUS:$2]


虚拟用户主机
说明:
如果需要为用户username支持一个www.username.host.domain.com的主页,但不是用在此机器上建虚拟主机的方法,而是用仅在此机器上增加一个DNS记录的方法实现。

方案:
对HTTP/1.0的请求,这是无法实现的;但是对HTTP/1.1的在HTTP头中包含有主机名的请求,可以用以下规则集来内部地重写http://www.username.host.com/anypath为/home/username/anypath:

代码:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2


为外来访问者重定向宿主目录
说明:
对不是来自本地域ourdomain.com的外来访问者的请求,重定向其宿主目录URL到另一个网站服务器www.somewhere.com,有时这种做法也会用在虚拟主机的上下文中。

方案:
只须一个重写条件:

代码:
RewriteEngine on
RewriteCond %{REMOTE_HOST} !^.+\.ourdomain\.com$
RewriteRule ^(/~.+) http://www.somewhere.com/$1 [R,L]


重定向失败的URL到其他网站服务器
说明:
如何重写URL以重定向对网站服务器A的失败请求到服务器B,是一个常见的问题。一般,可以用Perl写的CGI脚本通过ErrorDocument来解决,此外,还有mod_rewrite方案。但是须注意,这种方法的执行效率不如用ErrorDocument的CGI脚本!

方案:
第一种方案,有最好的性能而灵活性欠佳,出错概率小所以安全:

代码:
RewriteEngine on
RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
RewriteRule ^(.+) http://webserverB.dom/$1


但是其问题在于,它只对位于DocumentRoot中的页面有效。虽然可以增加更多的条件(比如同时还处理宿主目录,等等),但是还有一个更好的方法:

代码:
RewriteEngine on
RewriteCond %{REQUEST_URI} !-U
RewriteRule ^(.+) http://webserverB.dom/$1


这种方法使用了mod_rewrite提供的“向前参照(look-ahead)”的功能,是一种对所有URL类型都有效而且安全的方法。但是,对网站服务器的性能会有影响,所以如果网站服务器有一个强大的CPU,那就用这个方法。而在慢速机器上,可以用第一种方法,或者用性能更好的ErrorDocument CGI脚本。

扩展的重定向
说明:
有时候,我们会需要更多的对重定向URL的(有关字符转义机制方面的)控制。通常,Apache内核中的URL转义函数uri_escape()同时还会对anchor转义,即,类似"url#anchor"的URL,因此,你不能用mod_rewrite对此类URL直接重定向。那么如何实现呢?

方案:
必须用NPH-CGI脚本使它自己重定向,因为对NPH(non-parseable headers [无须解析的HTTP头])不会发生转义操作。首先,在针对服务器的配置中(应该位于所有重写规则的最后),引入一种新的URL类型xredirect::

代码:
RewriteRule ^xredirect:(.+) /path/to/nph-xredirect.cgi/$1 \
[T=application/x-httpd-cgi,L]


以强制所有带xredirect:前缀的URL被传送到如下的nph-xredirect.cgi程序:

代码:
#!/path/to/perl
##
## nph-xredirect.cgi -- NPH/CGI script for extended redirects
## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
##

$| = 1;
$url = $ENV{'PATH_INFO'};

print "HTTP/1.0 302 Moved Temporarily\n";
print "Server: $ENV{'SERVER_SOFTWARE'}\n";
print "Location: $url\n";
print "Content-type: text/html\n";
print "\n";
print "\n";
print "\n";
print "\n";
print "\n";
print "\n";
print "
Moved Temporarily (EXTENDED)
\n";
print "The document has moved here.
\n";
print "\n";
print "\n";

##EOF##


这是一种可以重定向所有URL类型的方法,包括不被mod_rewrite直接支持的类型。所以,还可以这样重定向news:newsgroup:

代码:
RewriteRule ^anyurl xredirect:news:newsgroup


注意:无须对上述规则加[R]或[R,L],因为xredirect:会在稍后被其特殊的传送规则扩展。
文档访问的多路复用
说明:
你知道http://www.perl.com/CPAN的CPAN(Comprehensive Perl Archive Network)吗?它实现了一个重定向以提供,全世界的CPAN镜像中离访问者最近的一个FTP站点,也可以称之为FTP访问多路复用服务。CPAN是通过CGI脚本实现的,那么用mod_rewrite如何实现呢?

方案:
首先,我们注意到mod_rewrite从3.0.0版本开始,还可以重写"ftp:"类型。其次,对客户端顶级域名的路径最近的求取可以用RewriteMap实现。利用链式规则集,并用顶级域名作为查找多路复用地图的键,可以这样做:

代码:
RewriteEngine on
RewriteMap multiplex txt:/path/to/map.cxan
RewriteRule ^/CxAN/(.*) %{REMOTE_HOST}::$1 [C]
RewriteRule ^.+\.([a-zA-Z]+)::(.*)$ ${multiplex:$1|ftp.default.dom}$2 [R,L]

##
## map.cxan -- Multiplexing Map for CxAN
##

de ftp://ftp.cxan.de/CxAN/
uk ftp://ftp.cxan.uk/CxAN/
com ftp://ftp.cxan.com/CxAN/
:
##EOF##

依赖于时间的重写
说明:
在页面内容依时间不同而变化的场合,比如重定向特定页面,许多网管仍然采用CGI脚本的方法,如何用mod_rewrite来实现呢?

方案:
有许多类似TIME_xxx的变量可以用在重写条件中,利用STRING和=STRING的类型比较,并加以连接,就可以实现依赖于时间的重写:

代码:
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^foo\.html$ foo.day.html
RewriteRule ^foo\.html$ foo.night.html


此例使URL foo.html在07:00-19:00时指向foo.day.html,而在其余时间,则指向foo.night.html,对主页是一个不错的功能...

对YYYY过渡为XXXX的向前兼容
说明:
在转变了大批.html文件为.phtml,使文档.YYYY过渡成为文档.XXXX后,如何保持URL的向前兼容(仍然虚拟地存在)?

方案:
只须按基准文件名重写,并测试带有新的扩展名的文件是否存在,如果存在,则用新的,否则,仍然用原来的。

代码:
# backward compatibility ruleset for
# rewriting document.html to document.phtml
# when and only when document.phtml exists
# but no longer document.html
RewriteEngine on
RewriteBase /~quux/
# parse out basename, but remember the fact
RewriteRule ^(.*)\.html$ $1 [C,E=WasHTML:yes]
# rewrite to document.phtml if exists
RewriteCond %{REQUEST_FILENAME}.phtml -f
RewriteRule ^(.*)$ $1.phtml [S=1]
# else reverse the previous basename cutout
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.html



内容的处理
新旧URL(内部的)
说明:
假定已经把文件bar.html改名为foo.html,需要对老的URL向前兼容,即让用户仍然可以使用老的URL,而感觉不到文件被改名了。

方案:
通过以下规则内部地重写老的URL为新的:

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html


新旧URL(外部的)
说明:
仍然假定已经把文件bar.html改名为foo.html,需要对老的URL向前兼容,但是要让用户得到文件被改名的暗示,即,其浏览器的地址栏中显示的是新的URL。

方案:
作一个HTTP的强制重定向以改变浏览器和用户界面上的显示:

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ bar.html [R]


依赖于浏览器的内容
说明:
至少对重要的顶级页面,有时候有必要提供依赖于浏览器的最佳的内容,即对最新的Netscape提供最大化的版本,对Lynx提供最小化的版本,而对其他的浏览器则提供一个功能一般的版本。

方案:
对此,内容协商无能为力,因为浏览器不提供其那种形式的类型,所以只能在HTTP头"User-Agent"上想办法。以下规则集可以完成这个操作:如果HTTP头"User-Agent"以"Mozilla/3"开头,则页面foo.html被重写为foo.NS.html,而后重写操作终止;如果是"Lynx"或者版本号为1和2的"Mozilla",则重写为foo.20.html;而其他所有的浏览器收到的页面则是foo.32.html:

代码:
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.*
RewriteRule ^foo\.html$ foo.NS.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Lynx/.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12].*
RewriteRule ^foo\.html$ foo.20.html [L]

RewriteRule ^foo\.html$ foo.32.html [L]



动态镜像
说明:
假定,需要在我们的名称空间里加入其他远程主机的页面。对FTP服务器,可以用mirror程序以在本地机器上维持一个对远程数据的最新的拷贝;对网站服务器,可以用类似的用于HTTP的webcopy程序。但这两种技术都有一个主要的缺点:此本地拷贝必须通过这个程序的执行来更新。所以,比较好的方法是,不采用静态镜像,而采用动态镜像,即,在有数据请求时自动更新(远程主机上更新的数据)。

方案:
为此,使用Proxy Throughput功能(flag [P]),以映射远程页面甚至整个远程网络区域到我们的名称空间:

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^hotsheet/(.*)$ http://www.tstimpreso.com/hotsheet/$1 [P]

RewriteEngine on
RewriteBase /~quux/
RewriteRule ^usa-news\.html$ http://www.quux-corp.com/news/index.html [P]


反向动态镜像
说明:
...
方案:
代码:
RewriteEngine on
RewriteCond /mirror/of/remotesite/$1 -U
RewriteRule ^http://www\.remotesite\.com/(.*)$ /mirror/of/remotesite/$1


通过Intranet取得丢失的数据
说明:
这是一种在受防火墙保护的(内部的)Intranet(www2.quux-corp.dom)上保存和维护实际数据,而虚拟地运行企业级(外部的)Internet网站服务器(www.quux-corp.dom)的巧妙的方法。这种方法是外部服务器在空闲时间从内部服务器取得被请求的数据。

方案:
首先,必须确保防火墙对内部服务器的保护,并只允许此外部服务器取得数据。对包过滤(packet-filtering)防火墙,可以如下制定防火墙规则:

代码:
ALLOW Host www.quux-corp.dom Port >1024 --> Host www2.quux-corp.dom Port 80
DENY Host * Port * --> Host www2.quux-corp.dom Port 80


按你的实际配置,只要对上例稍作调整即可。接着,建立通过代理后台获取丢失数据的mod_rewrite规则:

代码:
RewriteRule ^/~([^/]+)/?(.*) /home/$1/.www/$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/home/([^/]+)/.www/?(.*) http://www2.quux-corp.dom/~$1/pub/$2 [P]


负载的均衡
说明:
如何均衡www.foo.com的负载到www[0-5].foo.com(一共是6个服务器)?

方案:
这个问题有许多可能的解决方案,在此,我们讨论通称为“基于DNS(DNS-based)的”方案,和特殊的使用mod_rewrite的方案:

DNS循环(DNS Round-Robin)
最简单的方法是用BIND的DNS循环特性,只要按惯例设置www[0-9].foo.com的DNS的A(地址)记录,如:

代码:
www0 IN A 1.2.3.1
www1 IN A 1.2.3.2
www2 IN A 1.2.3.3
www3 IN A 1.2.3.4
www4 IN A 1.2.3.5
www5 IN A 1.2.3.6


然后,增加以下各项:

代码:
www IN CNAME www0.foo.com.
IN CNAME www1.foo.com.
IN CNAME www2.foo.com.
IN CNAME www3.foo.com.
IN CNAME www4.foo.com.
IN CNAME www5.foo.com.
IN CNAME www6.foo.com.

注意,上述看起来似乎是错误的,但事实上,它的确是BIND中的一个预期的特性,而且也可以这样用。无论如何,现在www.foo.com已经被解析,BIND可以给出www0-www6 - 虽然每次在次序上会有轻微的置换/循环,客户端的请求可以被分散到各个服务器。可是,这并不是一个优秀的负载均衡方案,因为,DNS解析信息可以被网络中其他名称服务器缓冲,而一旦www.foo.com被解析为wwwN.foo.com,则其后继请求都将被送往www.foo.com。但是最终结果是正确的,因为请求的总量的确被分散到各个服务器了

DNS 负载均衡
一种成熟的基于DNS的负载均衡方法是使用http://www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html的lbnamed程序,它是一个Perl 5程序,带有若干辅助工具,实现了真正的基于DNS的负载均衡。

代理吞吐循环(Proxy Throughput Round-Robin)
这是一个使用mod_rewrite及其代理吞吐特性的方法。首先,在DNS记录中,将www0.foo.com固定为www.foo.com,如下:

代码:
www IN CNAME www0.foo.com.


其次,将www0.foo.com转换为一个专职代理服务器,即,由这个机器把所有到来的URL通过内部代理分散到另外5个服务器(www1-www5)。为此,必须建立一个规则集,对所有URL调用一个负载均衡脚本lb.pl。

代码:
RewriteEngine on
RewriteMap lb prg:/path/to/lb.pl
RewriteRule ^/(.+)$ ${lb:$1} [P,L]


以下是lb.pl:

代码:
#!/path/to/perl
##
## lb.pl -- load balancing script
##

$| = 1;

$name = "www"; # the hostname base
$first = 1; # the first server (not 0 here, because 0 is myself)
$last = 5; # the last server in the round-robin
$domain = "foo.dom"; # the domainname

$cnt = 0;
while () {
$cnt = (($cnt+1) % ($last+1-$first));
$server = sprintf("%s%d.%s", $name, $cnt+$first, $domain);
print "http://$server/$_";
}

##EOF##

最后的说明:这样有用吗?www0.foo.com似乎也会超载呀?答案是:没错,它的确会超载,但是它超载的仅仅是简单的代理吞吐请求!所有诸如SSI、CGI、ePerl等等的处理完全是由其他机器完成的,这个才是要点。
硬件/TCP循环
还有一个硬件解决方案。Cisco有一个叫LocalDirector的东西,实现了TCP/IP层的负载均衡,事实上,它是一个位于网站集群前端的电路级网关。如果你有足够资金而且的确需要高性能的解决方案,那么可以用这个。

反向代理
说明:
...
方案:
代码:
##
## apache-rproxy.conf -- Apache configuration for Reverse Proxy Usage
##

# server type
ServerType standalone
Listen 8000
MinSpareServers 16
StartServers 16
MaxSpareServers 16
MaxClients 16
MaxRequestsPerChild 100

# server operation parameters
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Timeout 400
IdentityCheck off
HostnameLookups off

# paths to runtime files
PidFile /path/to/apache-rproxy.pid
LockFile /path/to/apache-rproxy.lock
ErrorLog /path/to/apache-rproxy.elog
CustomLog /path/to/apache-rproxy.dlog "%{%v/%T}t %h -> %{SERVER}e URL: %U"

# unused paths
ServerRoot /tmp
DocumentRoot /tmp
CacheRoot /tmp
RewriteLog /dev/null
TransferLog /dev/null
TypesConfig /dev/null
AccessConfig /dev/null
ResourceConfig /dev/null

# speed up and secure processing

Options -FollowSymLinks -SymLinksIfOwnerMatch
AllowOverride None


# the status page for monitoring the reverse proxy

SetHandler server-status


# enable the URL rewriting engine
RewriteEngine on
RewriteLogLevel 0

# define a rewriting map with value-lists where
# mod_rewrite randomly chooses a particular value
RewriteMap server rnd:/path/to/apache-rproxy.conf-servers

# make sure the status page is handled locally
# and make sure no one uses our proxy except ourself
RewriteRule ^/apache-rproxy-status.* - [L]
RewriteRule ^(http|ftp)://.* - [F]

# now choose the possible servers for particular URL types
RewriteRule ^/(.*\.(cgi|shtml))$ to://${server:dynamic}/$1 [S=1]
RewriteRule ^/(.*)$ to://${server:static}/$1

# and delegate the generated URL by passing it
# through the proxy module
RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L]

# and make really sure all other stuff is forbidden
# when it should survive the above rules...
RewriteRule .* - [F]

# enable the Proxy module without caching
ProxyRequests on
NoCache *

# setup URL reverse mapping for redirect reponses
ProxyPassReverse / http://www1.foo.dom/
ProxyPassReverse / http://www2.foo.dom/
ProxyPassReverse / http://www3.foo.dom/
ProxyPassReverse / http://www4.foo.dom/
ProxyPassReverse / http://www5.foo.dom/
ProxyPassReverse / http://www6.foo.dom/

##
## apache-rproxy.conf-servers -- Apache/mod_rewrite selection table
##

# list of backend servers which serve static
# pages (HTML files and Images, etc.)
static www1.foo.dom|www2.foo.dom|www3.foo.dom|www4.foo.dom

# list of backend servers which serve dynamically
# generated page (CGI programs or mod_perl scripts)
dynamic www5.foo.dom|www6.foo.dom


新的MIME类型,新的服务
说明:
网上有许多很技巧的CGI程序,但是用法晦涩,许多网管弃之不用。即使是Apache的MEME类型的动作处理器,也仅仅在CGI程序不需要在其输入中包含特殊URL(PATH_INFO和QUERY_STRINGS)时才很好用。首先,配置一种新的后缀为.scgi(for secure CGI)文件类型,其处理器是很常见的cgiwrap程序。问题是:如果使用同类URL规划(见上述),而用户宿主目录中的一个文件的URL是/u/user/foo/bar.scgi,可是cgiwrap要求的URL的格式是/~user/foo/bar.scgi/,以下规则解决了这个问题:

代码:
RewriteRule ^/[uge]/([^/]+)/\.www/(.+)\.scgi(.*) ...
... /internal/cgi/user/cgiwrap/~$1/$2.scgi$3 [NS,T=application/x-http-cgi]


另外,假设需要使用其他程序:wwwlog(显示access.log中的一个URL子树)和wwwidx(对一个URL子树运行Glimpse),则必须对这些程序提供URL区域作为其操作对象。比如,对/u/user/foo/执行swwidx程序的超链是这样的:

代码:
/internal/cgi/user/swwidx?i=/u/user/foo/


其缺点是,必须同时硬编码超链中的区域和CGI的路径,如果重组了这个区域,就需要花费大量时间来修改各个超链。

方案:
方案是用一个特殊的新的URL格式,自动拼装CGI参数:

代码:
RewriteRule ^/([uge])/([^/]+)(/?.*)/\* /internal/cgi/user/wwwidx?i=/$1/$2$3/
RewriteRule ^/([uge])/([^/]+)(/?.*):log /internal/cgi/user/wwwlog?f=/$1/$2$3


现在,这个搜索到/u/user/foo/的超链简化成了:

代码:
HREF="*"


它会被内部地自动转换为

代码:
/internal/cgi/user/wwwidx?i=/u/user/foo/


如此,可以为使用:log的超链,拼装出调用CGI程序的参数。

从静态到动态
说明:
如何无缝转换静态页面foo.html为动态的foo.cgi,而不为浏览器/用户所察觉。

方案:
只须重写此URL为CGI-script,以强制为可以作为CGI-script运行的正确的MIME类型。如此,对/~quux/foo.html的请求其实会执行/~quux/foo.cgi。

代码:
RewriteEngine on
RewriteBase /~quux/
RewriteRule ^foo\.html$ foo.cgi [T=application/x-httpd-cgi]


空闲时间内的内容协商
说明:
这是一个很难解的功能:动态生成的静态页面,即,它应该作为静态页面发送(从文件系统中读出,然后直接发出去),但是如果它丢失了,则由服务器动态生成。如此,可以静态地提供CGI生成的页面,除非有人(或者是一个cronjob)删除了这些静态页面,而且其内容可以得到更新。

方案:
以下规则集实现这个功能:
代码:
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^page\.html$ page.cgi [T=application/x-httpd-cgi,L]
这样,如果page.html不存在或者文件大小为null,则对page.html的请求会导致page.cgi的运行。其中奥妙在于,page.cgi是一个将输出写入page.html的(同时也写入STDOUT)的常规的CGI脚本,执行完毕,服务器则将page.html的内容发出。如果网管需要强制更新其内容,只须删除page.html即可(通常由一个cronjob完成)。

自动更新的文档
说明:
建立一个复杂的页面,能够在用编辑器写了一个更新的版本时自动在浏览器上得到刷新,这不是很好吗?这可能吗?

方案:
这是可行的! 这需要综合利用MIME多成分、网站服务器的NPH和mod_rewrite的URL操控特性。首先,建立一个新的URL特性:对在文件系统中更新时需要刷新的所有URL加上:refresh。

代码:
RewriteRule ^(/[uge]/[^/]+/?.*):refresh /internal/cgi/apache/nph-refresh?f=$1


然后,修改URL

代码:
/u/foo/bar/page.html:refresh


以内部地操控此URL

代码:
/internal/cgi/apache/nph-refresh?f=/u/foo/bar/page.html


接着就是NPH-CGI脚本部分了。虽然,人们常说"left as an exercise to the reader",我还是给出答案了。

代码:
#!/sw/bin/perl
##
## nph-refresh -- NPH/CGI script for auto refreshing pages
## Copyright (c) 1997 Ralf S. Engelschall, All Rights Reserved.
##
$| = 1;

# split the QUERY_STRING variable
@pairs = split(/&/, $ENV{'QUERY_STRING'});
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/A-Z/a-z/;
$name = 'QS_' . $name;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
eval "\$$name = \"$value\"";
}
$QS_s = 1 if ($QS_s eq '');
$QS_n = 3600 if ($QS_n eq '');
if ($QS_f eq '') {
print "HTTP/1.0 200 OK\n";
print "Content-type: text/html\n\n";
print "&b&ERROR&/b&: No file given\n";
exit(0);
}
if (! -f $QS_f) {
print "HTTP/1.0 200 OK\n";
print "Content-type: text/html\n\n";
print "&b&ERROR&/b&: File $QS_f not found\n";
exit(0);
}

sub print_http_headers_multipart_begin {
print "HTTP/1.0 200 OK\n";
$bound = "ThisRandomString12345";
print "Content-type: multipart/x-mixed-replace;boundary=$bound\n";
&print_http_headers_multipart_next;
}

sub print_http_headers_multipart_next {
print "\n--$bound\n";
}

sub print_http_headers_multipart_end {
print "\n--$bound--\n";
}

sub displayhtml {
local($buffer) = @_;
$len = length($buffer);
print "Content-type: text/html\n";
print "Content-length: $len\n\n";
print $buffer;
}

sub readfile {
local($file) = @_;
local(*FP, $size, $buffer, $bytes);
($x, $x, $x, $x, $x, $x, $x, $size) = stat($file);
$size = sprintf("%d", $size);
open(FP, "&$file");
$bytes = sysread(FP, $buffer, $size);
close(FP);
return $buffer;
}

$buffer = &readfile($QS_f);
&print_http_headers_multipart_begin;
&displayhtml($buffer);

sub mystat {
local($file) = $_[0];
local($time);

($x, $x, $x, $x, $x, $x, $x, $x, $x, $mtime) = stat($file);
return $mtime;
}

$mtimeL = &mystat($QS_f);
$mtime = $mtime;
for ($n = 0; $n & $QS_n; $n++) {
while (1) {
$mtime = &mystat($QS_f);
if ($mtime ne $mtimeL) {
$mtimeL = $mtime;
sleep(2);
$buffer = &readfile($QS_f);
&print_http_headers_multipart_next;
&displayhtml($buffer);
sleep(5);
$mtimeL = &mystat($QS_f);
last;
}
sleep($QS_s);
}
}

&print_http_headers_multipart_end;

exit(0);

##EOF##
大型虚拟主机
说明:
Apache的功能很强,在有几十个虚拟主机的情况下运行得很好,但是如果你是ISP,需要提供几百个虚拟主机,那么这就不是一个最佳的选择了。

方案:
为此,需要用代理吞吐(Proxy Throughput)功能(flag [P])映射远程页面甚至整个远程网络区域到自己的名称空间:

代码:
##
## vhost.map
##
www.vhost1.dom:80 /path/to/docroot/vhost1
www.vhost2.dom:80 /path/to/docroot/vhost2
:
www.vhostN.dom:80 /path/to/docroot/vhostN

代码:
##
## httpd.conf
##
:
# use the canonical hostname on redirects, etc.
UseCanonicalName on

:
# add the virtual host in front of the CLF-format
CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %>s %b"
:

# enable the rewriting engine in the main server
RewriteEngine on

# define two maps: one for fixing the URL and one which defines
# the available virtual hosts with their corresponding
# DocumentRoot.
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/path/to/vhost.map

# Now do the actual virtual host mapping
# via a huge and complicated single rule:
#
# 1. make sure we don't map for common locations
RewriteCond %{REQUEST_URL} !^/commonurl1/.*
RewriteCond %{REQUEST_URL} !^/commonurl2/.*
:
RewriteCond %{REQUEST_URL} !^/commonurlN/.*
#
# 2. make sure we have a Host header, because
# currently our approach only supports
# virtual hosting through this header
RewriteCond %{HTTP_HOST} !^$
#
# 3. lowercase the hostname
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
#
# 4. lookup this hostname in vhost.map and
# remember it only when it is a path
# (and not "NONE" from above)
RewriteCond ${vhost:%1} ^(/.*)$
#
# 5. finally we can map the URL to its docroot location
# and remember the virtual host for logging puposes
RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]
:


对访问的限制
阻止Robots
说明:
如何阻止一个完全匿名的robot取得特定网络区域的页面?一个/robots.txt文件可以包含若干"Robot Exclusion Protocol(robot排除协议)"的行,但不足以阻止此类robot。

方案:
可以用一个规则集以拒绝对网络区域/~quux/foo/arc/(对一个很深的目录区域进行列表可能会使服务器产生很大的负载)的访问。还必须确保仅阻止特定的robot,就是说,仅仅阻止robot访问主机是不够的,这样会同时也阻止了用户访问该主机。为此,就需要对HTTP头的User-Agent信息作匹配。

代码:
RewriteCond %{HTTP_USER_AGENT} ^NameOfBadRobot.*
RewriteCond %{REMOTE_ADDR} ^123\.45\.67\.[8-9]$
RewriteRule ^/~quux/foo/arc/.+ - [F]
阻止内嵌的图片
说明:
假设,http://www.quux-corp.de/~quux/有一些内嵌图片的页面,这些图片很好,所以就有人用超链连到他们自己的页面中了。由于这样徒然增加了我们的服务器的流量,因此,我们不愿意这种事情发生。

方案:
虽然,我们不能100%地保护这些图片不被写入别人的页面,但至少可以对发出HTTP Referer头的浏览器加以限制。

代码:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\.gif$ - [F]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\.html$
RewriteRule ^inlined-in-foo\.gif$ - [F]


对主机的拒绝
说明:
如何拒绝一批外部列表中的主机对我们服务器的使用?

方案:
代码:
For Apache >= 1.3b6:

RewriteEngine on
RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^/.* - [F]

For Apache <= 1.3b6:

RewriteEngine on
RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteRule ^/(.*)$ ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}/$1
RewriteRule !^NOT-FOUND/.* - [F]
RewriteRule ^NOT-FOUND/(.*)$ ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}/$1
RewriteRule !^NOT-FOUND/.* - [F]
RewriteRule ^NOT-FOUND/(.*)$ /$1

代码:
##
## hosts.deny
##
## ATTENTION! This is a map, not a list, even when we treat it as such.
## mod_rewrite parses it for key/value pairs, so at least a
## dummy value "-" must be present for each entry.
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

对代理的拒绝
说明:
如何拒绝某个主机或者来自特定主机的用户使用Apache代理?

方案:
首先,要确保Apache网站服务器在编译时配置文件中mod_rewrite在mod_proxy的下面(!),使它在mod_proxy之前被调用。然后,如下拒绝某个主机...

代码:
RewriteCond %{REMOTE_HOST} ^badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]

...如下拒绝user@host-dependent:

代码:
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} ^badguy@badhost\.mydomain\.com$
RewriteRule !^http://[^/.]\.mydomain.com.* - [F]


特殊的认证
说明:
有时候,会需要一种非常特殊的认证,即,对一组明确指定的用户,允许其访问,而没有(在使用mod_access的基本认证方法时可能会出现的)任何提示。

方案:
可是使用一个重写条件列表来排除所有的朋友:

代码:
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend1@client1.quux-corp\.com$
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend2@client2.quux-corp\.com$
RewriteCond %{REMOTE_IDENT}@%{REMOTE_HOST} !^friend3@client3.quux-corp\.com$
RewriteRule ^/~quux/only-for-friends/ - [F]


基于提交者(Referer)的反射器
说明:
如何配置一个基于HTTP头"Referer"的反射器以反射到任意数量的提交页面?

方案:
使用这个很技巧的规则集...

代码:
RewriteMap deflector txt:/path/to/deflector.map

RewriteCond %{HTTP_REFERER} !=""
RewriteCond ${deflector:%{HTTP_REFERER}} ^-$
RewriteRule ^.* %{HTTP_REFERER} [R,L]

RewriteCond %{HTTP_REFERER} !=""
RewriteCond ${deflector:%{HTTP_REFERER}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^.* ${deflector:%{HTTP_REFERER}} [R,L]


... 并结合对应的重写地图:

代码:
##
## deflector.map
##

http://www.badguys.com/bad/index.html -
http://www.badguys.com/bad/index2.html -
http://www.badguys.com/bad/index3.html http://somewhere.com/

它可以自动将请求(在地图中指定了"-"值的时候)反射回其提交页面,或者(在地图中URL有第二个参数时)反射到一个特定的URL。


其他
外部重写引擎
说明:
一个常见的问题: 如何解决似乎无法用mod_rewrite解决的FOO/BAR/QUUX/之类的问题?

方案:
可以使用一个与RewriteMap功能相同的外部RewriteMap程序,一旦它在Apache启动时被执行,则从STDIN接收被请求的URL,并将处理过(通常是重写过的)的URL(以相同顺序!)在STDOUT输出。

代码:
RewriteEngine on
RewriteMap quux-map prg:/path/to/map.quux.pl
RewriteRule ^/~quux/(.*)$ /~quux/${quux-map:$1}


代码:
#!/path/to/perl

# disable buffered I/O which would lead
# to deadloops for the Apache server
$| = 1;

# read URLs one per line from stdin and
# generate substitution URL on stdout
while (<>) {
s|^foo/|bar/|;
print $_;
}

这是一个作演示的例子,只是把所有的URL /~quux/foo/...重写为/~quux/bar/...,而事实上,可以把它修改以获得任何你需要的功能。但是要注意,虽然一般用户都可以使用,可是只有系统管理员才可以定义这样的地图。

一、有关CN域名交易涉及的名词解释

  1. 域名注册管理机构:中国互联网络信息中心,承担顶级域名系统的运行、维护和管理工作。

  2. 域名交易管理机构:指的是中国互联网络信息中心,其职责是负责运行和管理域名交易系统,维护域名交易中央数据库,认证域名交易服务机构提供域名交易服务;

  3. 域名交易服务机构:是经域名注册管理机构认证从事域名交易服务的机构;

  4. 域名注册服务机构:是指受理域名注册申请,直接完成域名在国内顶级域名数据库中注册的机构。

  5. 域名交易者:是依照本规则进行域名交易的人,包括卖方与买方。

  6. 域名交易状态查询:

  (1) 不可交易:在此状态下,域名无法交易,域名默认的状态或域名注册完毕后即为该状态;

  (2) 正常:当卖方通过中国互联网络信息中心的网站设置域名为可交易后,域名状态改为“正常”,在此状态下可以进行域名交易;

  (3) 交易等待验证:域名交易服务机构确认卖方提供信息,登录中国互联网络信息中心网站确认交易后,域名状态改为“交易等待验证”;

  (4) 交易进行中:卖方通过Email和域名密码确认交易,验证通过后,域名状态由“交易等待验证”转为“交易进行中”,此时域名被锁定。

  (5) 交易确认中:买方、卖方及交易服务机构三方签署交易协议,交易服务机构确认交易完成,域名状态由“交易进行中”转为“交易确认中”。

  7. 域名密码:也就是域名管理密码,是域名注册时自动生成域名密码,卖方可与注册服务机构进行联系索要。此密码同域名转移密码

  8. 域名过户:由域名注册服务机构在验证域名交易码后进行域名过户操作。

  二、域名交易的卖方流程

  1. 卖方通过域名和域名密码到中国互联网络信息中心网站进行域名状态更改,域名状态由“不可交易”转为“正常”后,域名便可进行交易。域名状态查询见:

  2. 卖方选择域名交易管理机构中国互联网络信息中心认证的域名交易服务机构进行域名交易。

  3. 卖方可以通过交易服务机构网站、或提交书面、email、传真提出域名交易申请,在提交申请时需同时接受交易服务机构制订的相关交易条款。

  4. 卖方及买方提交资料,交易服务机构对卖方和买方身份、交易域名的有效性及交易时间的有效性进行验证,符合规定可以进行交易。

  5. 域名交易服务机构在中国互联网络信息中心提供的链接请求交易,请求交易后系统将此域名状态由“正常”转为“交易等待验证”状态。在“交易等待验证”状态下,域名注册人的信息可以更改 ,但其他交易服务机构不能再对该域名提交交易申请。

  6. 域名交易服务机构请求交易后,中国互联网络信息中心开始进行域名审核,在此次交易过程中,如遇到违反相关规定域名正在进行交易,中国互联网络信息中心均可取消该域名的交易权利,强制撤销该域名正在进行的交易,并将该域名加入到域名禁止交易库中;域名状态由“交易等待验证”转为“正常”。

  7. 交易服务机构发出交易请求后,交易系统通过email形式给卖方发送密码验证邮件。

  8. 卖方通过Email里提供的链接和域名密码进行交易验证,验证通过后,域名状态由“交易等待验证”转为“交易进行中”,此时域名被锁定。

  若卖方因各种原因没有确认交易,14日之内交易超时,域名状态转为“正常”,卖方可重新申请进行交易,也可将域名从可交易列表中删除。

  9. 交易系统通过接口给交易服务机构发送域名已激活的通知。

  10. 买方登陆交易服务机构网站,寻找合适域名,同意交易服务机构所规定协议,即可进行域名交易。

  11. 交易服务机构确认后,进行交易撮合,买卖双方按照交易服务机构制订的交易流程进行议价。

  若三方对交易议价失败,域名交易服务机构取消交易,域名状态由“交易进行中”转为“正常”。此次交易终止,卖方可重新开始交易流程。

  交易撮合成功议价在有效时间范围内完成的,有效交易的时间范围为域名注册后的15日后到域名到期前15日前,即域名交易服务机构发出请求交易开始时间必须在域名注册后的15日后,域名交易结束时间必须在域名到期日前15日。

  12. 买方、卖方及交易服务机构三方签署交易协议,交易服务机构确认交易完成,填写买方信息,域名状态由“交易进行中”转为“交易确认中”。

  13. 域名交易服务机构确认交易完成后,可通过域名交易系统查询到域名交易码。

  14. 卖方提供域名过户资料给域名注册服务机构。

  按照域名注册服务机构的要求提交用以确认卖方变更注册人信息的必要审核材料(例如身份证、企业营业执照等)

  15. 域名交易服务机构将交易码发给卖方域名所在的注册服务机构。

  16. 注册服务机构在15日内登录到中国互联网络信息中心的域名交易系统上进行域名交易码的确认。

  17. 注册服务机构验证交易码完成后,域名状态由“交易确认中”转为“不可交易”,域名锁定解除。

  18. 注册服务机构更改域名密码,并修改相关注册人信息。注册服务机构以其规定的方式将密码通知买方。

  19过户完成,交易完毕。

  附交易流程图

  三、有关域名交易的申请与处理

  1. 适用于本域名交易的域名类型是什么?

  由中国互联网络信息中心负责注册管理,并提供解析服务的互联网络域名;

  2. 什么样的域名不可以进行域名交易?

  以gov.cn、edu.cn结尾及被禁止注册和限制注册的域名不能交易。

  3. 哪些类型的域名不能申请交易?

  a) 反对宪法所确定的基本原则的;

  b) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;

  c) 损害国家荣誉和利益的;

  d) 煽动民族仇恨、民族歧视,破坏民族团结的;

  e) 破坏国家宗教政策,宣扬邪教和封建迷信的;

  f) 散布谣言,扰乱社会秩序,破坏社会稳定的;

  g) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;

  h) 侮辱或者诽谤他人,侵害他人合法权益的;

  含有法律、行政法规禁止的其他内容的。

  4. 到哪里提出域名交易申请?

  可以到中国互联网络信息中心认证的域名交易服务机构提出申请。 例如:www.dnsdna.cn

  5 .申请域名交易卖方需要哪些材料?

  需要提交证明卖方为域名所有人的材料,具体材料以域名交易机构和注册服务机构的要求为准。

  6. 域名的密码怎样获得?

  每个注册服务机构的管理方式不同,域名密码可直接与注册服务机构联系。

  7. 域名交易的有效时间是什么?

  域名有效交易的时间范围为域名注册后的15日后到域名到期前15日前,即域名交易服务机构发出请求交易开始时间必须在域名注册后的15日后,域名交易结束时间必须在域名到期日前15日。

  8. 是否可以查询到域名交易情况?

  可以登录cnnic网站域名交易whois进行查询。同时,域名所有者可以通过我们的查询页面,输入域名和密码查询交易的详细信息。

  具体的见交易状态说明见名词解释。

  9. 交易完成后,多长时间可以过户成功?

  经注册服务机构验证成功后,注册服务机构应于15日内完成更改域名密码和修改相关注册人信息。

  10. 域名交易结束后,多长时间就能进行下次交易?

  只要域名状态为“正常”,就能进行下次交易,但要保证域名在有效交易时间内。

  11.域名密码与域名转移密码有什么区别?

  与域名交易密码相同。

  四、有关域名交易的更改及撤消

  12.是否可以撤销域名交易?

  可以在域名注册管理机构确认域名交易码之前,卖方均可与域名交易机构联系进行撤销。

  13.如果审核不通过后,交易如何再继续?

  如果审核不通过后,交易即被取消,不能继续交易。

  14.卖方没有确认域名交易,多长时间交易取消?

  若卖方因各种原因没有确认交易,14日之内交易超时,域名状态转为“正常”。

  五、交易费用的结转

  域名交易费用结算按照买卖双方和域名交易服务机构之间签订的三方协议为准。除此之外,在域名过户成功后,买方需要向域名注册服务机构缴纳一年域名费用 ,即续费一年。

  六、交易中涉及的其他问题

  15.没有收到系统发来的交易密码确认邮件怎么办?

  可以与域名交易管理机构联系,传真加盖卖方公章的申请补发交易密码确认邮件的申请。

  16.域名是否可以通过不同的域名交易机构申请交易?

  当域名交易机构发出交易请求后,其他交易服务机构不能再对该域名提交交易申请。

  17.交易过程中是否可以对域名信息进行修改?

  域名状态为“交易等待验证”状态时,域名注册人的信息可以更改;而在交易期间,域名状态变更为“交易进行中”,域名被锁定后,交易的域名信息均不能被修改;

  18.如果对已经交易完毕的域名有异议,如何处理?

  对已经完成的域名交易有异议的,可通过域名争议解决程序或任何法律程序加以解决。

  19.在交易过程中,需要注意以下事项:

  (1) 域名所有权属于卖方;

  (2) 域名状态设置为“正常”状态才能进行交易;

  (3) 提供的域名管理联系人的信息要真实准确,以保证能及时收到邮件;

  20.域名交易的好处

  (1) 培育和发展健康的域名交易市场;

  (2) 规范域名交易行为;

  (3) 促进域名资源的优化配置;

[ 2005/02/21 19:37 | by 网络毛毛虫 ]
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\Wds\Repwd\Tds\Tcp, 看到那个PortNumber没有?0xd3d,这个是16进制,就是3389啦,我改...这个值是RDP(远程桌面协议)的默认值,也就是说用来配置以后新建的RDP服务的,要改已经建立的RDP服务,我们去下一个键值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations这里应该有一个或多个类似RDP-TCP的子健(取决于你建立了多少个RDP服务),一样改掉PortNumber
一、   申请篇

(1)第一步

打开网站:http://www.hthost.net

(2)第二步



(3)第三步

Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(4)第四步



(5)第五步

Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(6)第六步

看到此画面就说明申请成功了
Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(7)第七步

到邮箱收信

信的标题为: How to access your new HTHOST.NET account

信件内容:
Thank you for choosing HTHOST.NET!

Your Member ID is: im286@im286.com (登陆用户名)

Your new password is: im286 (登陆密码)

二、管理篇

1。FTP地址篇

(1)第一步

登陆站点:
https://admin.hthost.net  



(2)第二步

进入管理站点选项:



(3)第三步(查找FTP地址)






2。数据库篇

(1)第一步:进入



(2)第二步:建立



(3)第三步

提交完毕后,会看到这种图标,这时数据库还没建好,需要等几分钟

Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(4)第四步
刷新后当看到这种图标时,说明数据库建立成功

Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(5)第五步:查找数据库IP地址





这个就是你的数据库的IP地址,一般安装程序的时候默认的数据库地址是localhost,但是你用此空间安装程序的时候,需要将localhost改成这个IP地址(也就是说这个数据库是远程调用的)

(6)管理数据库:
数据库管理地址:https://admin.hthost.net/phpmyadmin/     (注意是https,不是http)






3。其他篇
还有其他功能,大家自己去琢磨吧,在主页面中,有如下图标,依次功能为:
(1)。管理EMAIL
(2)。管理子站点(注意:建立子站点以后,如果发现子站点的文件夹不能上传文件,请将XXX.IM286.COM的文件夹删除,再重新建立一个XXX.IM286.COM文件夹,再如果删除都不行,你就干脆把它改名,然后再建立XXX.IM286.COM文件夹)
(3)。管理站点文件
(4)。站点统计
(5)。还没试过


三、高级技巧篇

如果你感觉FTP太慢,那就用它提供的WEBFTP吧,里面有个上传ZIP压缩包就可以自动解压缩到服务器里

下面以安装DISCUZ论坛为例
(1)第一步:下载DISCUZ压缩包

http://www.discuz.net/viewthread.php?tid=97512&extra=page%3D1

(2)第二步:解压缩此文件




(3)第三步:由于DISCUZ论坛只需上传UPLOAD这个文件夹到服务器上,其他的文件夹不需要上传
所以我们只将UPLOAD文件夹做成压缩包(记住一定要做成ZIP格式的压缩包)






制作成果:




(4)第四步:打开WEBFTP页面,

Click here to open new window<br/>CTRL+Mouse wheel to zoom in/out

(5)第五步:上传









(6)第六步:查看上传结果

这时就能看到压缩包里的UPLOAD文件夹已经上传成功了




四、密码修改篇

当点右上角的Logout 退出系统的时候,系统就会强制要你修改密码


[ 2005/02/12 04:21 | by 网络毛毛虫 ]

一、硬件类(Hardware)
二、软件类(Software)
三、网络类(Network)
四、其它
CPU(Center Processor Unit)中央处理单元
mainboard主板
RAM(random access
memory)随机存储器(内存)
ROM(Read Only Memory)只读存储器
Floppy Disk软盘
Hard Disk硬盘
CD-ROM光盘驱动器(光驱)
monitor监视器
keyboard键盘
mouse鼠标
chip芯片
CD-R光盘刻录机
HUB集线器
Modem= MOdulator-DEModulator,调制解调器
P-P(Plug and Play)即插即用
UPS(Uninterruptable Power Supply)不间断电源
BIOS(Basic-input-Output
System)基本输入输出系统
CMOS(Complementary Metal-Oxide-Semiconductor)互补金属氧化物半导体
setup安装
uninstall卸载
wizzard向导
OS(Operation Systrem)操作系统
OA(Office AutoMation)办公自动化
exit退出
edit编辑
copy复制
cut剪切
paste粘贴
delete删除
select选择
find查找
select all全选
replace替换
undo撤消
redo重做
program程序
license许可(证)
back前一步
next下一步
finish结束
folder文件夹
Destination Folder目的文件夹
user用户
click点击
double click双击
right click右击
settings设置
update更新
release发布
data数据
data base数据库
DBMS(Data Base Manege
System)数据库管理系统
view视图
insert插入
object对象
configuration配置
command命令
document文档
POST(power-on-self-test)电源自检程序
cursor光标
attribute属性
icon图标
service pack服务补丁
option pack功能补丁
Demo演示
short cut快捷方式
exception异常
debug调试
previous前一个
column行
row列
restart重新启动
text文本
font字体
size大小
scale比例
interface界面
function函数
access访问
manual指南
active激活
computer language计算机语言
menu菜单
GUI(graphical user interfaces )图形用户界面
template模版
page setup页面设置
password口令
code密码
print preview打印预览
zoom in放大
zoom out缩小
pan漫游
cruise漫游
full screen全屏
tool bar工具条
status bar状态条
ruler标尺
table表
paragraph段落
symbol符号
style风格
execute执行
graphics图形
image图像
Unix用于服务器的一种操作系统
Mac OS苹果公司开发的操作系统
OO(Object-Oriented)面向对象
virus病毒
file文件
open打开
colse关闭
new新建
save保存
exit退出
clear清除
default默认
LAN局域网
WAN广域网
Client/Server客户机/服务器
ATM( Asynchronous
Transfer Mode)异步传输模式
Windows NT微软公司的网络操作系统
Internet互联网
WWW(World Wide Web)万维网
protocol协议
HTTP超文本传输协议
FTP文件传输协议
Browser浏览器
homepage主页
Webpage网页
website网站
URL在Internet的WWW服务程序上
用于指定信息位置的表示方法
Online在线
Email电子邮件
ICQ网上寻呼
Firewall防火墙
Gateway网关
HTML超文本标识语言
hypertext超文本
hyperlink超级链接
IP(Address)互联网协议(地址)
SearchEngine搜索引擎
TCP/IP用于网络的一组通讯协议
Telnet远程登录
IE(Internet Explorer)探索者(微软公司的网络浏览器)
Navigator引航者(网景公司的浏览器)
multimedia多媒体
ISO国际标准化组织
ANSI美国国家标准协会
able 能
activefile 活动文件
addwatch 添加监视点
allfiles 所有文件
allrightsreserved 所有的权力保留
altdirlst 切换目录格式
andotherinFORMation 以及其它的信息
archivefileattribute 归档文件属性
assignto 指定到
autoanswer 自动应答
autodetect 自动检测
autoindent 自动缩进
autosave 自动存储
availableonvolume 该盘剩余空间
badcommand 命令错
badcommandorfilename 命令或文件名错
batchparameters 批处理参数
binaryfile 二进制文件
binaryfiles 二进制文件
borlandinternational borland国际公司
bottommargin 页下空白
bydate 按日期
byextension 按扩展名
byname 按名称
bytesfree 字节空闲
callstack 调用栈
casesensitive 区分大小写
centralpointsoftwareinc central point 软件股份公司
changedirectory 更换目录
changedrive 改变驱动器
changename 更改名称
characterset 字符集
checkingfor 正在检查
chgdrivepath 改变盘/路径
chooseoneofthefollowing 从下列中选一项
clearall 全部清除
clearallbreakpoints 清除所有断点
clearsanattribute 清除属性
clearscommandhistory 清除命令历史
clearscreen 清除屏幕
closeall 关闭所有文件
codegeneration 代码生成
colorpalette 彩色调色板
commandline 命令行
commandprompt 命令提示符
compressedfile 压缩文件
conventionalmemory 常规内存
copydiskette 复制磁盘
copyrightc 版权(c
createdospartitionorlogicaldosdrive 创建DOS分区或逻辑DOS驱动器
createextendeddospartition 创建扩展DOS分区
createprimarydospartition 创建DOS主分区
createsadirectory 创建一个目录
currentfile 当前文件
defrag 整理碎片
dele 删去
deltree 删除树
devicedriver 设备驱动程序
dialogbox 对话栏
directionkeys 方向键
directly 直接地
directorylistargument 目录显示变量
directoryof 目录清单
directorystructure 目录结构
diskaccess 磁盘存取
diskcopy 磁盘拷贝
diskspace 磁盘空间
displayfile 显示文件
displayoptions 显示选项
displaypartitioninFORMation 显示分区信息
dosshell DOS 外壳
doubleclick 双击
driveletter 驱动器名
editmenu 编辑选单
emsmemory ems内存
endoffile 文件尾
endofline 行尾
enterchoice 输入选择
entiredisk 转换磁盘
environmentvariable 环境变量
everyfileandsubdirectory 所有的文件和子目录
existingdestinationfile 已存在的目录文件时
expandedmemory 扩充内存
expandtabs 扩充标签
explicitly 明确地
extendedmemory 扩展内存
fastest 最快的
fatfilesystem fat 文件系统
fdiskoptions fdisk选项
fileattributes 文件属性
fileFORMat 文件格式
filefunctions 文件功能
fileselection 文件选择
fileselectionargument 文件选择变元
filesin 文件在
filesinsubdir 子目录中文件
fileslisted 列出文件
filespec 文件说明
filespecification 文件标识
filesselected 选中文件
findfile 文件查寻
fixeddisk 硬盘
fixeddisksetupprogram 硬盘安装程序
fixeserrorsonthedisk 解决磁盘错误
floppydisk 软盘
FORMatdiskette 格式化磁盘
FORMatsadiskforusewithmsdos 格式化用于MS-DOS的磁盘
FORMfeed 进纸
freememory 闲置内存
fullscreen 全屏幕
functionprocedure 函数过程
graphical 图解的
graphicslibrary 图形库
groupdirectoriesfirst 先显示目录组
hangup 挂断
harddisk 硬盘
hardwaredetection 硬件检测
hasbeen 已经
helpfile 帮助文件
helpindex 帮助索引
helpinFORMation 帮助信息
helppath 帮助路径
helpscreen 帮助屏
helptext 帮助说明
helptopics 帮助主题
helpwindow 帮助窗口
hiddenfile 隐含文件
hiddenfileattribute 隐含文件属性
hiddenfiles 隐含文件
howto 操作方式
ignorecase 忽略大小写
incorrectdos 不正确的DOS
incorrectdosversion DOS 版本不正确
indicatesabinaryfile 表示是一个二进制文件
indicatesanasciitextfile 表示是一个ascii文本文件
insertmode 插入方式
insteadofusingchkdsktryusingscandisk 请用scandisk,不要用chkdsk
inuse 在使用
invaliddirectory 无效的目录
kbytes 千字节
keyboardtype 键盘类型
labeldisk 标注磁盘
laptop 膝上
largestexecutableprogram 最大可执行程序
largestmemoryblockavailable 最大内存块可用
lefthanded 左手习惯
leftmargin 左边界
linenumber 行号
linenumbers 行号
linespacing 行间距
listbyfilesinsortedorder 按指定顺序显示文件
listfile 列表文件
listof 清单
locatefile 文件定位
lookat 查看
lookup 查找
macroname 宏名字
makedirectory 创建目录
memoryinfo 内存信息
memorymodel 内存模式
menubar 菜单条
menucommand 菜单命令
menus 菜单
messagewindow 信息窗口
microsoft 微软
microsoftantivirus 微软反病毒软件
microsoftcorporation 微软公司
modemsetup 调制解调器安装
modulename 模块名
monitormode 监控状态
monochromemonitor 单色监视器
moveto 移至
multi 多
newdata 新建数据
newer 更新的
newfile 新文件
newname 新名称
newwindow 新建窗口
norton norton
nostack 栈未定义
noteusedeltreecautiously 注意:小心使用deltree
onlinehelp 联机求助
optionally 可选择地
or 或
pageframe 页面
pagelength 页长
pctools pc工具
postscript 附言
printall 全部打印
printdevice 打印设备
printerport 打印机端口
programfile 程序文件
pulldown 下拉
pulldownmenus 下拉式选单
quickFORMat 快速格式化
quickview 快速查看
readonlyfile 只读文件
readonlyfileattribute 只读文件属性
readonlyfiles 只读文件
readonlymode 只读方式
redial 重拨
repeatlastfind 重复上次查找
reportfile 报表文件
resize 调整大小
respectively 分别地
rightmargin 右边距
rootdirectory 根目录
runtimeerror 运行时出错
saveall 全部保存
saveas 另存为
scandisk 磁盘扫描程序
screencolors 屏幕色彩
screenoptions 屏幕任选项
screensaver 屏幕暂存器
screensavers 屏幕保护程序
screensize 屏幕大小
scrollbars 翻卷栏
scrolllockoff 滚屏已锁定
searchfor 搜索
sectorspertrack 每道扇区数
selectgroup 选定组
selectionbar 选择栏
setactivepartition 设置活动分区
setupoptions 安装选项
shortcutkeys 快捷键
showclipboard 显示剪贴板
singleside 单面
sizemove 大小/移动
sorthelp S排序H帮助
sortorder 顺序
stackoverflow 栈溢出
standalone 独立的
startupoptions 启动选项
statusline 状态行
stepover 单步
summaryof 摘要信息
swapfile 交换文件
switchto 切换到
sync 同步
systemfile 系统文件
systemfiles 系统文件
systeminfo 系统信息
systeminFORMation 系统信息程序
tableofcontents 目录
terminalemulation 终端仿真
terminalsettings 终端设置
testfile 测试文件
testfileparameters 测试文件参数
theactivewindow 激活窗口
togglebreakpoint 切换断点
tomsdos 转到MS-DOS
topmargin 页面顶栏
turnoff 关闭
unmark 取消标记
unselect 取消选择
usesbareFORMat 使用简洁方式
useslowercase 使用小写
useswidelistFORMat 使用宽行显示
usinghelp 使用帮助
verbosely 冗长地
videomode 显示方式
viewwindow 内容浏览
viruses 病毒
vision 景象
vollabel 卷标
volumelabel 卷标
volumeserialnumberis 卷序号是
windowshelp windows 帮助
wordwrap 整字换行
workingdirectory 正在工作的目录
worm 蠕虫
writemode 写方式
writeto 写到
xmsmemory 扩充内存

网络安全方面的专业词汇

Access Control List(ACL) 访问控制列表
access token 访问令牌
account lockout 帐号封锁
account policies 记帐策略
accounts 帐号
adapter 适配器
adaptive speed leveling 自适应速率等级调整
Address Resolution Protocol(ARP) 地址解析协议
Administrator account 管理员帐号
ARPANET 阿帕网(internet的前身)
algorithm 算法
alias 别名
allocation 分配、定位
alias 小应用程序
allocation layer 应用层
API 应用程序编程接口
anlpasswd 一种与Passwd+相似的代理密码检查器
applications 应用程序
ATM 异步传递模式
attack 攻击
audio policy 审记策略
auditing 审记、监察
back-end 后端
borde 边界
borde gateway 边界网关
breakabie 可破密的
breach 攻破、违反
cipher 密码
ciphertext 密文
CAlass A domain A类域
CAlass B domain B类域
CAlass C domain C类域
classless addressing 无类地址分配
cleartext 明文
CSNW Netware客户服务
client 客户,客户机
client/server 客户机/服务器
code 代码
COM port COM口(通信端口)
CIX 服务提供者
computer name 计算机名
crack 闯入
cryptanalysis 密码分析
DLC 数据链路控制
decryption 解密
database 数据库
dafault route 缺省路由
dafault share 缺省共享
denial of service 拒绝服务
dictionary attack 字典式攻击
directory 目录
directory replication 目录复制
domain 域
domain controller 域名控制器
domain name 域名
域名其实就是入网计算机的名字,它的作用就象寄信需要写明人们的名字、地址一样重
要。域名结构如下:计算机主机名.机构名.网络名.最高层域名。域名用文字表达,比
用数字表达的IP地址容易记忆。加入Internet的各级网络依照DNS的命名规则对本网内
的计算机命名,并负责完成通讯时域名到IP地址的转换 。
DNS 域名服务器
DNS(Domain Name System,域名系统)是指在 Internet上查询域名或IP地址的目录服务系
统。在接收到请求时,它可将另一台主机的域名翻译为IP地址,或反之。大部分域名系
统都维护着一个大型的数据库,它描述了域名与 IP地址的对应关系,并且这个数据库被
定期地更新。翻译请求通常来自网络上的另一台计算机,它需要IP地址以便进行路由选择。
DDE 动态数据交换
DHCP 动态主机配置协议
encryption 加密
EGP 外部网关协议
FDDI 光纤分布式数据接口
FAT 文件分配表
FTP(File Transfer Protocol) 文件传送协议
filter 过滤器
firmware 固件
flooding 淹没
GSNW NetWare网关服务
GDI(graphical device interface) 图形设备界面
GUI 图形用户界面
HTML 超文本标记语言
HTTP 超文本传送协议
IGP 内部安全性
ICMP(Internet Control Message Protocol) 网际控制报文协议
ICMP用来发送关于IP数据报传输的控制和错误信息的TCP/IP协议。当一个IP数据报不能传送
到目的地时,可能是因为目的地的机器暂停服务或者信息交通阻塞,路由器可能使用ICMP将
失败信息通知发送者。
IGMP(Internet Group Management Protocol,Internet群组管理协议)
这种TCP/IP协议允许Internet主机参加多点播送(multicasting)----一种向计算机群广播
信息的有效手段
IIS 信息服务器
IP(Internet Protocol) 网际协议
IRC 网上交谈
ISP 网络服务提供者
IPX 互连网分组协议
IPC 进程间通信
IRQ 中断请求
IP address IP地址
IP地址称作网络协议地址,是分配给主机的一个32位地址,由4个字节组成,分为动
态IP地址和静态IP地址两种。动态IP地址指的是每次连线所取得的地址不同,而静
态IP地址是指每次连线均为同样固定的地址。一般情况下,以电话拨号所取得的地址
均为动态的,也就是每次所取得的地址不同。
IP masquerade IP伪装
IP spoofing IP欺骗
LAN 局域网
LPC 局部过程调用
NNTP 网络新闻传送协议
PPP 点到点协议
称为点对点通信协议(Point to Point Protocol),是为适应那些不能在网络线上的使
用者,通过电话线的连接而彼此通信所制定的协议。
PDC 主域控制器
Telnet 远程登陆
TCP/IP 传输控制协议/网际协议
TCP/IP通信协议主要包含了在Internet上网络通信细节的标准,以及一组网络互连的协
议和路径选择算法。TCP是传输控制协议,相当于物品装箱单,保证数据在传输过程中不
会丢失。IP是网间协议,相当于收发货人的地址和姓名,保证数据到达指定的地点。
TFTP 普通文件传送协议
TFTP是无盘计算机用来传输信息的一种简化的FTP协议。它非常之简单,所以可固化在硬
盘上,而且支持无认证操作。TFTP是一种非常不安全的协议。
Trojan Horse 特洛伊木马
URL 统一资源定位器
UDP 用户数据报协议
VDM 虚拟DOS机
UUCP 是一种基于猫的使用已经很久的文件传输协议,有时候还使用它在Internet上传输
Usenet新闻和E-mail,尤其是在那些间断性联网的站点上。现在很少站提供匿名的UUCP来
存取文件。而它做为一种文件传输协议,只有那些没有入网而使用猫的用户使用此方法。
WWW 万维网
WWW(Word Wide Web)是Internet最新的一种信息服务。它是一种基于超文本文件的
交互式浏览检索工具。用户可用WWW在Internet网上浏览、传递、编辑超文本格式的文件。
WAN 广域网
virtual server 虚拟服务器
Usenet
用户交流网Usenet是网络新闻服务器的主要信息来源。Usenet完全是一个民间自发建立
的,使用Internet交换信息但又不完全依赖Internet进行通讯的用户交流网络。使用Usenet
的自愿者共同遵守一些约定的网络使用规则。
USER name 用户名
USER account 用户帐号
Web page 网页
OpenGL 开放图形语言
ODBC 开放数据库连接
PCI 外设连接接口
………………………………………………………………………………………………
authentication 认证、鉴别
authorization 授权
Back Office Microsoft公司的一种软件包
Back up 备份
backup browser 后备浏览器
BDC 备份域控制器
baseline 基线
BIOS 基本输入/输出系统
Binding 联编、汇集
bit 比特、二进制位
BOOTP 引导协议
BGP 引导网关协议
Bottleneck 瓶径
bridge 网桥、桥接器
browser 浏览器
browsing 浏览
channel 信道、通路
CSU/DSU 信道服务单元/数字服务单元
Checksum 校验和
Cluster 簇、群集
CGI 公共网关接口
CGI(Common Gateway Interface公用网关接口是一个可以产生相同结果或结果随用户输入
而变化的程序。它可以用一种解释性的界面语言编写,也可以用一种编译方式的编程语言
编写。CGI规定了Web服务器调用其它可执行程序的接口协议标准。Web服务器通过调用CGI程
序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处
理,并将响应结果再回送给Web服务器和Web浏览器。CGI程序一般完成Web网页中表单数据的
处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序虽然可以用任何程序设计
语言编写,但是用C语言编写的CGI程序具有执行速度快、安全性高等特点。
CGI-based attack(基于CGI攻击)它利用公共网关接口的脆弱点进行攻击,通常借助www站
点进行
crash(崩溃) 系统突然失效,需要从新引导
CD-ROM 只读型光盘
Component 组件
data link 数据链路
datagram 数据报
default document 缺省文档
digital key system 数字键控系统
disk mirroring 磁盘镜像
distributed file system 分布式文件系统
data-driven attack(数据驱动攻击)依靠隐藏或者封装数据进行的攻击,那些数据可不被察觉
的通过防火墙。

DNS spoofing(域名服务器电子欺骗)攻击者用来损害域名服务器的方法,可通过欺骗DNS的高速
缓存或者内应攻击来实现的一种方式(通常为攻击者假扮合法的DNS服务器角色)
DoS(嘿嘿,可不是DOS哦,这个是deniad of service,极为服务拒绝)用户恶意使用网络信息服
务器时,将拒绝为合法的用户提供服务。
eavesdropping 窃听、窃取
encrypted tunnel 加密通道
enterprise network 企业网
Ethernet 以太网
External security 外部安全性
environment variable 环境变量
fax modem 传真猫
file attribute 文件属性
file system 文件系统
file 文件
FORM 格式
fragments 分段
frame relay 桢中继
firewall 防火墙
Firework(防火墙)是加强加 Internet 与 Intranetp(内部网)之间安全防范的一个或一组系统。防火
墙可以确定哪些内部服务允许外部访问,哪些外人被许可访问所允许的内部服务,那些外部服务可由
内部人员访问。为了使防火墙发挥效力,来自和发往 Internet 的所有信息都必须经由防火墙出入。
防火墙只允许授权信息通过,而防火墙本身不能被渗透。
gated daemon gated进程(好象是一种早期的UNIX寻径服务)
gateway 网关
global account 全局帐号
global group 全局组
group 组
group account 组帐号
group identifier 组标识符
HCL 硬件兼容性表
hash 散表
HPFS 高性能文件系统
Home directory 主目录
home page 竹叶
hop 驿站、中继段
host 主机
hyperlink 超文本链接
highjacking 劫持终端,即为攻击者捕获另一个用户会话的控制。这
是很少发生的,一旦发生就表明目标的安全性已经被破坏。
其实NetXRay在这一点就做的很好。
HTPASSWD 一种用密码来保护WWW(UNIX)上的站点的系统
icon 图标
impersonation attack 伪装攻击
index server 索引服务器
ISA 工业标准结构
Inherieted Rights Filter 继承权限过滤器
ISDN 综合业务数字网
interactive user 交互性用户
intermediate system 中介系统
internal security 内部安全性
Internet Explorer(IE) IBM的万维网浏览器
Internet server 因特网服务器
Interpreter 解释程序
intranet 内联网,企业内部网
intruder 入 侵 者
IMAP 一种邮件协议
是Internet Message Access Protocal 的缩写。IMAP 提供了一个在远程服务器上管理邮件的手
段,它与POP 协议相似,但功能比POP 要多,功能包括:只下载邮件的标题、建立多个邮箱和在
服务器上建立保存邮件的文件夹。
Java Virtual Machine Java虚拟机
java script 基于Java语言的一种脚本语言
jack in 一句黑客常用的口语,意思为破坏服务器安全的行为
kernel 内核
keys 密钥
keyspace 密钥空间
Keystroke Recorder(按键记录器) 一些用语窃取他人用户名和密码的工具
LAN Server 局域网服务器
Local security 局部安全性
log 日志、记录
logging 登录
logoff 退出、注销
logical port 逻辑端口
logon 注册
logon script 登录脚本
LFN 长文件名
logic bomb(逻辑炸弹)一种可导致系统加锁或者故障的程序或代码。
mass browser 主浏览器
MAPI
是Messaging Application Progrmming Interface 的缩写。微软和其它一些公司开发了MAPI,
可使Windows 应用程序接入到从Microsoft Mail 到Novell MHS的多种消息系统。但是, MAPI
仅限于在日常工作的水平上工作,即感知邮件的应用程序,它可在网络上交换邮件与数据。
member server 成员服务器
menu 菜单
message 消息
multilink 多链接
MIME 多媒体Internet邮件扩展
MPR 多协议路由器
multiprocessing 多重处理
Module 模块
multihomed host 多穴主机
MUD
MUD的英文全名是Multiple User Dimension、Multiple User Dialogue或
Multiple User Dungeon,译为“多人世界”、“多人对话”或“多人地牢”,
俗称“泥巴”游戏。
named pipes 命名管道
NDS NetWare目录服务
NetBEUI NetBIOS扩展用户接口
NetBIOS gateway NetBIOS网关
NetWare 网络操作系统(不好意思,我忘了是那个公司开发的了)
network 网络
NetBIOS 网络基本输入/输出系统
NDIS 网络驱动程序接口规范
NetDDE 网络动态数据交换
NIC 网络接口卡
network layer 网络层
Network Monitor 一个网络监控程序
network operating system 网络操作系统
network printer 网络打印机
network security 网络安全
network user 网络用户
NFS 网络文件系统
node 节点
npasswd UNIX的一种代理密码检查器,在提交给密码文件前,它将对潜在的密码进行筛选。
OSPF 开放最短路径优先协议
OSI Model 开放系统互连模式
out-of-band attack 带外攻击
packet filter 分组过滤器
password 口令
path 路径
payload 净负荷
PBX 专用交换机
PCS 个人通信业务
peer 对等
permission 权限
plaintext 明文
PPTP 点到点隧道协议
port 端口
prority 优先权
protocol 协议
potential browser 潜在浏览器
POP 互联网电子邮件协议标准
是Post Office Protocol 的缩写,是互联网电子邮件协议标准。我们可以通过有POP
服务功能的主机传送及接收电子邮件。该协议的缺陷是,当你接收电子邮件时,所有
的信件都从服务器上清除,下载到你的本地硬盘。当然也有一些客户端程序可以将电
子邮件留在服务器上,或设置成超过一定大小的文件不可下载。随着邮件采用多媒体
格式,邮件会越来越大,我们希望能够灵活掌握下载什么文件、何时下载,这就需要
IMAP 协议。目前POP的版本为POP3。
process 进程
proxy 代理
proxy server 代理服务器
代理服务就是代理Web用户去取得资料回来,通常使用WWW软件要去连结远方的终端取得资
料时,必须送出要求信号然后再一个字节一个字节的传送回来。有了proxy的设定以后,要
求资料的信号会先送到Proxy Server。当Proxy Server得到用户的请求时,首先会到cache
中寻找有没有同样的资料,如果有,就由Proxy Server直接将资料传给用户,如果cache没
有资料,Proxy Server就会利用网络上所可以使用的频宽,到远端站台取回资料,一边储存
在cache中,一边传送给用户。即使线路阻塞,还是比用户自己直接抓取要来得快速的。
paseudorandom 伪随机
phreaking 指控制电话系统的过程
RAS 远程访问服务
Remote control 远程控制
RPC 远程过程调用
remote boot 远程引导
route 路由
router 路由器
routing 路由选择
RIP 路由选择信息协议
routed daemon 一种利用RIP的UNIX寻径服务
routing table 路由表
R.U.P 路由更新协议
RSA 一种公共密匙加密算法。而RSA也许是最流行的。
script 脚本
search engine 搜索引擎
SSL 安全套接层
secure 密码
SID 安全标识符
sender 发送者
SLIP 串行线网际协议
server 服务器
server-based network 基于服务器的网络
session layer 会话层
share、sharing 共享
share-level security 共享级安全性
SMTP 简单邮件传送协议
SNMP 简单网络管理协议
Site 站点
SCSI 小型计算机系统接口
snffer 检错器
snooping 探听
standalone server 独立服务器
strong cipher 强密码
stream cipher 流密码
strong password 强口令
SQL 结构化查询语言
subnet mask 子网掩码
subdirectory 子目录
subnet 子网
swap file 交换文件
SACL 系统访问控制表
S/Key 安全连接的一次性密码系统,在S/Key中,密码从不会经过网络发送,因此不可能被窃取。
sniffer(嗅探器) 秘密捕获穿过网络的数据报文的程序,黑客一般用它来设法盗取用户名和密码的。
spoofing(电子欺骗) 任何涉及假扮其他用户或主机以对目标进行未授权访问的过程
time bomb(时间炸弹) 指等待某一特定时间或事件出先才激活,从而导致机器故障的程序
TCPDUMP 是UNIX中捕获数据包的实用工具,常被用语获得详细的网络通信记录的。
Traceroute 一个UNIX上的常用TCP程序,用语跟踪本机和远程主机之间的路由
T0,DS0 56或者64kbps
T1,DS1 24路PCM数字话,总速率为1.544Mbps
T3,DS3 28个T1信道,作品能够速率为44.736Mbps
thin client 瘦客户机
thread 线程
throughput 吞吐量
transport layer 传输量
Transport Protocol 传输协议
trust 信任
tunnel 安全加密链路
vector of attack 攻击向量
Virtual directory 虚目录
Virtual Machine 虚拟机
VRML 虚拟现实模型语言
volume 文件集
vulnerability 脆弱性
weak passwurd 弱口令
well-known ports 通用端口
workstation 工作站
X.25 一种分组交换网协议
zone transfer 区域转换


[ 2005/02/09 23:17 | by 网络毛毛虫 ]
环境:win2003server
目的:php4.3.10/PHP 5.0.2+apache2.0.52+mysql4.1.9+zend+serv-u
我找了那么多文章没有可以让我满意的,下面是我的配置手记,可以让很多人方便地配置服务器,虽然win2003下跑php觉得很奇怪,呵呵

apache_2.0.52-win32-x86-no_ssl.msi
php-4.3.10-Win32.zip
mysql-noinstall-4.1.9-win32.zip
phpMyAdmin-2.6.1
zend 2.5.7
HF-ServU6002-LDR.zip
诺顿

1,安装apache_2.0.52-win32-x86-no_ss
比如将其安装在d盘,安装过程就不用说了,NEXT就可以,安装完了就可以在任务栏的地方看将这样的图标 ,表示已经启动成功。打开网页

http://127.0.0.1,出现安装成功的页面。

接下来对 Apache 的配置文件进行配置,使其支持PHP,用记事本打开 Apache2\conf\下的 httpd.conf 文件,找到:
DirectoryIndex index.html index.html.var
在后面加  index.php :
DirectoryIndex index.html index.html.var index.php
为了使 Apache 识别 PHP 的相关扩展名,找到:
<Directory "D:/Apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

在后面添加如下两行:
AddType application/x-httpd-php .php .phtml .php3 .php4
AddType application/x-httpd-php-source .phps
指定 php 模块,找到并定位到如下这行:
#LoadModule ssl_module modules/mod_ssl.so
在下面添加:
如果是php5
LoadModule php5_module D:\PHP\php5apache2.dll
  使它指向 PHP5 目录下的 php5apache2.dll 文件,路径一定要准确。
  为了指定 Apache 识别中文,我们指定 GB2312 为默认编码。应该找到并定位到下面这行
如果是php4
LoadModule php4_module d:/php/sapi/php4apache2.dll



找到:AddDefaultCharset ISO-8859-1
将其修改为:
AddDefaultCharset GB2312

保存 httpd.conf 重起 Apache


2.php(gd+iconv+curl)
php4的话
下载 php-4.3.10-Win32.zip
解压缩到你的d盘(举例),文件夹命名为php,
把目录下的php.ini-recommended改名为php.ini放到C:\WINDOWS下
把dlls下需要的东西拷贝到你的system32下:
如果要iconv就拷个iconv.dll过去
然后比如在php.ini中把
;extension=php_gd2.dll
;extension=php_curl.dll
;extension=php_iconv.dll
前的“;”去掉就支持gd+iconv+curl了
找到; Directory in which the loadable extensions (modules) reside.

设置 extension_dir = "D:\PHP\extensions\"




如果安装PHP 5.0.2
将下载来的 PHP5 RC3(php-5.0.0RC3-Win32.zip) 解压缩到 D:\PHP\ 目录下。复制 D:\PHP\ 目录下的 php5ts.dll 文件到 C:\windows\
  复制 D:\PHP\ 目录下的下列 dll 文件于 C:\windows\system32\ 目录下:
  fdftk.dll
  fribidi.dll
  gds32.dll
  libeay32.dll
  libintl-1.dll
  libmhash.dll
  libmysql.dll
  libmysqli.dll
  ntwdblib.dll
  ntwdblib.dll
  yaz.dll
  其中 libmysql.dll 为 MySQL 4.1 之前版本的扩展支持,libmysqli.dll 为 MySQL 4.1 之后版本的扩展支持。因为我上面下载的是

MySQL 4.0.20 ,所以其实复制 libmysql.dll 即可。
  复制 C:\PHP5\ 目录下的 php.ini-dist 文件到 C:\windows\ 目录下,并改名为 php.ini ,并用记事本打开编辑:
  定位到下面两行:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"
  修改下面一行使它指向 D:\PHP\ext\ 目录,修改后如下:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "D:\PHP\ext\"

测试 PHP 是否配置成功:

  打开记事本,输入如下这行代码:
<?php phpinfo(); ?>
保存为 phpinfo.php 文件,存放于 Apache2\htdocs\ 目录下,好了,打开浏览器,在地址栏中输入: http://localhost/phpinfo.php 并回

截图就算了,太大,太长了
到此 PHP 的配置大功告成.

3.安装mysql-noinstall-4.1.9-win32
假设把它解压到D:\mysql目录下,在cmd下打开该目录下的bin文件夹,
然后 mysqld-nt install 把MYSQL安装为服务


让php5加载mysql的办法
COPY php.ini 到winnt目录下
增加如下语句到以下位置
extension_dir = d:php5ext
;Windows Extensions
去除;extension=php_mysql.dll的分号
COPY libmysql.dll到winntsystem32目录下

4,安装phpMyAdmin-2.6.1
打开phpmyadmin下的config.inc.php文件
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL hostname or IP address
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
// with 'config' auth_type)
将host,user和password修改成你自己的IP地址,用户和密码


  如果是php4,phpMyAdmin可能会提示:
php_mbstring extension找不到(把php.ini里面;extension=php_mbstring.dll的前面的";"去掉就可以--别忘记重起apache)
$cfg['PmaAbsoluteUri'] 没有设置(直接$cfg['PmaAbsoluteUri'] = '你的路径';)
解决Client does not support authentication protocol  2005-02-08 12:55:51 Post by: clinch  view:2

好多朋友升级了mysql为4.10以上会发生此错误,php4.x下phpmyadmin之类的程序连接不上数据库,是因为mysql4.10以上改变了用户密码验证协

议,php的连接模块也需要更换新的,php5默认就是这种新的连接模块...

不想更换可以这样:
CODE  
# SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
# FLUSH PRIVILEGES;



5,安装Zend
直接装ZendOptimizer-2[1].5.7-Windows-i386,按提示,下去就可以完成了
不过他会自己写进去你的php.ini一些东西哦,可以不管

6,安装Serv-U 6.0.0.2和诺顿服务器版本
这一步和顺序无关,想装就装吧
这个直接安装就可以,安装汗化和破解版本
看中文就知道什么意思了

好了,现在一个最新的服务器环境配置就搞定了

是Apache 实现的,基于pathinfo 的友好URL设置。

在httpd.conf里加入: AcceptPathInfo on

手册在这:

http://httpd.apache.org/docs-2.0/mod/core.html#acceptpathinfo

 
分页: 8/15 第一页 上页 3 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表