AM

Win XP下全新安装Apache2,PHP5,MYSQL5

网页设计 — 作者 am @ 19:10

Win XP下全新安装Apache2,PHP5,MYSQL5


看PHP,MYSQL,都出了新版本,想尝尝鲜,就试着安装了一下,然后把安装过程记了下来,希望能对学习PHP的新手有些帮助!

Windows XP下全新安装Apache2,PHP5,MYSQL5,Zend的简单过程 

一、下载地址: 

Apache2.0.50 :http://httpd.apache.org/download.cgi 
PHP5.0.2 :http://cn2.php.net/get/php-5.0.2-Win32.zip/from/a/mirror 
MYSQL5.0.2:http://dev.mysql.com/downloads/mysql/5.0.html 
Zend2.5.2 :http://www.zend.com/store/free_download.php?pid=13

软件的安装就不说了,其中只有PHP下的是zip包,直接解压就可以了。 
安装顺序就是上面列出来的顺序,Zend我是最后等所有的运行都没问题后才装的。 

二、简单安装过程: 
(一)Apache: 
Apache2.0.50的安装很简单,我就直接把他装到了E盘根目录下(我C盘是系统盘,D盘是temp盘,偶发现在windows下单独拿个分区来做临时文件的存放地对系统的速度影响不小,这样做能提升系统运行的速度,感兴趣的朋友可以试试看),安装完后我的apache目录就是E:\apache2 

(二)PHP: 
我是直接解压缩放到E盘php目录下了,这样查找文件会方便许多。 
(三)Mysql: 
直接装到E:\mysql下,它的默认目录太长,是在C盘下的,偶的C盘是除windows的文件外别的一概不放的。 
(四)Zend: 
所有的调试都正常后我把Zend装到了E:\program files\zend下 

三、配置过程: 
(一)http.conf 

这个文件我改了几个地方: 
把PHP直接作为apache的一个模块运行,我在里面加了两句: 

CODE: [Copy to clipboard]   
LoadModule php5_module "E:/php/php5apache2.dll" 
AddType application/x-httpd-php .php 

我在E:\apache2目录下建立了一个www的目录用于存放我的站点文件,在http.conf里改了这样一句话: 
把DocumentRoot "E:/Apache2/htdocs"改成了DocumentRoot "E:/Apache2/www" 

Apache2.0.x于1.3.x相比2.0.x默认不能直接列目录,偶感觉不爽,就改了: 
把DocumentRoot "E:/Apache2/www"这句下的如下语句 

CODE: [Copy to clipboard]   

Options FollowSymLinks 
AllowOverride None 


改为: 

CODE: [Copy to clipboard]   

Options Indexes FollowSymLinks 
AllowOverride None 


把apache的默认字符设置为中文简体: 
AddDefaultCharset GB2312 

修改目录的默认首页: 
DirectoryIndex 后面写上你想设置为首页的文件名,如:index.html index.php等 

别的就没再动什么地方 

注意一点的是,要使这些配置生效需要重新启动apache 

(二)php.ini 
以前用php4.x的时候觉得配置起来很简单,所以偶用PHP5也直接那么配了,谁知道完了mysql不能用,说是无法连接动态库,我仔细检查了一下 
php_mysql.dll明明存在,可就说找不到,这点让我郁闷了N久,偶重新解压了php5也没用,后来在php的install文档里发现了这么一句话: 
php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll   
(bundled) 
于是偶才找到了原因...... 
配置php5.0.2是这样来过的: 
把php.ini-dist复制到C:\windows 下改名为 php.ini(装过php的都做过吧) 
然后修改了几个地方: 
extension_dir = "E:\php\ext" 
(指定动态连接库的目录,php5和php4不同的地方就是它的动态连接库目录变了,这在它的文档结构里有详细的说明) 
然后把下面几句前面的分号去掉 
;extension=php_dba.dll 
;extension=php_dbase.dll 
;extension=php_filepro.dll 
;extension=php_gd2.dll 
;extension=php_imap.dll 
;extension=php_mysql.dll 

接下来修改了一些文件上传以及内存使用最大限制: 
memory_limit = 20M 
post_max_size = 20M 
upload_max_filesize = 20M 
别的就没改什么了,这里修改过php.ini以后也要重新启动apache 

接下来一点很重要的就是把php目录下的 libmysql.dll 和 libmysqli.dll 
复制到windows/system32下,如果不这样做,mysql动态连接库就无法正常加载。 

(三)Mysql和Zend的配置 
现在Apache和PHP都已经配置好了,在浏览器里输入localhost看看结果,运行成功,然后输入localhost/phpmyadmin看也成功。郁闷,Phpmyadmin提示错误信息: 


  QUOTE: 
MySQL 返回: 

#1251 - Client does not support authentication protocol requested by 
server; consider upgrading MySQL client 

奇怪了,偶明明装的是MYSQL最新版本怎么会客户端版本过低呢,真是郁闷啊 
就此放了一下,经多次测试仍然不成功就先放弃了一下,玩了一把KOF97 
然后在CCF.熊猫和IM286.ceo的帮助下,终于找到了原因: 
落伍ceo:“升级客户端 
新版本的mysql使用了新的密码验证方法 
设置mysql密码时使用old_password可以解决这个问题” 
CCF.熊猫:“使用old_password”重新设定密码就可以了”。 
感谢这两位朋友,具体解决办法如下: 
由于偶不知道怎么升级client,因为在windows 下 
server和client是捆绑安装的,我就用了old_password的方法: 

QUOTE: 
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') 
-> WHERE Host = 'some_host' AND User = 'some_user'; 
mysql> FLUSH PRIVILEGES; 

然后浏览“http://localhost/phpmyadmin”,OH!测试成功!


Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法

网页设计 — 作者 am @ 19:09

03年的时候就看过一本php的书,那时还是php3,回首四年php的在web开的的前景真还是一片光明啊!三年不见的php在去看已到了php5了,现在算起我真正从写第一个php的WEB开始距今还是有三四个月了,用工作之余正在进行www.kuomart.com网站的写做,回想当初一直用的是Windows2003+IIS6+PHP5.0.7+MYSQL4.1在进行开发,直到昨天机子重了木马,Kav也没查出个所以然,自己找也没有发现什么可疑暴露点,所以干脆重装了一下xp,由于TV1000电视卡只能在xp进才能正常运行,在2003系统下以前配置成功过一次,但是老实出现硬件出错蓝屏!所以干脆把2003下的我的开发环境的web开发部分也在xp下安装一部分。很想安装一下lamp环境,但考虑到机子上数据太多,操作起来麻烦,等有钱了再买个硬盘或都那天心血来潮再说吧。于是今天中午就开始配置环境!
 到http://www.apache.org下载了apache最新版本apache.2.24,安装后怎么也没找到服务,原来我选择了only第二项,选择这项需要手动添加windows服务!baidu了一下才搞明白,所以如果你是第一次安装就一直下一步不要进地设什么不必要的设置,运行一定会ok!
  接下来就是安装php了,我开始安装了php5.0.4,4,安装php我就不多说了,下面会把我找到的资料贴出来。然后就是对apache支持php的配置,当然是修改httpd.conf了,可是我
用记事本打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf这个文件进行修改: 
   ①找到:
AddType application/x-gzip .gz .tgz
   在下面添加以下几行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
AddType image/x-icon .ico 
   ②找到:
#LoadModule ssl_module modules/mod_ssl.so
   在下面添加一行:
LoadModule php5_module C:\php5\php5apache2_2.dll
   (特别提示:如果你的Apache版本为1.x的,此处应为:LoadModule php5_module C:\php5\php5apache.dll;如果你的Apache版本为2.0.x-2.2.x的,此处应为:LoadModule php5_module C:\php5\php5apache2.dll,我在此处费了好大周折才发现这点!) 
   ③找到:
DirectoryIndex index.php…
   这行,可以这样修改,添加默认的文件名:
DirectoryIndex index.php default.php index.htm index.html default.htm default.html
怎么出不正确加上LoadModule php5_module C:\php5\php5apache2_2.dll这句就出现
requested 错误
当然这种情况通常就是baidu或者google一下,原来是各种版本间的问题,我想应该是的,找到对应配置资料如下:
一.下载最新的Apache2.24,MySQL5.2,PHP5.2.1[下载地址:http://cn.php.net/downloads.php 注意:同时下载php-5.2.1-Win32和pecl-5.2.1-Win32(扩展包),格式是解压缩的那种,而不是exe或者msi等直接安装的那种。](具体地址请用baidu自行搜索)。
二.安装配置PHP5.2.1
   1.解压缩PHP5.2.1压缩包到C:\PHP5(这个路径和文件名都可以随意,不过以下要是用到这个路径和文件名,如果你用的不是该路径和文件名,请做相应的修改)。
   2.复制C:\PHP5目录下的以下文件到windows的系统文件夹里,文件夹视Windows版本的不同而不同(如果是Windows9x/ME,则为c:\windows\syste;如果是Windows NT/2000,则为c:\winnt\system32;如果是Windows XP/server2003,则为c:\windows\system32。其中C:\为你现在所使用的操作系统的系统盘,如果你目前操作系统不是安装在C:\windows下,请相应做出修改)
php5ts.dll
fdftk.dll
fribidi.dll
gds32.dll
libeay32.dll
libmcrypt.dll
libmhash.dll
libmysql.dll
libswish-e.dll
msql.dll
ntwdblib.dll
ssleay32.dll
yaz.dll
   3.把C:\PHP5目录下的文件php.ini-dist改名为php.ini(该配置文件自动给所有添加内容加上“//”,增加安全,同时也增加了麻烦;如果把php.ini-recommended改名为php.ini,该配置文件不给所添加内容加上“//”,减少了安全,但更加便利。选择哪个由你决定),复制php.ini到C:\windows\(XP/2003/9x/Me)或C:\Winnt\(2000/nt)下,用记事本打开,做如下几项修改: 
   ①搜索extension_dir= ./这行,并将其路径指到你的PHP目录下的extensions目录,修改为:extension_dir = C:\PHP5\ext 
   ②如若想支持更多模块,请接下面去做,如果不想的话,直接保存php.ini文件即可。 
   PHP所支持模块很多,不过有些dll不是免费的,所以没有随PHP的压缩包一起发布,不过dlls文件夹里带的就非常多了,刚才我们已经把它们复制到system32文件夹下了,现在我们测试看它支持多少模块。以下是我测试的结果,仅供参考,如果安装完毕后,弹出不支持xxx.dll模块的话,直接将前面分号加上去就可以了。搜索:
;Windows Extensions
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
   下面都用分号在前面注释掉了支持的扩展模块,如果你想PHP支持某个模块,请将前面的“;”去掉即可,下面是我测试后的结果,一般按照下面那样去掉注释后没什么问题的:
extension=php_bz2.dll
extension=php_cpdf.dll
extension=php_crack.dll
extension=php_curl.dll
extension=php_db.dll
extension=php_dba.dll
extension=php_dbase.dll
extension=php_dbx.dll
extension=php_domxml.dll
extension=php_exif.dll
extension=php_fdf.dll
extension=php_filepro.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_hyperwave.dll
extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
extension=php_imap.dll
extension=php_interbase.dll
extension=php_java.dll
extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_msql.dll
;extension=php_oci8.dll
extension=php_openssl.dll
;extension=php_oracle.dll
extension=php_pdf.dll
extension=php_pgsql.dll
;extension=php_printer.dll
extension=php_shmop.dll
extension=php_snmp.dll
extension=php_sockets.dll
;extension=php_sybase_ct.dll
extension=php_w32api.dll
extension=php_xmlrpc.dll
extension=php_xslt.dll
extension=php_yaz.dll
extension=php_zip.dll
修改完成后,保存php.ini。 
   ③解压缩pecl-5.2.1-Win32.rar包,将其中的所有文件复制到C:\PHP5\ext文件夹下。(该文件夹是PHP5.2.1的扩展文件存放之处,如果你用c语言编了PHP的扩展程序,也可以放到该文件夹下) 
   ④在C:\PHP5目录下新建一个文件夹,命名为:session。(该文件夹是用来保存session的,因为PHP没有类似ASP中的application那样的长驻内存的变量,所以对于保存初始查询条件以备翻页之用,或者做购物车的来说,session几乎是唯一可选的。不过该文件夹以后需要定期清理)
到此完成PHP的安装和配置。
三.Mysql的安装
   Mysql相对来说是比较独立的,这个数据库很小,不能直接对它进行操作,不像access或者SQL2000那样有图形化的管理工具,不过目前已经有很多图形化管理软件可以很好地操作它,比如:EMS SQL Manager 2005 for MySQL(强烈推荐 最优秀的MySQL管理软件),Navicat,phpMyAdmin,mysqlcc。这些软件可以到网上下载获得,在此不详细说明。
  1.下载获得Mysql的for win32安装包后,用winzip打开,直接运行setup.exe,需要注意的是选择一个安装路径,当然,安装路径可以任意,不过建议将它和PHP安装在一起,选择C:\MySQL目录。 
  2.安装完成后MySQL自动进入设置阶段。按照默认方式进行配置,最后输入密码,完成设置。(默认的用户名是root,密码为空) 
  3.一般装完MySQL后会自动启动服务,如果没有启动的话,请双击C:\MySQL\bin\mysqld-nt.exe运行即可。 
  4.如果你已经下载了上面提到的几个管理软件,就可用它们进行MySQL的管理了。
四.IIS的配置(与第五任选一项) 
  打开IIS,在“默认Web站点”上右键打开属性,在主目录里做如下图中的设置,注意步骤:

完成后IIS+PHP+MySQL的环境算是建立了。
五.Apache的安装配置(与第四任选一项) 
  如果你没有安装IIS,那么请装Apache这个小巧而强大的Web服务器,安装目录建议和PHP的目录一致,选择C:\。系统默认安装目录是C:\Program Files: 
  1.下载Apache2.2.4 for win32.Msi安装文件,直接双击它后就会自动执行Apache的安装了。 
  2.安装过程中,按照提示,从上到下第一个空行输入localhost,其余的两个空行分别输入你的名字和邮件地址(随便输入什么都行),完成安装配置。 
  安装完后会在桌面右下角系统托盘里显示apache的图标,双击可以打开Apache的控制面板,可以停止或者重起服务器。 
  3.Apache2.2.4的配置 
   用记事本打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf这个文件进行修改: 
   ①找到:
AddType application/x-gzip .gz .tgz
   在下面添加以下几行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
AddType image/x-icon .ico 
   ②找到:
#LoadModule ssl_module modules/mod_ssl.so
   在下面添加一行:
LoadModule php5_module C:\php5\php5apache2_2.dll
   (特别提示:如果你的Apache版本为1.x的,此处应为:LoadModule php5_module C:\php5\php5apache.dll;如果你的Apache版本为2.0.x-2.2.x的,此处应为:LoadModule php5_module C:\php5\php5apache2.dll,我在此处费了好大周折才发现这点!) 
   ③找到:
DirectoryIndex index.php…
   这行,可以这样修改,添加默认的文件名:
DirectoryIndex index.php default.php index.htm index.html default.htm default.html
保存文件,重起apache服务器。到此PHP的环境已经完全建立了。
六.Zend Optimizer安装配置(可选) 
  下载来后是一个.exe的文件,直接安装就可以了,安装过程要你选择PHP版本,一定要选择准确,这里我选择php5.2.1,完成安装之前提示是否备份php.ini,点确定后就结束安装了。 
  打开php.ini,修改一个地方:
找到:
[Zend]
在下面可以看到: 
zend_optimizer.optimization_level=*
这行,将“=”后面数值改为1023,也就是将这行改为: 
zend_optimizer.optimization_level=1023
保存后重起Apache/IIS,到此安装全部结束。
七.测试 
  用记事本新建个文件,写如下几行:
phpinfo();
?> 
  将文件改名为phpinfo.php,保存到C:\Apache Software Foundation\Apache2.2\htdocs目录下(该目录是你的站点根目录),然后在浏览器中输入http://localhost/phpinfo.php。 
  如果你可以看到相关的PHP信息,那就证明整个Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1环境的安装配置工作胜利完成!


该文章转载自脚本之家:file:///H:/Downloads/Windows下IIS6-Apache2_2_4+MySQL5_2+PHP5_2_1安装配置方法.htm


Apache2的httpd.conf翻译

网页设计 — 作者 am @ 19:08
# 基于 NCSA 服务的配置文件。
#
#这是Apache服务器主要配置文件。
#它包含服务器的影响服务器运行的配置指令。
#参见<URL:http://httpd.ache.org/doc-2.0/>以取得关于这些指令的详细信息
#
#不要只是简单的阅读这些指令信息而不去理解它。
#这里只是做了简单的说明,如果你没有参考在线文件,你就会被警告。
#
#这些配置指令被分为下面三个部分:
#1. 控制整个Apache服务器行为的部分(即全局环境变量)
#2. 定义主要或者默认服务参数的指令,也为所有虚拟主机提供默认的设置参数
#3. 虚拟主机的设置参数
#
#配置和日志文件名:如果你指定的文件名以“/”开始(win32下以“dirver:/”),
#服务器将使用绝对路径,如果文件名不是以“/”开始的,那么它将把ServerRoot
#的值附加在文件名的前面,例如,对“logs/foo.log",如果ServerRoot的值
#为“/usr/local/apache2”,则该文件应为“/usr/local/apache2/logs/foo.log”
#
##第一区:全局环境参数
#
#这里设置的参数将影响整个Apache服务器的行为;
#例如Apache能够处理的并发请求的数量等。
#
#ServerRoot:指出服务器保存其配置、出错和日志文件等的根目录。
#
#注意!如果你想要将它指定为NFS或其它网络上的位置,
#请一定要去阅读与LockFile有关的文档(可能在
#<
http://httpd.apache.org/docs-2.0/mod/mpm_common.html#lockfile>)。
#这将会使你自己也能解决很多问题。
#
#路径的结尾不要添加斜线。
#
ServerRoot "/usr/loacl/apache2"

#
#串行访问的锁文件必须保存在本地磁盘上
#
<IfModule !mpm_winnt.c>
<IfModule !mpm_neware.c>
#LockFile logs/accept.lock
</IfModule>
</IfModule>

#ScoreBoardFile:用来保存内部服务进程信息的文件。
#如果未指明(默认),记分板(scoreboard)将被保存在一个匿名的共享内存段中,
#并且它不能被第三方软件所使用。
#如果指定了,要确保不能使用两个Apache使用同一个记分板文件,
#这个记分板文件必须保存在本地磁盘上。
#
<IfModule !mpm_netware.c>
<IfModule !perchild.c>
#ScoreBoardFile logs/apache_runtime_status
<IfModule>
<IfModule>

#
#PidFile:记录服务器启动进程号的文件。
#
<IfModule !mpm_neware.c>
PidFile logs/httpd.pid
</IfModule>

#
#Timeout:接收和发送前超时秒数
#
Timeout 300

#
#KeepAlive:是否允许稳固的连接(每个连接有多个请求),
#设为"Off"则停用。
#
KeepAlive On

#
#MaxKeepAliveRequests:在稳固连接期间允许的最大请求数,
#设为0表示无限制接入。
#我们推荐你将其设为一个较大的值,以便提高性能
MaxKeepAliveRequests 100

#
#KeepAliveTimeout:在同一个连接上从同一台客户上接收请求的秒数
#
KeepAliveTimeout 15

##
##Server-Pool大小设定(针对MPM的)
##

# prefork MPM
# StartServers:启动时服务器启动的进程数
# MinSpareServers:保有的备用进程的最小数目
# MaxSpareServers:保有的备用进程的最大数目
# MaxClients:服务器允许启动的最大进程数
# MaxRequestsPerChild:一个服务进程允许的最大请求数
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestPerChild 0
</IfModule>

# worker MPM
# StartServers:服务器启动时的服务进程数目
# MaxClients:允许同时连接的最大用户数目
# MinSpareThreads:保有的最小工作线程数目
# MaxSpareThreads:允许保有的最大工作线程数目
# ThreadsPerChild:每个服务进程中的工作线程常数
# MaxRequestsPerChild:服务进程中允许的最大请求数目
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

# perchild MPM
# NumServers:服务进程数量
# StartThreads:每个服务进程中的起始线程数量
# MinSpareThreads:保有的最小线程数量
# MaxSpareThreads:保有的最大线程数量
# MaxThreadsPerChild:每个服务进程允许的最大线程数
# MaxRequestsPerChild:每个服务进程允许连接的最大数量
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
</IfModule>

# WinNT MPM
# ThreadsPerChild:服务进程中工作线程常数
# MaxRequestsPerChild:服务进程允许的最大请求数
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>

# BeOS MPM
# StartThreads:服务器启动时启动的线程数
# MaxClients:可以启动的最大线程数(一个线程等于一个用户)
# MaxRequestsPerThread:每个线程允许的最大请求数
<IfModule beos.c>
StartThreads 10
MaxClients 50
MaxRequestsPerThread 10000
</IfModule>

# NetWare MPM
# ThreadStachSize:为每个工作线程分配的堆栈尺寸
# StartThreads:服务器启动时启动的线程数
# MinSpareThreads:用于处理实发请求的空闲线程数
# MaxSpareThreads:空闲线程的最大数量
# MaxThreads:在同一时间活动的最大线程数
# MaxRequestPerChild:一个线程服务请求的最大数量,
# 推荐将其设置为0,以实现无限制的接入
<IfModule mpm_netware.c>
ThreadStackSize 65536
StartThreads 250
MinSpareThreads 25
MaxSpareThreads 250
MaxThreads 1000
MaxRequestPerChild 0
</IfModule>

# OS/2 MPM
# StartServers:启动的服务进程数量
# MinSpareThreads:每个进程允许的最小空闲线程
# MaxSpareThreads:每个进程允许的最大空闲线程
# MaxRequestsPerChild:每个服务进程允许的最大连接数
<IfModule mpmt_os2.c>
StartServers 2
MinSpareThreads 5
MaxSpareThreads 10
MaxRequestsPerChild 0
</IfModule>

#
# Listen:允许你绑定Apache服务到指定的IP地址和端口上,以取代默认值
# 参见<VirtualHost>指令
# 使用如下命令使Apache只在指定的IP地址上监听,
# 以防止它在IP地址0.0.0.0上监听
#
# Listen 12.34.56.78:80

Listen 80

#
# 动态共享支持(DSO)
#
# 为了能够使用那些以DSO模式编译的模块中的函数,你必须有相应的“LoadModule”行,
# 因此,在这里包含了这些指令,以便能在使用它之前激活。
# 那些静态编译的模块不需要在这里列出 (即以“httpd -l”列出的模块)
#
# 示例:
# LoadModule foo_module modules/mod_foo.so
#

#
# ExtendedStatus:当调用“server-status”时,控制Apache是产生“全”状态
# 信息(ExtendedStatus On),还是产生基本信息(ExtendedStatus Off)。
# 默认为off
#
# ExtendedStatus On

### 第二区:“主”服务配置
#
# 这一区建立被 “主” 服务器用的指令值,以回应那些不被 <VirtualHost>
# 定义处理的任何请求。
# 这些数值也提供默认值给后面定义的<VirtualHost>容器。
# 如果<VirtualHost>中有定义,那么这里定义的指令值将被
# <VirtualHost>中的定义所覆盖。
#

<IfModule !mpm_winnt.c>
<IfModule !mpm_neware.c>
#
# 如果你想使httpd以另外的用户或组来运行,你必须在开始时以root方式启动
# 然后再将它切换为你想要使用的用户或组。
#
# User/Group:运行httpd的用户和组
# 在SCO (ODT3)上使用“User nouser”和“Group nogroup”
# 在HPUX上,你可能不能以nobody身份使用共享内存,建议创建一个www用户。
# 注意一些核心(kernel)在组ID大于60000时拒绝setgid(Group)或semctl(IPC_SET),
#节在这些系统上不要使用“Group #-1”。
#
User nobody
Group #-1
</IfModule>
</IfModule>

#
# ServerAdmin:你的邮件地址,当发生问题时Apache将向你发出邮件。
# 作为一个出错文档,这个地址显示在server-generated页上,
# 例如:admin@your-domain.com
#
ServerAdmin kreny@sina.com

#
# ServerName指定Apache用于识别自身的名字和端口号。
# 通常这个值是自动指定的,但是我们推荐你显式的指定它以防止启动时出错
#
# 如果你为你的主机指定了一个无效的DNS名,server-generated重定向将不能工作。
# 参见UseCanonicalName指令
#
# 如果你的主机没有注册DNS名,在这里键入它的IP地址
# 无论如何,你必须使用它的IP地址来提供服务,
# 这里使用一种容易理解的方式重定向服务
ServerName http://www.dalouis.com/

#
# UseCanonicalName:决定Apache如何构造URLS和 SERVER_NAME 和 SERVER_PORT 的指令。
# 当设置为 “Off”时,Apache会使用用户端提供的主机名和端口号。
# 当设置为“On”,Apache会使用ServerName指令的值。
#
UseCanonicalName Off

#
# DocumentRoot:你的文档的根目录。默认情况下,所有的请求从这个目录进行应答。
# 但是可以使用符号链接和别名来指向到其他的位置。
#
DocumentRoot "/home/redhat/public_html"

#
# Apache可以存取的每个目录都可以配置存取权限(包括它的子目录)。
#
# 首先,我们配置一个高限制的特征。

# 这将禁止访问文件系统所在的目录,并添加你希望允许访问的目录块。
# 如下所示
<Directory />
Order Deny,Allow
Deny from all
</Directory>

#
# 注意从这里开始你一定要明确地允许哪些特别的特征能够被使用。
# - 所以,如果Apache没有象你所期待的那样工作的话,
# 请检查你是否在下面明确的指定它可用。
#

#
# 这将改变到你设置的DocumentRoot
#
<Directory "/home/redhat/public_html">

#
# Options:这个指令的值可以是“None”,“All”,或者下列选项的任意组合:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# 注意,“MultiViews”必须被显式的指定,“Options All”不能为你提供这个特性。
#
# 这个指令既复杂又重要,请参见
#“http://httpd.apache.org/docs-2.0/mod/core.html#optioins”以取得更多的信息。
#
Options FollowSymLinks

#
# AllowOverride控制那些被放置在.htaccess文件中的指令。
# 它可以是“All”,“None”,或者下列指令的组合:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# 控制谁可以获得服务。
#
Order allow,deny
Allow from all

</Directory>

#
# UserDir:指定在得到一个~user请求时将会添加到用户home目录后的目录名。
#

UserDir public_html

# 为防止在UserDir指令上的漏洞,对root用户设置
# 象“./”这样的UserDir是非常有用的。
# 如果你使用Apache 1.3或以上版本,我们强烈建议你
# 在你的服务器配置文件中包含下面的行

UserDir disabled root

#
# 下面是一个使用UserDir指令使一个站点的目录具有只读属性的示例:
#
# <Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit Indexes
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludeNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
# </Directory>

#
# DirectoryIndex:定义请求是一个目录时,Apache向用户提供服务的文件名
#
# index.html.var文件(一个类型映象文件)用于提供一个文档处理列表,
# 出于同样的目的,也可以使用MultiViews选项,但是它会非常慢。
#
DirectoryIndex index.php index.html index.html.var

#
# AccessFileName:在每个目录中查询为目录提供附加配置指令的文件的文件名。
# 参见AllowOverride指令。
#
AccessFileName .htaccess

#
# 下面的行防止.htaccess和.htpasswd文件被Web客户查看。
#
<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>

#
# Typeconfig:定义在哪里查询mime.types文件。
#
TypeConfig conf/mime.types

#
# DefaultType:定义当不能确定MIME类型时服务器提供的默认MIME类型。
# 如果你的服务主要包含text或HTML文档,“text/plain”是一个好的选择;
# 如果大多是二进制文档,诸如软件或图像,你应使用
# “application/octer-stream”来防止浏览器象显示文本那样显示二进制文件。
#
DefaultType text/plain

#
# mod_mime_magic允许服务器从自己定义自己类型的文件中使用不同的线索(hints),
# 这个MIMEMagicFile指令定义hints定义所在的文件。
#
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>

#
# HostnameLookups:指定记录用户端的名字还是IP地址,例如,本指令为on时
# 记录主机名,如http://www.apache.org/;为off时记录IP地址,204.62.129.132。
# 默认值为off,这要比设为on好得多,因为如果设为on则每个用户端请求都将会
# 至少造成对 nameserver 进行一次查询。
#
HostnameLookups Off

#
# EnableMMAP:控制是否进行内存转储(如果操作系统支持的话)。
# 默认为on,如果你的服务器安装在网络文件系统上(NFS),请关闭它。
# 在一些系统上,关闭它会提升系统性能(与文件系统类型无关);
# 具体情况请参阅http://httpd.apache.org/docs-2.0/mod/core.html#enablemmap
#
# EnableMMAP off

#
# EnableSendfile:控制是否使用sendfile kernel支持发送文件
# (如果操作系统支持的话)。默认为on,如果你的服务器安装在网络文件系统
# (NFS)上,请你关闭它。
# 参见http://httpd.apache.org/docs-2.0/mod/core.html#enablesendfile
#
# EnableSendfile off

#
# ErrorLog:错误日志文件定位。
# 如果你没有在<VirtualHost>内定义ErrorLog指令,这个虚拟主机的错误信息
# 将记录在这里。如果你在那儿定义了ErrorLog,这些错误信息将记录在你所
# 定义的文件里,而不是这儿定义的文件。
#
ErrorLog logs/error_log

#
# LogLevel:控制记录在错误日志文件中的日志信息数量。
# 可能的值包括:debug,info,notice,warn,error,crit,alert,emerg。
#
LogLevel warn

#
# 下面的指令为CustomLog指令定义格式别名。
#
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# 你需要安装了mod_logio.c模块才能使用%I和%O。
# LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio

#
# 指定接入日志文件的定位和格式(一般日志格式)。
# 如果你没有在<VirtualHost>内定义这个指令,传输信息将记录在这里,
# 如果你定义了这个指令,则记录在你指定的位置,而不是这儿定义的位置。
#
CustomLog logs/access_log common

#
# 如果你想要记录agent和referer信息,可以使用下面的指令
#
# CustomLog logs/referer_log referer
# CustomLog logs/agent_log agent

#
# 如果你想要使用一个文件记录access,agent和referer信息,
# 你可以如下定义这个指令:
#
# CustomLog logs/access_log combined

#
# ServerTokens
# 这个指令定义包含在HTTP回应头中的信息类型。默认为“Full”,
# 这表示在回应头中将包含模块中的操作系统类型和编译信息。
# 可以设为列各值中的一个:
# Full | OS | Minor | Minimal | Major | Prod
# Full传达的信息最多,而Prod最少。
#
ServerTokens Full

#
# 随意的添加包含服务器版本和虚拟主机名字一行信息到server-generated输出页中
# (内部错误文档,FTP目录列表,mod_status和mod_info输出等等,除了CGI错误
# 或自定义的错误文档以外)。
# 设为“EMail”将包含一个指向ServerAdmin的mailto:连接。
# 可以为如下值:On | Off | EMail
#
ServerSignature On

#
# Aliases:在这时添加你需要的别名,格式如下:
# Alias 别名 真实名
#
# 注意,如果你在别名的未尾包含了“/”,那么在URL中也需要包含“/”。
# 因此,“/icons”不是这个示例中的别名。
# 如果别名中以“/”结尾,那么真实名也必须以“/”结尾,
# 如果别名中省略了结尾的“/”,那么真实名也必须省略。
#
# 我们使用别名“/icons/”来表示FancyIndexed目录列表,如果你不使用、
# FancyIndexing,你可以注释掉它。
#
# Alias /icons/ "/usr/local/apache2/icons/"

# <Directory "/usr/local/apache2/icons">
# Options Indexes MultiViews
# AllowOverride None
# Order allow,deny
## Allow from all
# </Directory>

#
# 这将改变ServerRoot/manual。这个别名提供了手册页所在的位置,
# 即使你改变了你的DocumentRoot。如果你对有无手册页并不在意的话,
# 你可以注释掉它。
#
Alias /manual "/usr/loacl/apache2/manual"

<Directory "/usr/local/apache2/manual">
Options Indexes FollowSymLinks MultiViews IncludesNoExec
AddOutputFilter Includes html
Order allow,deny
Allow from all
</Directory>

#
# ScriptAlias:指定包含服务脚本的目录。
# ScriptAliases 本质上与Aliases一样,除了这里的文档在请求时做为程序处理处理以外。
# 尾部的“/”规则与Alias一样
#
ScriptAlias /cgi-bin/ "/usr/loacl/apache2/cgi-bin/"

# 这里是添加php 4支持的指令
AddType application/x-httpd-php .php
LoadModule php4_module modules/libphp4.so

<IfModule mod_cgid.c>
#
# 添加mod_cgid.c设置,mod_cgid提供使用cgid进行通讯的UNIX套接字的
# 脚本接口路径。
#
# Scriptsock logs/cgisock
</IfModule>

#
# 将"/usr/local/apache2/cgi-bin"改为你的ScriptAliased指定的CGI目录,
# 如果你配置了的话。
#
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

#
# Redirect允许你告诉客户端使用存在于服务器名字空间中的文档,
# 而不是现在的,这帮助客户定位那些改变了位置的文档。
# 例如:
# Redirect permanent /foo http://www.example.com/bar

#
# 控制server-generated目录列表显示的指令
#

#
# IndexOptions:控制server-generated目录列表显示特征。
#
IndexOptions FancyIndexing VersionSort

#
# AddIcon* 指令告诉服务器不同扩展名的图象文件如何显示,
# 只适用于FancyIndexed指令
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon 为那些没有显式定义图标的文件提供处理
#
DefaultIcon /icons/unknown.gif

#
# AddDescription允许你在server-generated索引后放置一个简短的说明。
# 只对FancyIndexed指令有效。
# 格式:AddDescription "说明" 文件名
#
# AddDescription "GZIP compressed document" .gz
# AddDescription "tar archive" .tar
# AddDescription "GZIP compressed tar archive" .tgz

#
# ReadmeName指定服务器默认查找的README文件的名字,并添加到目录列表中
#
# HeaderName指定目录列表前缀文件的文件名
ReadmeName README.html
HeaderName HEADER.html

#
# IndexIgnore指定目录索引忽略并且不包含在列表中的文件名集合,
# 支持shell类型的通配符。
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

#
# AddEncoding允许你在信息传送中使用(Mosaic/X 2.1+)解压缩信息,
# 注意:不是所有的浏览器都支持这个选项。
# 尽管名字相似,但是下列的指令与上面的FancyIndexing定制指令不同。
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

#
# DefaultLanguage和AddLanguage允许你指定文档的语言。
# 这使你可以让用户用容易理解的语言浏览文档。
#
# 指定默认的语言,这意味着所有没有指定语言的包都将使用该语言。
# 多数情况下,你也许并不想设置它,除非你确信这样做是正确的。
# 通常,不使用确定的语言比使用错误的语言要好。
#
# DefaultLanguage nl
#
# 注意1:作为语言关键字的词缀毫无疑问是不能一样的--采用波兰
# 文的文档(网络标准语言代码是pl)将希望使用“AddLanguage pl .po”
# 来避免与perl脚本的一般词缀产生二义性。
#
# 注意2: 下面的例子举例说明在一些范例中语言的二字符缩写与它的国家
# 的二字符缩写不相同,例如 “Danmark/dk” 和 “Danmark/da” 的比较.
#
# 注意3: 在 “ltz” 的情况下我们使用三字符词缀,违犯了 RFC的规定,
# 运行中将修复它并使用RFC1766标准取得参考数据。
#
# Danish (da) - Dutch (nl) - English (en) - Estonian (et)
# French (fr) - German (de) - Greek-Modern (el)
# Italian (it) - Norwegian (no) - Norwegian Nynorsk (nn) - Korean (ko)
# Portugese (pt) - Luxembourgeois* (ltz)
# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
# Russian (ru) - Croatian (hr)
#
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage he .he
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage ko .ko
AddLanguage pt .pt
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw
AddLanguage hr .hr

# LanguagePriority允许你在会话过程中优先使用一些语言。
#
# 以优先次序递减的方式列出它们。我们或多或少地采用按字母排列顺序的方式
# 排列它们。也许你想要改变这个顺序。
LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw

#
# ForceLanguagePriority 允许你为MULTIPLE CHOICES(Prefer)[在通讯的情况下]
# 或NOT ACCEPTABLE(Fallback)[没有可接受的语言匹配的情况]提供一个结果页。
#
ForceLanguagePriority Prefer Fallback

#
# 为发送出的所有页指定默认的字符集,这总是一个好主意,并且为你的
# web站点的国际化打开了大门,这不正是你曾经想要的吗。同样地,指定
# 默认字符集有一些小的损害,如一个使用iso-8859-1(latin1)标准命令
# 的页面,除非以别的方式指定例如你仅仅以显式方式声明它。
# 也有一些与那些总是鼓励你使用默认字符集的javascropt和URL语法有关
# 的浏览器安全原因。
#
#AddDefaultCharset ISO-8859-1
AddDefaultCharse GB2312

#
# 一般以文件扩展名的方式使用字符集。也许你想要避免与语言扩展发生
# 碰撞,除非你在每次改变后都做了很好的测试。
# 参见http://www.iana.org/assignments/character-sets以取得字符集
# 的名字列表和它们各自的RFCs。
#
AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset ISO-8859-3 .iso8859-3 .latin3
AddCharset ISO-8859-4 .iso8859-4 .latin4
AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5 .Big5 .big5
# 对于俄语,使用了多个字符集(如何使用主要依靠客户端):
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8


# 下面的字符集没有映射到一个特定的标准(iso)上,但是它们在浏览器
# 中被广泛的支持。注意那些大写字母。
# (它不应该,但是它是为兼容一些浏览器而做)
#
# 参见http://www.iana.org/assianments/character-sets以取得
# 它们的列表。但是浏览器支持较少。
#
AddCharset GB2312 .gb2312 .gb
AddCharset utf-7 .utf7
AddCharset utf-8 .utf8
AddCharset big5 .big5 .b5
AddCharset EUC-TW .euc-tw
AddCharset EUC-JP .euc-jp
AddCharset EUC-KR .euc-kr
AddCharset shift_jis .sjis

#
# AddType允许你为指定的文件类型添加或覆盖mime.types文件中配置的MIME
#
AddType application/x-tar .tgz
AddType image/x-icon .ico

#
# AddHandler允许你映射确定的文件扩展名到“handlers”:
# 与文件类型无关的行为。这既能编译到服务器中也可以添加到Action指令
# 中(看下面)。
# 为了在ScriptAliased指令指定的以外使用CGI脚本:
#(要使它可用,你还需要在Options中添加“ExecCGI”。
#
# AddHandler cgi-script .cgi

#
# 对于那些包含他们自己的HTTP头的文件
#
# AddHandler send-as-is asis

#
# 对于server-parsed imagemap文件:
#
# AddHandler imap-file map

#
# agemap 文件:
#
#AddHandler imap- 文件映像

#
# 对于类型映像:(转移资源)
#(这是默认的设定以允许Apache的“It Worked”页能多种语言分发)。
#
AddHandler type-map var

#
# 过滤器允许你在将它发送到客户端前进行处理。
#
# 为了在服务器端分析包含(SSI)的.shtml文档:
# (要执行这个指令,你还需要在Options指令中添加“Includes”。)
#
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml

#
# Action让你定义当调用匹配的媒体文件时将要执行的脚本。这将减少
# 那些经常使用的CGI脚本的URL路径名的重复输入。
# 格式:Action media/type /cgi-script/location
# 格式:Action handler-name /cgi-script/location
#

#
# 可配置的错误应答有三种风格:
# 1)plain text 2)local redirects 3) external redirects
#
# 一些示例:
# ErrorDocument 500 "The server made a boo boo."
# ErrorDocument 404 /missing.html
# ErrorDocument 404 "/cgi-bin/missing_handler.pl"
# ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# 综合应用这些指令,我们可以创建一个国际化的出错应答。
#
# 我们使用Alias来重定向任意/error/HTTP_<error>.html.var应答到
# 我们的多语言错误消息集合。使用正确的文本替代它。
#
# 通过加入下面的行,你就能够改变这些消息的显示,而不必改变
# HTTP_<error>.html.var文件。
#
# Alias /error/include/ "/your/include/path/"
#
# 以将/usr/local/apache2/error/include/下的文件拷贝到/your/inclue/path/下
# 开始,你可以创建你自己的文件集合,甚至是其于每个虚拟主机的。
# 不管你的ServerSignature如何设置,默认的包含文件将显示你的
# Aapche版本号和你的ServerAdmin邮件地址
#
# 国际化的错误文档需要mod_alias,mod_include和mod_negotiation三个
# 模块。要激活它们,取消下面30行的注释符号

# Alias /error/ "/usr/local/apache2/error/"
#
# <Directory "/usr/local/apache2/error">
# AllowOverride None
# Options IncludesNoExec
# AddOutputFilter Includes html
# AddHandler type-map var
# Order allow,deny
# Allow from all
# LanguagePriority en de es fr it nl sv
# ForceLanguagePriority Prefer Fallback
# </Directory>
#
# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error.php
# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
# ErrorDocument 410 /error/HTTP_GONE.html.var
# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
# ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

#
# 下面的命令更改标准的HTTP应答行为以处理己知的浏览器问题。
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

#
# 下面命令关闭对那些没有尾部“/”的目录的非GET请求的重定向,
# 这些命令修复了微软的采用DAV方法不能正确处理重定向的WEB文件夹的问题。
# Apple下的DAV文件系统和Gnome下的VFS对DAV的支持也是采用这样的方法
# 进行处理的。
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully

#
# 允许你使用URL:http://servername/server-status来通过mod_status生
# 成并报告服务器状态信息。改变.example.com为你自己的域名。
#
# <Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Location>

#
# 允许使用URL:http://servername/server-info来远程报告服务器配置信息
# (需要mod_info.c支持)。改变“.example.com”为你自己的域名。
#
# <Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Location>

#
# 代理服务器命令,去掉下面的行使代理服务可用。
#
# <IfModule mod_proxy.c>
# ProxyRequests On
# <Proxy *>
# Order deny,allow
# Deny from all
# Allow from .example.com
# </Proxy>

#
# 安装或关闭HTTP/1.1“通道”头处理。
# (“Full”添加服务器版本信息,“Block”移掉所有输出“通道”头信息。
# 可以设为下面各选项之一:Off | On | Full | Block
#
# ProxyVia On

# 最好为代理服务安装高速缓冲,去掉下面几行的注释符号:
# (没有CacheRoot则不缓冲)
#
# CacheRoot "/usr/local/apache2/proxy"
# CacheSize 5
# CacheGcInterval 4
# CacheMaxExpire 24
# CacheLastModifiedFactor 01
# CacheDefaultExpire 1
# NoCache a-domain.com another-domain.edu joes.garage-sale.com

# </IfModule>
# 代理命令结束。

#
# 附加的特定模块配置。
#
<IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>

## 第三区:虚拟主机
#
# VirtualHost:你可以通过设置虚拟主机容器以实现在你的主机上保有多个
# 域名/主机名。大多数配置信息只使用基于名字的虚拟主机,因此服务器
# 不必担心IP地址的问题,下面的命令以*号代替虚拟主机名。
#
# 在你试着配置你的虚拟主机以前,请参见
# http://httpd.apache.org/docs-2.0/vhosts/>以取得更多的信息。
#
# 你可以使用命令行选项“-S”来检验你的虚拟主机配置。

#
# 使用基于名字的虚拟主机。
#
# NameVirtualHost *

#
# 虚拟主机示例:
# 几乎所有的Apache命令都可以在虚拟主机容器中使用。
# 第一个虚拟主机区是用于向服务名未知的请求进行应答的配置。
#
# <VirtualHost *>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log commom
# </virtualHost>


新年祝福

札记 — 作者 am @ 06:38
1、贺新春,庆佳节,恭喜发财!过年好,万事顺,事事如意!财旺福旺运道旺,三鼠开泰迎旺年!
2、祝你山鼠绵鼠吃不完,洋国到处游,洋钱一桶桶...总之,鼠福不浅,鼠鼠顺手!!!
3、我把祝福和希望,悄悄地放在将融的雪被下,让它们,沿着春天的秧苗生长,送给你满年的丰硕与芬芳!新年快乐!
4、祝您新的一年身体健康!工作顺利!升官、发财,鼠鼠得意!-
5、鼠年祝愿您:工作舒心,薪水合心,被窝暖心,朋友知心,爱人同心,一切顺心,永远开心,事事称心!
6、鼠年我的的愿望:水泥马路长青草,火锅一点底就掉,皮衣店面都关门,全世界人都属鼠。
7、祝你鼠年喜气洋洋,满面阳光灿烂,爱情扬眉吐气,事业洋洋得意,晦气扬长而去,万事阳关大道!
8、天增岁月人增寿,春满乾坤福满门。三鼠开泰送吉祥,五福临门财源茂。恭祝新春快乐,幸福安康!!
9、短信贺岁,岁岁平安,安居乐业,业和邦兴,兴旺发达,大吉大利,力争上游,游刃有余,青春永驻,祝你快乐!
10、在这美丽的冬日暖鼠里,我看着得意鼠鼠的你,一副耀武鼠威的样子,我真想对你说:别装了,我的小鼠羔,我知道你很爱我。
11、祝:新年进步!三鼠开泰!心想事成!步步高升!
12、新春之庆,人人之喜。齐喜庆过肥年。祝您鼠年好事连连,笑口常开。-
13、祝你鼠年:大名鼎鼎,大吉大利,大红大紫,大显身手,大炮而红,大鸣惊人,大马当先!
14、黑马牵出鼠,鼠过皆吉祥。好运交华盖,行走在康庄。财进江入海,官升佛跳墙。大喜须清醒,襄阳不洛阳。
15、鼠年到,鼠年到,有成绩,别骄傲,失败过,别死掉,齐努力,开大炮,好运气,天上掉,同分享,大家笑!
16、马尾巴的功能,是金鼠开泰的惊喜.老朋友的祝福,是真情无期的永续.祝福的话被千万人说过,我便有幸省过.
17、鼠年春节到,短信来问好;愿你白天顺,夜晚睡好觉;天上掉黄金,打着你的脚;要问我是谁,请看手机号。
18、祝金鼠开泰!喜气鼠鼠!鼠蹄奋进!得意鼠鼠!
19、恭祝鼠年万事胜意,财源广进,恭喜发财!
20、新年快乐,三鼠开泰,洋洋得意,好事连连,一帆风顺,十全十美,发财,发财,发洋财。

2008年春节祝语选

札记 — 作者 am @ 06:31
2008年春节祝语选
     鼠年赠你一棵愿望树,结满开心果,幸运梅,富贵枣,温馨李,幸福桃、美满梨,兴旺菊,快乐糖,吉祥花! 
   
  春节祝你乐开花:美丽胜鲜花,浪漫如樱花,吉祥似雪花,运气逢桃花,富贵赛牡丹花,打麻将杠开花! 
   
  新年祝你开门红,红扑扑的恋颊迎来红火火的爱情,红彤彤的节日暖着你红鲜鲜的心灵,红光满面,红运高照。 
   
  鼠年祝你事业如日中天,恋人亲密无间,薪水上万成千,快乐无际无边,烦恼渺如云烟,逍遥胜似神仙! 
   
  新1年,好事接2连3,心情4季如春,生活5颜6色,事业兴旺8达,烦恼9宵云外,10心10意祝福你! 
   
  新春好,好事全来了!朋友微微笑,喜气围你绕!欢庆节日里,生活美满又如意!喜气!喜气!一生平安如意! 
   
  盼你新一年心情日新月异,快乐如糖似蜜,朋友重情重义,爱人不离不弃,工作频传佳绩,万事称心如意! 
   
  这一刻!有我最深的思念,让云儿捎上我的祝福,点缀你甜蜜的梦,愿你拥有一个幸福快乐的鼠年!! 
   
  新的一年,心的希望,新的开始,心的收获,新的起点,心的快乐。愿幸福财富永伴你左右,新年快乐! 
   
  祝愿你致富踏上万宝路,事业登上红塔山,情人赛过阿诗玛,财源遍布大中华……新年进步 
   
  祝福是份真心意,不是千言万语的表白。一首心曲,愿你岁岁平安,事事如意! 
   
  祝新年里财源滚滚艳福多多妻妾成群儿孙满堂昼闻娇嘘浪喘夜沐媚雨慵云东摸西吻左拥右抱羡煞韦小宝妒坏西门庆 
   
  新年又来到,向你问个好,办事处处顺,生活步步高,好运天天交,越长越俊俏,家里出黄金,墙上长钞票 
   
  今年新年不送礼,发条短信传给你,健康快乐长伴你,幸福美满粘着你,还有我要告诉你,财神爷已盯上你 
   
  祝你新年里,天空一片晴朗,快乐心中徜徉,自由随风飘荡,身体力行健康,奋劲儿热情高涨,顺利成就梦想! 
   
  今天快乐!明天快乐!今年快乐!明年快乐!天天快乐!年年快乐!!!! 
   
  当您看见这信息时,幸运已降临到你头上,财神已进了您家门,荣华富贵已离您不远。祝福你:新年快乐! 
   
  贺新春,庆佳节,恭喜发财!过年好,万事顺,事事如意! 
   
  欢欢喜喜迎×年,万事如意平安年,扬眉吐气顺心年,事业成功辉煌年,合家欢乐幸福年,身体健康万万年!!! 
    !
  聚喜玛拉雅之阳光,拢天涯海角之清风,拮冈底斯山之祝福,吸比尔盖茨之财气,作为礼物送给你,祝你新年快乐!

Linux商业电影动画制作软件列表

札记 — 作者 am @ 14:14
1)系统
 
  DaVinci Revival,著名的达芬奇电影校色系统。
 
  Baselight,电影校色系统,使用数字投影技术,该系统由于独创的色彩显示技术而被广泛用于好莱坞。
 
  Flint/Smoke/Flame,Autodesk已经开始将他的特效系统移植到Linux上。
 
  SpeedGrade,校色系统。
 
  2)电影编辑
 
  Conform,英国公司开发的一个电影剪辑和校色系统。
 
  Piranha,迪斯尼和Pixar在使用的编辑软件。
 
  Mainactor,DV编辑。
 
  3)三维动画
 
  Houdini,最先移植到Linux的三维动画软件,带强大的合成模块。
 
  Maya,常用的三维动画软件。
 
  RenderMan,渲染器。
 
  Mental Ray,渲染器。
 
  SoftImage XSI,由于开发公司有微软的股份,必须从Windows服务器获得许可。
 
  Massive,因《指环王》而知名的集群动画软件。
 
  Realflow,流体解算软件。
 
  4)特效软件
 
  NUKE,D2的合成软件。
 
  Shake,Apple的合成软件。
 
  Rayz,Silicon Grail的合成软件,在Shake前已被Apple收购。
 
  5)镜头匹配和稳定
 
  3dequalizer,镜头运动解算软件。
 
  Mokey,稳定和动态抠像软件。
 
  Boujou,运动匹配软件。
 
  SteadyMove,镜头稳定软件。
 
  The Pixel Farm Tracker,镜头运动匹配。
 
  6)RenderFarm管理
 
  Platform LSF,从SGI移植的渲染管理软件。
 
  Enfuzion,交叉平台的渲染管理软件。
 
  Rush,渲染管理软件。
 
  Qubw:渲染管理软件。
 
  7)卡通
 
  Toonboom USAnimation,世界著名的商业二维卡通软件。
 
  Solo,二维卡通软件。
 
  Moho,Flash矢量动画软件。

Linux系统下硬盘挂载详细说明

札记 — 作者 am @ 14:11
情况一:知道windows文件系统格式,和windows个盘对应/dev/下的sda* 文件时,只需要添加
 
  /dev/sda* /media/“新建的文件夹名” “文件系统格式” defaults,utf8,umask=000 0 0
 
  情况二:在不知道windows文件系统格式,不知道windows各盘对应的硬盘文件sda*时:
 
  1.首先通过命令su进入超级用户权限
 
  2.执行命令ls /dev/sda*
 
  这时会列出硬盘文件,有的5、6个,有的更多,一般在10个以下。设硬盘文件数量为Numble_of_sda
 
  3.依次执行下面命令,创建文件夹,并手动挂载硬盘。
 
  
			mkdir media/sda1mount /dev/sda1 /media/sda1mkdir media/sda2mount /dev/sda2 /media/sda2……….mkdir media/sda9mount /dev/sda1 /media/sda9(如果Numble_of_sda=9)
			

 
  4.然后执行df -T
 
  在文件系统列表中查看已手动挂载的硬盘
 
  
			文件系统 1K-块 已用 可用 已用% 挂载点/dev/sda8 ext3 26004224 3262624 21420660 14% /varrun tmpfs 225432 88 225344 1% /var/runvarlock tmpfs 225432 0 225432 0% /var/lockprocbususb usbfs 10240 96 10144 1% /proc/bus/usbudev tmpfs 10240 96 10144 1% /devdevshm tmpfs 225432 0 225432 0% /dev/shmlrm tmpfs 225432 17580 207852 8% /lib/modules/2.6.17-10-generic/volatile/dev/sda1 vfat 10231392 8134888 2096504 80% /media/sda1/dev/sda5 vfat 20462832 17126864 3335968 84% /media/sda5/dev/sda6 vfat 20462832 13325616 7137216 66% /media/sda6
			


  5. 从上面列表下边可以看到sda1 sda5 sda6可以挂载,那么我们只需要将。
 
  

			/dev/sda1 /media/sda1 vfat defaults,utf8,umask=000 0 0/dev/sda5 /media/sda5 vfat defaults,utf8,umask=000 0 0/dev/sda6 /media/sda6 vfat defaults,utf8,umask=000 0 0
			

 
  添加到/etc/fstab这个文件的末尾,就可以在每次启动系统时,自动挂载文件系统了。注意 vfat 是文件系统的格式,要和 df -T列出的列表中的属性值一样,有可能是fat32等格式。然后将/media/下没有挂载文件系统的文件夹如sda2 sda3 sda4 sda7 sda8删除。
 
  这里只是根据我机子的文件系统,给出了需要添加的内容,具体操作过程中,要参照df -T列表内容。


Linux查看文件夹大小的命令

札记 — 作者 am @ 14:09
查看linux文件目录的大小和文件夹包含的文件数

    统计总数大小

    du -sh xmldb/

    du -sm * | sort -n //统计当前目录大小 并安大小 排序

    du -sk * | sort -n

    du -sk * | grep guojf //看一个人的大小

    du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字

    查看此文件夹有多少文件 /*/*/* 有多少文件

    du xmldb/

    du xmldb/*/*/* |wc -l

    40752

    解释:

    wc [-lmw]

    参数说明:

    -l :多少行

    -m:多少字符

    -w:多少字


Apache初级URL重写指南

札记 — 作者 am @ 22:54

 

Apache初级URL重写指南

Apache模块 mod_rewrite

说明

一个基于一定规则的实时重写URL请求的引擎

状态

扩展(E)

模块名

rewrite_module

源文件

mod_rewrite.c

兼容性

仅在 Apache 1.3 及以后的版本中可用

概述

此模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。

此模块可以操作URL的所有部分(包括路径信息部分),在服务器级的(httpd.conf)和目录级的(.htaccess)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。

但是,所有这些功能和灵活性带来一个问题,那就是复杂性,因此,不要指望一天之内就能看懂整个模块。

 

 

注意:根据你的服务器配置,有可能必须对这里的例子作些小修改,比如,在额外启用mod_alias和mod_userdir的情况下要增加[PT]标志,或者为了适应目录级(.htaccess)的配置而将针对服务器级的规则集进行重写。对一个特定的规则集应该先透彻理解然后再考虑应用,这样才能避免出现问题。

 

 

规范化URL

描述:

在有些web服务器上,一个资源会拥有多个URL。在实际应用和发布中应该使用的是规范的URL,其他的则是简写或者只在内部使用。无论用户在请求中使用什么形式的URL,最终看见的都应该是规范的URL。

解决方案:

对所有不规范的URL执行一个外部HTTP重定向,以改变它在浏览器地址栏中的显示及其后继请求。下例中的规则集用规范的/u/user替换/~user,并修正了/u/user所遗漏的后缀斜杠。 RewriteRule   ^/~([^/]+)/?(.*)    /u/$1/$2  [R]
RewriteRule   ^/([uge])/([^/]+)$  /$1/$2/   [R]

 

 

 

 

 

规范化主机名

描述:

这个规则的目的是强制使用特定的主机名以代替其他名字。比如,你想强制使用www.example.com代替example.com,就可以在以下方案的基础上进行修改:

解决方案:

对运行在非80端口的站点

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]

 

对运行在80端口的站点

RewriteCond %{HTTP_HOST}   !^fully.qualified.domain.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://fully.qualified.domain.name/$1 [L,R]

 

 

 

 

 

移动过的DocumentRoot

描述:

通常,web服务器的DocumentRoot直接对应于URL"/",但是它常常不是处于最高的一级。比如,你希望访问者在进入网站时首先进入/about/目录。可以使用下面给出的规则集。

解决方案:

只需将"/"重定向到"/about/"即可: RewriteEngine on
RewriteRule   ^/$  /about/  [R]

 

也可以使用RedirectMatch指令解决问题:

RedirectMatch ^/$ http://example.com/e/www/

 

 

 

 

 

结尾斜杠问题

描述:

每个网管对引用目录的结尾斜杠问题都有一本苦经,如果遗漏了,服务器会产生一个错误,因为如果请求是"/~quux/foo"而不是"/~quux/foo/",服务器就会去找一个叫foo的文件,而它是一个目录,所以就报错了。通常,可以使用这个FAQ entry里面提到的方法解决问题。但是有时候需要使用重写规则来解决问题,比如,在应用了许多复杂的重写规则之后。

解决方案:

解决这个微妙问题的方案是让服务器自动添加后缀斜杠。为了达到目的,必须使用一个外部重定向,以使浏览器能够正确地处理后继的请求(比如对图片的请求)。如果仅仅执行一个内部重写,可能仅仅对目录页面有效,而对含有相对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]

 

但是这样一来会增加处理上的开销。

 

 

 

 

将用户主目录移动到不同web服务器

描述:

通常,许多网管在建立一个新的web服务器时,都会有这样的要求:重定向一个web服务器上的所有用户主目录到另一个web服务器。

解决方案:

很简单,在老的web服务器上重定向所有的"/~user/anypath"到"http://newserver/~user/anypath": RewriteEngine on
RewriteRule   ^/~(.+)  http://newserver/~$1  [R,L]

 

 

 

 

 

在多个目录中搜索页面

描述:

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

解决方案:

编制一个明确的规则集以搜索目录中的文件: RewriteEngine on

# 首先尝试在 dir1 中寻找,找到即停
RewriteCond         /your/docroot/dir1/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/dir1/$1  [L]

# 然后尝试在 dir2 中寻找,找到即停
RewriteCond         /your/docroot/dir2/%{REQUEST_FILENAME}  -f
RewriteRule  ^(.+)  /your/docroot/dir2/$1  [L]

# 再找不到就继续寻找其他的 Alias 或 ScriptAlias 目录
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 A记录的方法实现。

解决方案:

仅能对包含"Host: "头的HTTP/1.1请求实现。可以使用以下规则集内部地将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到另一个web服务器www.somewhere.com,有时这种做法也会用在虚拟主机的配置段中。

解决方案:

只须一个重写条件: RewriteEngine on
RewriteCond   %{REMOTE_HOST}  !^.+.ourdomain.com$
RewriteRule   ^(/~.+)         http://www.somewhere.com/$1 [R,L]

 

 

 

 

 

重定向锚

描述:

默认情况下,重定向到一个HTML锚是不可行的,因为'#'会被转义为'%23'。This, in turn, breaks the redirection.

解决方案:

在RewriteRule指令中使用[NE]标志(不转义)。

 

 

 

依赖于时间的重写

描述:

在页面内容需要按时间的不同而变化的场合,比如重定向特定页面等,许多网管仍然采用CGI脚本的方法,如何用mod_rewrite来实现呢?

解决方案:

有许多名为TIME_xxx的变量可以用在重写条件中,联合使用词典模式的"<STRING", "=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

 

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

 

 

 

 

对YYYY转变为XXXX的向前兼容

描述:

在转变了大批document.YYYY文件为document.XXXX后(比如.html→.phtml),如何保持URL的向前兼容(仍然虚拟地存在)?

解决方案:

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

# 将document.html重写为document.phtml的向后兼容的规则集
# 当且仅当document.phtml存在且document.html不存在的时候
RewriteEngine on
RewriteBase   /~quux/
# 剪切并记住basename
RewriteRule   ^(.*).html$              $1      [C,E=WasHTML:yes]
# 如果存在的话就重写为document.phtml
RewriteCond   %{REQUEST_FILENAME}.phtml -f
RewriteRule   ^(.*)$ $1.phtml                   [S=1]
# 否则返回先前的basename
RewriteCond   %{ENV:WasHTML}            ^yes$
RewriteRule   ^(.*)$ $1.html

 

 

 

 

 

内容处理

从旧到新(内部)

描述:

假定已经把文件foo.html改名为bar.html,需要对老的URL向后兼容,即让用户仍然可以使用老的URL,而感觉不到文件被改名了。

解决方案:

通过以下规则内部地将老的URL重写为新的: RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo.html$  bar.html

 

 

 

从旧到新(外部)

描述:

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

解决方案:

作一个HTTP的强制重定向以改变浏览器和用户界面上的显示: RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo.html$  bar.html  [R]

 

 

 

从静态到动态

描述:

如何无缝转换静态页面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]

 

 

 

 

 

访问控制

阻止Robot

描述:

如何阻止一个完全匿名的Robot取得特定网络区域的页面?/robots.txt文件可以包含若干"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/有一些内嵌GIF图片的页面,这些图片很好,所以就有人盗链到他们自己的页面中了。由于这样徒然增加了我们服务器的流量,因此,我们不愿意这种事情发生。

解决方案:

虽然,我们不能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]

 

 

 

拒绝代理

描述:

如何拒绝某个主机或者来自特定主机的用户使用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_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

# 禁止使用会导致Apache陷入死循环的I/O缓冲
$| = 1;

# 从stdin读取URL(每行一个),并在stdout输出替换URL
while (<>) {
    s|^foo/|bar/|;
    print $_;
}

 

这是只是一个简单的示例,只是把所有的/~quux/foo/...重写为/~quux/bar/...而已。但事实上,可以把它修改成任何你想要的输出。但是要注意,虽然一般用户都可以使用,可是只有系统管理员才可以定义这样的映射。


PHP 异步调用 后台调用 持续执行 断开连接/浏览器

札记 — 作者 am @ 22:53

标题很怪,因为我也不知道怎样用一句简短的话来概括下面这部分内容。只是希望各位 PHP 的开发者们更容易通过搜索引擎搜到这篇介绍。

这回的核心内容就是围绕 ignore_user_abort 这个函数展开的。

做 Web 开发的人都知道,浏览器和服务器之间是通过 HTTP 协议进行连接通讯的。这是一种基于请求和响应模型的协议。浏览器通过 URL 向某台服务器发起请求(Request),Web 服务器接收到请求,执行一段程序,然后做出响应(Response),也就是一段字符串,这个字符串符合 HTTP 协议的格式,有 HEAD 和 BODY 两部分。

这其中有一个问题,Web 服务器执行一段程序,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。这个时候,服务器会接收到连 接状态改变的通知,因为 HTTP 是最上层的协议,下面还有一层 TCP 协议,TCP 会知道连接中断。连接一断,服务端的程序会立即停止执行。

现在说到问题的关键了,服务端的程序立即停止执行,如果这个程序只是读取信息的还好说,停了就不读了呗。万一是一个写入的程序呢?比如,用户提交一 段文本,也许服务端的设计比较复杂,需要同时更新好几个表,但由于某些原因,例如其中一个表被其他进程锁定,那么这个程序就会一直等待,这个时候用户要是 关闭浏览器,那程序就不等了,直接退出了。结果就是这条信息保存不完整。

举个具体的例子,用户提交的文本需要写到 A、B、C、D 四个表里,写入 A、B 两个表可能 0.1 毫秒就完成了,但 C 表被另一个进程锁定,那当前进程就得一直等,这时用户关闭浏览器,当前进程退出,那么,就会造成一种状况,A、B 表里有新的内容,而 C、D 表里没有这条内容,产生了严重的数据一致性的问题!

虽然,利用数据库的事务,可以使状态回滚,但结果就是用户的本次提交无效。

我希望的是,只要用户提交了,就要成功保存,也许遇到意外情况导致执行时间过长,但用户关闭浏览器也没关系。

于是,我找到了 ignore_user_abort 这个函数。

当调用 ignore_user_abort(1) 时, 就设定了忽略用户退出这个标志位,也就是不管怎样,也要把程序执行到底,除非在程序中调用了 exit。

其实,还有另一个函数,register_shutdown_function,它可以注册一个函数或方法,在程序退出的时候调用,有些类似于 javascript 里面的 onunload 和 onbeforeunload 事件。

我这里引用了 中文版PHP手册 的相关内容:

章 40. 连接处理
注意: 以下内容对 PHP 3.0.7 及更高版本适用。

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常)

1 - ABORTED(异常退出)

2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限(请参阅 set_time_limit() 函数)时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户 端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的“php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

PHP 的官方网站在线文档有英文原版说明,下面还有一些用户的反馈,也很有价值,这里是链接:


.Htaccess 防盗链 URL重写 ReWrite 目录访问权限

札记 — 作者 am @ 22:53

htaccess 可以做很多事!

一、防盗链

用 http 协议的 referer 字段,判断对文件请求是否来自相同的域名,如果是,可以正常访问,否则,跳转到其他 url。先来看一小段代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(.)+.leakon.com.* [NC]
RewriteRule .*.(jpg|gif|bmp)$ http://www.leakon.com [L,NC]

他的作用是,当请求以 jpg、gif 或 bmp 为扩展名的文件,但 referer 字段不能匹配 http://*.leakon.com* 这个表达式时,服务器返回 302 状态码,重定向到 http://www.leakon.com

这段代码用于图片站的图片防盗链是能够起到很大作用的,但不太适用于下载站。因为用户如果使用迅雷等专用软件下载文件,下载软件在发送请求的时候, 会自动把目标文件所在的域名和路径作为 referer 加到请求里一起发给服务器。除非你能保证用户浏览网站页面的路径和文件所处的下载路径有很大区别,并且精心设计过上面的判断条件,否则,还是找其他办法来 做到防盗链吧。

对使用 Windows 的 IIS 服务器的朋友, 如果你想给自己的网站加上防盗链功能,我向你推荐一款功能十分强大的防盗链软件:防盗链专家 ,这是我的一个好朋友开发的,现在已经稳定地运行在几万台 IIS 服务器上,而且很多下载站用的都是这套系统。

二、目录访问权限

有的时候,我们的程序需要读取一些配置文件,配置文件里可能包含一些重要的系统文件的路径,甚至是密码等信息。出于某些条件的限制,这些路径和文件又不能隐藏在 htdocs 目录的下面,都暴露给外网了。

怎样才能保护这些文件,避免被别人浏览到呢?

.htaccess 可以帮你做到。

这个功能使用起来非常简单,只需在你想保护的目录下面放置这个 .htaccess 文件,并添加一行代码即可:

deny all

这时所有对这个目录,以及这个目录的所有子目录的文件的请求都会被拒绝!


Rewrite实现页面静态化重写

札记 — 作者 am @ 22:52

1、解压,并放在C盘(其它地方也可),如我们举例的放置目录及文件结构:

C:rewrite
C:rewriteISAPI_Rewrite.dll
C:rewritehttpd.ini(具体正则式书写方法参考本文下部)

如果您的服务器设置过权限,要给C:rewrite目录以您要设置的网站以相应的权限,也可以直接设成Everyone可读取和动行的权限;

2、安装ISAPI_Rewrite,打开IIS,点击您的站点右键到属性窗口,图例如附件图例。

3、添加成功后,重启IIS,再回到这个ISAPI筛选页面看看这里是不是绿色的,绿色表示ISAPI_Rewrite组件已经工作了,红色表示有问题,一般是权限的问题导致;

安装说明:

1、在IIS的Isapi上添加这个筛选器,筛选器名称 re,可执行文件选择 Rewrite.dll ;
2、设置httpd.ini文件

RewriteRule /news/(d+).html /jsp/news.jsp?id=$1 [N,I]
表示将news.jsp?id=95 转换成news/95.html

以此类推,如果你有更多的参数,则增加相应的(d+),而后面的id=$1,则增加id=$2,等等。


目前较为普遍的动态网页包括asp,php,jsp,shtml,jhtml,cgi......甚至还有一些自己定义的,比如:aspx,do,index,hello等等。表现形式为:news.asp?id=95。建议读者通过re_write将其转换成news/95.html,以便于google对改网页的识别。

re_write是iis里的一个模块,你可以从本站下载,里面有相关安装说明。

当需要将news.jsp?id=95的映射成news/95.html时,只需设置httpd.ini文件:
RewriteRule /news/(d+).html /news.jsp?id=$1 [N,I]
这样就把 /news/95.html 这样的请求映射成了 /news.jsp?id=95

然后你在连接处这样写:<a href='/news/95.html'>95新闻</a>。
如果你的新闻是通过数据库循环读取出来的,那么写法是:
while(rs.next())
{
String id = (String)rs.getString('id');
out.print('<a hef='/news/''+id+'.html>');
out.print('95新闻');
out.print('</a>');
}

如果你在处理数据翻页,那么写法是:

More_<%=Page%>_<%=type%>.html (注:page是翻页页数,type是数据类型)
表现形式:More_1_95.html

如果翻下一页,则为:More_2_95.html,继续下一页的循环,则是:
More_3_95.html,以此类推。

不过你需要在httpd.ini文件中增加以下代码:
RewriteRule /More_(d+)_(d+).html /jsp/more.jsp?page=$1&type=$2 [N,I]

如果你的动态程序有多个参数需要传递,那么就增加多个(d+)即可,如下:

RewriteRule /More_(d+)_(d+)_(d+).html /jsp/more.jsp?page=$1&type=$2&type2=$3 [N,I]

翻页处理表现形式是:More_1_95.html


Apache 重写规则的常见应用 (Rewrite)

札记 — 作者 am @ 22:51

实例给用户一些使用重写规则的基本方法和线索。

二:为什么需要用重写规则?
一个网站,如果是长期需要放在internet上提供服务,必定会有不断地更新和维护,如临
时转移到其它服务器进行维护,重新组织目录结构,变换URL甚至改变到新的域名等等,
而为了让客户不会因此受到任何影响,最好的方法就是使用Apache Rewrite Rule(重写
规则)。

三: 重写规则的作用范围
1) 可以使用在Apache主配置文件httpd.conf中
2) 可以使用在httpd.conf里定义的虚拟主机配置中
3) 可以使用在基本目录的跨越配置文件.htaccess中

四:重写规则的应用条件
只有当用户的WEB请求最终被导向到某台WEB服务器的Apache后台,则这台WEB服务器接受
进来的请求,根据配置文件该请求是主配置还是虚拟主机,再根据用户在浏览器中请求的
URI来配对重写规则并且根据实际的请求路径配对.htaccess中的重写规则。最后把请求
的内容传回给用户,该响应可能有两种:

1) 对浏览器请求内容的外部重定向(Redirect)到另一个URL。
让浏览器再次以新的URI发出请求(R=301或者R=302,临时的或是永久的重定向)
如:一个网站有正规的URL和别名URL,对别名URL进行重定向到正规URL,或者网站改换
成了新的域名
则把旧的域名重定向到新的域名(Redirect)

2) 也可能是由Apache内部子请求代理产生新的内容送回给客户[P,L]
这是Apache内部根据重写后的URI内部通过代理模块请求内容并送回内容给客户,而客户
端浏览器并不知道,浏览器中的URI不会被重写。但实际内容被Apache根据重写规则后的URI得到。
如:在公司防火墙上运行的Apache启动这种代理重写规则,代理对内部网段上的WEB服务
器的请求。

五:重写规则怎样工作?
我们假定在编译Apache时已经把mod_rewrite编译成模块,确信你的httpd.conf中有
LoadModule rewrite_module libexec/mod_rewrite.so
并且在Addmodule中有
Addmodule mod_rewrite.c
则可以使用重写规则。
当外部请求来到Apache,Apache调用重写规则中的定义来重写由用户浏览器指定请求的
URI,最后被重写的URI如果是重定向,则送由浏览器作再一次请求;如果是代理则把重写
后的URI交给代理模块请求最终的内容(Content),最后把内容送回给浏览器。

六: 何时使用.htaccess中的重写规则定义?
假如你对你的的网站内容所在的服务器没有管理员权限,或者你的网站放在ISP的服务器
上托管等等条件下,你无法改写主配置文件,然而你可以对你的WEB站点内容所在的目录
有写权限,则你可以设置自己的.htaccess
文件达到同样的目的。但你需要确定主配置文件中对你的网站所在的目录定义了下面的内
容:

Options Indexes FollowSymLinks
AllowOverride all

否则你的.htaccess不会工作。

七: 应用举例
假定Apache被编译安装在主机192.168.1.56的/usr/local/apache/ 目录下面,我们编
译进了重写和代理模块。

1) 隐藏Apache下的某个目录,使得对该目录的任何请求都重定向到另一个文件。

a> httpd.conf的实现方法

我们放下面的部分到/usr/local/apache/conf/httpd.conf

options Indexes followsymlinks
allowoverride all
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]

注:rewriteengine on 为重写引擎开关,如果设为off,则任何重写规则定义将不被应
用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即
可,不必将下面一条条的重写规则注释掉。
rewritebase / 的作用是如果在下面的rewriterule定义中被重写后的部分(此处为文件
名index.html.en)前面没有/,则是相对目录,相对于这个rewritebase后面的定义也就
是/usr/local/apache/htdocs/index.html.en,否则,如果此处没有rewritebase /这
一项,则被重写成
http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en ,显然是
不正确的。

不过这里我们也可以不用rewritebase / , 而改为
rewriteengine on
rewriterule ^(.*)$ /index.html.en [R=301]
或者
rewriteengine on
rewriterule ^(.*)$ http://192.168.1.56/index.html.en [R=301]

b> .htaccess的实现方法

我们先放下面的部分到httpd.conf


options Indexes followsymlinks
allowoverride all


然后放下面的部分到/usr/local/apache/htdocs/manual/.htaccess中
rewriteengine on
rewritebase /
rewriterule ^(.*)$ index.html.en [R=301]

注:对文件.htaccess所作的任何改动不需要重启动Apache.

问:要是把这个manual目录重定向到用户jephe的自己的主目录呢?
用下面的.htaccess方案。
rewriteengine on
rewritebase /~jephe/
rewriterule ^(.*)$ $1 [R=301]

则对manual目录下任何文件的请求被重定向到~jephe目录下相同文件的请求。

2) 转换www.username.domain.com的对于username的主页请求为
www.domain.com/username

对于HTTP/1.1的请求包括一个Host: HTTP头,我们能用下面的规则集重写
http://www.username.domain.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

注:
rewritecond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,
rewritecond有各种变量
,请查阅相关文档。

3) 防火墙上的重写规则代理内部网段上服务器的请求。

NameVirtualhost 1.2.3.4


servername www.domain.com
rewriteengine on
proxyrequest on
rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L]


注:当外部浏览器请求www.domain.com时被解析到IP地址1.2.3.4 ,Apache 交出
mod_rewrite处理转换成
http://192.168.1.3/$1后再交由代理模块mod_proxy得到内容后传送回用户的浏览器。


4) 基本预先设定的转换MAP表进行重写 rewritemap

转换www.domain.com/{countrycode}/anypath 到Map表中规定的URI,上面是虚拟主机
中的定义

rewritelog /usr/local/apache/logs/rewrite.log
rewriteloglevel 9

rewriteengine on
proxyrequest on
rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map
rewriterule ^/([^/]+)+/(.*)$ http://%{REMOTE_HOST}::$1 [C]
rewriterule (.*)::([a-z]+)$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]

文件/usr/local/apache/conf/rewrite.map的内容如下:

sg http://a.b.c.d/
sh http://e.f.g.h/

注: 当用户请求http://www.domain.com/sg/anypath时被重写为
http://a.b.c.d/anypath .
当需要调试时请用rewritelog and rewriteloglevel 9联合,9为最大即得到最多的调试
信息
最小为1,最小的调试信息,默认为0,没有调试信息。
sitemap的语法是${sitemap: LookupKey | Defaultvalue} ,有些书上把$写成了%是错
误的。


Redhat as4下Mysql5+php5+apache2.2.4+GD2安装

美术高考 — 作者 am @ 22:50


apache 2.2.4 下载 http://httpd.apache.org
mysql 5.0.22 下载http://www.mysql.com
php 5.2.1 下载 http://www.php.net
gd 下载 http://www.libgd.org/Downloads(php图像处理需要的LIB)
zlib 下载 http://www.zlib.net/ (使用GD功能所需要的软件包)
libpng-config 下载 http://www.libpng.org/pub/png/libpng.html(使用GD功能所需要的软件包)
jpeg-6b 下载 ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz (使用GD功能所需要的软件包,支持jpeg图片)
freetype2下载 http://sourceforge.net/projects/freetype (使用GD功能所需要的软件包,FreeType2是一个简单的跨平台的字体绘制引擎)
fontconfig 下载http://www.fontconfig.org/release/ (使用GD功能所需要的软件包,fontconfig是字体库)
openssl 下载 http://www.openssl.org/source/ (apache的https协议需要的模块)
libxml2 下载 http://ftp.acc.umu.se/pub/GNOME/sources/libxml2
Libxslt 下载 http://ftp.acc.umu.se/pub/GNOME/sources/libxsl2
zend optimizer 下载 https://www.zend.com/free_download/optimizer

1. 安装OpenSSL
tar zxvf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./config --prefix=/usr/local/openssl
make
make install
修改(此步骤非常重要,至少对于现有的软件版本)
vi /etc/ld.so.conf 添加一行/usr/local/openssl/lib/
/sbin/ldconfig

2. 安装zlib (安装libpng和gd前需要先安装zlib)
tar zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr/local/zlib && make && make install

3.安装libpng
tar zxvf libpng-1.2.12.tar.gz
cd libpng-1.2.12
./configure --prefix=/usr/local/libpng2 && make;make install

4. 安装freetype
tar zxvf freetype-2.2.1.tar.gz
cd freetype-2.1.10
./configure --prefix=/usr/local/freetype2 &&make && make install

5. 安装jpeg
mkdir /usr/local/jpeg6
mkdir /usr/local/jpeg6/include
mkdir /usr/local/jpeg6/lib
mkdir /usr/local/jpeg6/bin
mkdir /usr/local/jpeg6/man/
mkdir /usr/local/jpeg6/man/man1/
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --prefix=/usr/local/jpeg6 --enable-shared --enable-static && make && make test && make install
vi /etc/ld.so.conf 加入一行:
/usr/local/jpeg6/lib
/sbin/ldconf

6. 解压fontconfig源代码
cd fontconfig-2.3.2
./configure --prefix=/usr/local/fontconfig --disable-docs --sysconfdir=/etc --mandir=/usr/share/man && make && make install

7. 安装gd
tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
CPPFLAGS="-I/usr/local/freetype2/include -I/usr/local/jpeg6/include -I/usr/local/libpng2/include -I/usr/local/fontconfig/include" ./configure --prefix=/usr/local/gd2/ --with-zlib=/usr/local/zlib/ --with-png=/usr/local/libpng2/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2/ --with-fontconfig=/usr/local/fontconfig 
configure的结果:
** Configuration summary for gd 2.0.34:

Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: yes
Support for Xpm library: yes
Support for pthreads: yes

make && make install

8. 安装libxml2(因php5.02要求libxml2的版本是 libxml2.5.10 or greater required.)
tar zxvf libxml2-2.6.27.tar.gz
cd libxml2-2.6.27
./configure --prefix=/usr/local/libxml2 && make && make install

9. 安装libxslt
tar zxvf libxslt-1.1.20.tar.gz
cd libxslt-1.1.20
./configure --prefix=/usr/local/libxslt --with-libxml-prefix=/usr/local/libxml2 && make && make install

二、安装Mysql
groupadd mysql
useradd -g mysql -c 'mysql account' -p mysql mysql
mkdir /usr/local/mysql
cd /usr/local/
chown -R mysql.mysql mysql #然后设置权限设定mysql用户能访问/usr/local/mysql,里面存的是mysql的所有文件
tar –xzvf mysql-5.0.22.tar.gz
cd mysql-5.0.22
mysql安装_编译、安装
为了防止使用旧的配置信息或目标文件,在重新运行configure前运行这些命令:
rm config.mk
make clean
configure针对Intel CPU的优化
CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-