如何用vb程序给word文档加页眉页脚

如何用vb程序给word文档加页眉页脚,上下两条横线,类似下面这样
_______________________________________word1

**
**
**
--------------------------------------------

 
第 1 楼    hot1kang1(许仙)
2006-4-18 18:07:04
得分:20   返回顶部
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.TypeParagraph
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

你可以在word里 录制宏,然后调用宏代码..

     Dim WordApp As Word.Application
     Dim WordDoc As Word.Document
     Dim i As Integer, j As Integer
     Dim NewResult As String '对应的字段名
     Dim StrContent As String '存储勾建的结构
      
     Set WordApp = CreateObject("Word.Application")
     Set WordDoc = WordApp.Documents.Open(strWordTempLatePath)

宏 里的ActiveWindow对象也就是 WordDoc

 
第 2 楼    GoldFox(金色狐狸)
2006-4-18 18:13:11
得分:10   返回顶部
打开WORD新建一文档,开始录制宏,然后新建页眉及页脚
然后编辑宏,选择刚才录制的宏,即可看见新建页眉及页脚的VB代码
 
第 3 楼    fice_chen(火冰)
2006-4-19 13:45:49
得分:20   返回顶部
Sub aaa()
Dim doc As Document
Set doc = ActiveDocument
Selection.End = 100
Selection.Start = Selection.End
doc.Footnotes.Add Range:=Selection.Range, Text:="adjaoijdfi"
MsgBox "OK!", vbInformation
End Sub
这是页脚的一个普通例子,不知有没有用啊?

Adodb的十个实例

本想学pear的,可是网上看到的几篇帖子对adodb的评价相当高,所以改学了这个。
ADODB的优点有这几个(网上说的,不是我说的):
1、速度比pear快一倍;
2、支持的数据库类型比pear多很多,甚至可以支持ACCESS;
3、无须安装,无须服务器支持(对新手来说,这点很重要吧)

Tutorial
Example 1: Select Statement
任务: 连接一个名为Northwind的Access数据库, 显示 每条记录 的前两个字段.

在这个实例里, 我们新建了一个ADOC连接(ADOConnection)对象, 并用它来连接一个数据库. 这个连接采用PConnect 方法, 这是一个持久 连接. 当我们要查询数据 库时, 我们可以随时调 用这个连接的Execute()函数. 它会返回一个ADORecordSet对象 which is actually a cursor that holds the current row in the array fields[]. 我们使用MoveNext()从一个记录转向下一个记录 .

NB: 有一 个非常实用的函数 SelectLimit在本例中没有用到, 它可以控制显示的记录数(如只显示前十条记录 ,可用作分页显示 ).

PHP代码:--------------------------------------------------------------------------------

include('adodb.inc.php'); #载入ADOdb
$conn = &ADONewConnection('access'); # 新建一个连接
$conn->PConnect('northwind'); # 连接到一个名为northwind的MS-Access数据库
$recordSet = &$conn->Execute('select * from products'); #从products数据表中搜索所有数据
if (!$recordSet)
print $conn->ErrorMsg(); //如果数据搜索发生错误显示错误信息
else
while (!$recordSet->EOF) {
print $recordSet->fields[0].' '.$recordSet->fields[1].'
';
$recordSet->MoveNext(); //指向下一个记录
} //列表显示数据

$recordSet->Close(); //可选
$conn->Close(); //可选
?>
--------------------------------------------------------------------------------

$recordSet在$recordSet->fields中返回当前数组, 对字段进行数字索引(从0开始). 我们用MoveNext() 函数移动到下一个记录 . 当数据库搜索到结尾时EOF property被 设置 为true. 如果Execute()发生错误 , recordset返回flase.

$recordSet->fields[]数组产生于PHP的数据库扩展。有些数据库扩展只能按数字索引而不能按字段名索引.如果坚持要使用字段名索引,则应采用SetFetchMode函数.无论采用哪种格式索引,recordset都可以由Execute()或SelectLimit()创建。

PHP代码:--------------------------------------------------------------------------------
$db->SetFetchMode(ADODB_FETCH_NUM);
$rs1 = $db->Execute('select * from table'); //采用数字索引
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$rs2 = $db->Execute('select * from table'); //采用字段名索引
print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1')
print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1')

--------------------------------------------------------------------------------

如果要获取记录号,你可以使用$recordSet->RecordCount()。如果没有当前记录则返回-1。

实例 2: Advanced Select with Field Objects
搜索表格,显示前两个字段. 如果第二个字段是时间或日期格式,则将其改为美国标准时间格式显示.

PHP代码:--------------------------------------------------------------------------------

include('adodb.inc.php'); ///载入adodb
$conn = &ADONewConnection('access'); //新建一个连接
$conn->PConnect('northwind'); //连接名为northwind的MS-Access数据库
$recordSet = &$conn->Execute('select CustomerID,OrderDate from orders'); //从Orders表中搜索CustomerID和OrderDate两个字段
if (!$recordSet)
print $conn->ErrorMsg(); //如果数据库搜索错误,显示错误信息
else
while (!$recordSet->EOF) {
$fld = $recordSet->FetchField(1); //把第二个字段赋值给$fld
$type = $recordSet->MetaType($fld->type); //取字段值的格式

if ( $type == 'D' || $type == 'T')
print $recordSet->fields[0].' '.
$recordSet->UserDate($recordSet->fields[1],'m/d/Y').'
'; //如果字段格式为日期或时间型,使其以美国标准格式输出
else
print $recordSet->fields[0].' '.$recordSet->fields[1].'
'; //否则以原样输出

$recordSet->MoveNext(); //指向下一个记录
}
$recordSet->Close(); //可选
$conn->Close(); //可选

?>
--------------------------------------------------------------------------------

在这个例子里, 我们用FetchField()函数检查了第二个字段的格式. 它返回了一个包含三个变量的对象

name: 字段名
type: 字段在其数据库中的真实格式
max_length:字段最大长度,部分数据库不会返回这个值,比如MYSQL,这种情况下max_length值等于-1.
我们使用MetaType()把字段的数据库格式转化为标准的字段格式

apache+tomcat+php 整合与虚拟主机的配置[实践总结篇]

一.整合apache+tomcat+php

1》下载需要的软件:
Apache : apache_2.2.6-win32-x86-no_ssl.msi http://httpd.apache.org/
Tomcat : apache-tomcat-6.0.14.exe http://tomcat.apache.org/
Php : php-5.2.5-Win32.zip http://www.php.net
Mysql : mysql-5.0.45-win32.zip http://www.mysql.org
JDK : jdk-5-windows-i586.exe http://java.sun.com
JK插件 : mod_jk-1.2.26-httpd-2.2.4.so http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.26/mod_jk-1.2.26-httpd-2.2.4
2》安装软件
<1>安装Apache
在安装的过程中将会出现叫你填服务器的地址
我是这样写的:
127.0.0.1 或者localhost 或者是真实的ip地址或域名
127.0.0.1
your@yahoo.com 也就是你的油箱
我的Apache的安装目录是:D:\Apache2.2
<2>安装JDK环境
我的JDK的安装目录是:d:\j2sdk
并增加JAVA_HOME和PATH变量
分别是:JAVA_HOME=d:\j2sdk
PATH=%JAVA_HOME%\bin
CLASSPATH=.;c:\j2k1.5.0\lib\tools.jar;D:\jdk1.5.0\lib\dt.jar #有的说不用添加的,我也没有试,反正我的添加上了,没有问题的

<3>安装Tomcat
Tomcat我采用的是默认安装
安装目录是:D:\tomcat
端口:8080

<4>安装Mysql数据库
安装密码是:admin
数据库编码是:gbk
安装的目录是:D:\tomcat

<5>安装php
解压php-5.2.4-Win32.zip到目录:D:\root\php

3》配置服务器,使能够提供jsp,php服务
<1>配置php
将php安装目录下的php.ini-dist文件改名为php.ini
修改办法:将扩展加入文件当中
并将:
extension=php_mbstring.dll
extension=php_dbase.dll
extension=php_gd2.dll
extension=php_mysql.dll
这些扩展前面的分号去掉
我做的修改是:
extension_dir = "d:/root/php/ext/"
extension=php_mbstring.dll
extension=php_dbase.dll
extension=php_gd2.dll
extension=php_mysql.dll

<2>配置Apache
将JK插件拷贝到D:\Apache2.2\modules目录中,它的作用是将jsp请求转发给Tomcat
修改http.conf 文件在D:\Apache2.2\conf目录中
web服务的目录D:\root\webroot
主要修改:
1:修改DocumentRoot
改后的值:DocumentRoot "D:/root/webroot"
2:修改Directory
改后的值:<Directory "D:/root/webroot">
3:增加php服务功能
在ScriptAlias下面加上:
ScriptAlias /cgi-bin/ "D:/root/Apache2/cgi-bin/"
ScriptAlias /php/ "d:/root/php/"
AddType application/x-httpd-php .php

4:加载模块

加载的模块分别是php模块和jk模块
LoadModule php5_module d:\php\php5apache2_2.dll #这里不是php5apache2.dll的,注意apache的版本,老版本请使用下面的语句:
#LoadModule php5_module "d:/root/php/php5apache2.dll" # 老版本请使用此语句

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so

5:增加tomcat转发配置
在文件结尾加入:

JkWorkersFile d:\tomcat\conf\workers.properties # workers.properties这个文件不存在,下面要手动创建此文件
JkLogFile d:\tomcat\logs\mod_jk.log
JkLogLevel info
JkLogStampformat "[%a %b %d %H:%M:%S %Y]"

#JkMount /*.jsp ajp13
#JkMount /*.do ajp13
#JkMount /Servlet/* ajp13

保存http.conf文件即可.

6:配置和Tomcat的集成
在d:/tomcat/conf目录里新建tomcat的转发器配置属性文件 workers.properties

将写好的workers.properties文件保存到该目录中
文件内容是:
workers.tomcat_home="d:\tomcat"
workers.java_home="d:\j2sdk"

worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

修改Tomcat的配置文件:server.xml

<Host name="localhost" appBase="D:\root\webroot"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>

保存即可

在D:\root\webroot目录添加.html .jsp .php文件便可运行.
jsp的话还是要放入D:\root\webroot\root\*.jsp这样才能在http://localhost/*.jsp显示出来

二.虚拟主机的配置

1>.修改Apache的虚拟主机配置文件,由于我们用的是apache2.2版本的,所以使用的是一个单独的虚拟主机配置文件,在D:\Apache2.2\conf\extra目录里的httpd-vhosts.conf,别忘记了在httpd.conf文件里把启用虚拟主机配置文件这一行的注释去掉.如果您使用的是老版本的apache,可以直接在修改conf/httpd.conf文件,在文件尾部加入:

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@aaa.com
DocumentRoot D:/root/webroot/aaa
ServerName www.aaa.com
ServerAlias *.aaa.com
DirectoryIndex index.jsp index.php index.htm index.html
ErrorLog logs/aaa.example.com-error_log
CustomLog logs/aaa.example.com-access_log common

#重新加载文件类型,不加载好像不行的,如果使用的是httpd.conf文件的话,好像不用修改的
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /Servlet/* ajp13

</VirtualHost>

<VirtualHost *:80>
ServerAdmin admin@bbb.com
DocumentRoot D:/root/webroot/bbb
ServerName www.bbb.com
ServerAlias *.bbb.com
DirectoryIndex index.jsp index.php index.htm index.html
ErrorLog logs/bbb.example.com-error_log
CustomLog logs/bbb.example.com-access_log common

#重新加载文件类型,不加载好像不行的,如果使用的是httpd.conf文件的话,好像不用修改的
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /Servlet/* ajp13

</VirtualHost>

2>.修改D:\tomcat\server.xml 文件:

<Host name="www.aaa.com" appBase="D:\root\webroot\aaa"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<alias>aaa.com</alias>
<alias>aaa</alias>
<Context path="" docBase="D:\root\webroot\aaa" debug="0" reloadable="true"/>
</Host>

<Host name="www.bbb.com" appBase="D:\root\webroot\bbb"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<alias>bbb.com</alias>
<alias>bbb</alias>
<Context path="" docBase="D:\root\webroot\bbb" debug="0" reloadable="true"/>
</Host>

同时在D:\root\webroot\aaa和D:\root\webroot\bbb放入相应的测试文件,重启Apache与Tomcat.
注:现在jsp文件不用放入ROOT目录中

按上面的做法应该可以实现虚拟主机的功能,如果有什么问题可以经我留言.

Discuz! URL 静态化的使用

引用:http://www.discuz.net/usersguide/advanced_urlrewrite.htm#title

Discuz! URL 静态化的使用

Discuz! 4.1.0 新增了 Discuz! URL 静态化(以下简称 URL 静态化)功能。此功能可以将 Discuz! Archiver 及部分常用页面(如 forumdisplay.php、viewthread.php、viewpro.php 等)进行 URL 静态化转换,形成类似 http://www.demo.net/discuz/forum-1-1.html 形式的超级链接,从而使论坛内容更容易被搜索引擎挖掘,提高被收录的机率。

使用注意事项

  • 您可以通过 系统设置 中 Discuz! 选项 来控制 URL 静态化 的打开或关闭及其工作状态
  • 本功能对服务器环境有特殊要求,独立主机用户需要对 Web 服务器增加相应的 Rewrite 规则,因此需要服务器权限才可使用。对于虚拟主机用户,您需要向您的空间服务商进行咨询:空间是否支持 Rewrite 以及是否支持对站点目录中 .htaccess 的文件解析,只有满足这两条件,URL 静态化 功能才会生效。
  • 打开 URL 静态化 后,论坛一些常用链接会变成类似 http://www.demo.net/discuz/forum-1-1.html 形式,如果您的服务器环境不支持或者尚未配置好,访问这些链接会出现“网页无法显示”的错误信息,论坛将无法正常访问。发生无法访问的现象时,请您进入管理后台,关闭 URL 静态化 功能,论坛即可恢复正常状态。

URL 静态化 工作状态

    在 Discuz! 选项 中提供了四种 URL 静态化 的工作状态,分别是:

       


    • 不启用 URL 静态化 功能。

       

    • Discuz! Archiver 静态化
      当论坛启用 Archiver 功能时,Archiver 内的所有链接均采用 *.html 形式。

       

    • 普通页面静态化
      对论坛常用页面(如 forumdisplay.php、viewthread.php、viewpro.php、space.php 等)进行 URL 静态化转换。

       

    • Archiver 和普通页面均静态化
      对 Archiver 以及论坛常用页面(如 forumdisplay.php、viewthread.php、viewpro.php、space.php 等)进行 URL 静态化转换。

Discuz! URL 静态化 服务器环境的设置

Discuz! URL 静态化 功能受到论坛所在服务器环境的制约,在开启此功能之前,请根据你的 Web 服务器环境,选择相应的环境配置方法。错误的设置有可能造成服务器无法启动或者功能无效。以下仅提供 Apache 和 Zeus 的配置方法,IIS 或其他 Web 服务器您可根据原理自行修改。

Apache Web Server(独立主机用户)

    首先确定您使用的 Apache 版本,及是否加载了 mod_rewrite 模块。

    Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码:

    	LoadModule rewrite_module     libexec/mod_rewrite.so
                    

    	AddModule mod_rewrite.c
                    

    Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段代码:

    	LoadModule rewrite_module     modules/mod_rewrite.so
                    

    如果存在,那么在配置文件(通常就是 conf/httpd.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置,即 <VirtualHost> 中去,如果加在虚拟主机配置外部将可能无法使用。改好后然后将 Apache 重启。

    	<IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteRule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2
                    RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
                    RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
                    RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3
                    RewriteRule ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2
                    </IfModule>
                    

    如果没有安装 mod_rewrite,您可以重新编译 Apache,并在原有 configure 的内容中加入 --enable-rewrite=shared,然后再在 Apache 配置文件中加入上述代码即可。

Apache Web Server(虚拟主机用户)

    在开始以下设置之前,请首先咨询您的空间服务商,空间是否支持 Rewrite 以及是否支持对站点目录中 .htaccess 的文件解析,否则即便按照下面的方法设置好了,也无法使用。

    检查论坛所在目录中是否存在 .htaccess 文件,如果不存在,请手工建立此文件。Win32 系统下,无法直接建立 .htaccess 文件,您可以从其他系统中拷贝一份,或者在 Discuz.net 技术支持栏目中下载此文件。编辑并修改 .htaccess 文件,添加以下内容

    	# 将 RewriteEngine 模式打开
                    RewriteEngine On
                    # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
                    RewriteBase /discuz
                    # Rewrite 系统规则请勿修改
                    RewriteRule ^archiver/((fid|tid)-[\w\-]+\.html)$ archiver/index.php?$1
                    RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2
                    RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ viewthread.php?tid=$1&extra=page\%3D$3&page=$2
                    RewriteRule ^space-(username|uid)-(.+)\.html$ space.php?$1=$2
                    RewriteRule ^tag-(.+)\.html$ tag.php?name=$1
                    

    添加内容时,请遵照上面的提示,修改论坛所在的路径,然后保存。将 .htaccess 文件上传到论坛所在的目录中。然后进入论坛系统设置的搜索引擎优化,根据需要开启 URL 静态化功能。

IIS Web Server(独立主机用户)

    首先在 IIS 的 Isapi 上添加这个筛选器,筛选器名称为 Rewrite ,可执行文件选择 Rewrite.dll ,重新启动 IIS。附件中 httpd.ini 已经设置好,其中内容如下:

    	[ISAPI_Rewrite]
                    # 3600 = 1 hour
                    CacheClockRate 3600
                    RepeatLimit 32
                    # Protect httpd.ini and httpd.parse.errors files
                    # from accessing through HTTP
                    RewriteRule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)\?*(.*)$ $1/archiver/index\.php\?$2&$4
                    RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html\?*(.*)$ $1/forumdisplay\.php\?fid=$2&page=$3&$4
                    RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html\?*(.*)$ $1/viewthread\.php\?tid=$2&extra=page\%3D$4&page=$3&$4
                    RewriteRule ^(.*)/space-(username|uid)-(.+)\.html\?*(.*)$ $1/space\.php\?$2=$3&$4
                    RewriteRule ^(.*)/tag-(.+)\.html\?*(.*)$ $1/tag\.php\?name=$2&$3
                    

    然后进入论坛系统设置的搜索引擎优化,根据需要开启 URL 静态化功能。

    附件下载地址:http://www.discuz.net/attachment.php?aid=124274

Zeus Web Server

    在虚拟主机配置中找到 Request Rewriting,在 Rewrite Script 中写入以下内容,然后 Apply changes 并 make it take effect。

    	match URL into $ with ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)?*(.*)$
                    if matched then
                    set URL = $1/archiver/index.php?$2&$4
                    endif
                    match URL into $ with ^(.*)/forum-([0-9]+)-([0-9]+)\.html?*(.*)$
                    if matched then
                    set URL = $1/forumdisplay.php?fid=$2&page=$3&$4
                    endif
                    match URL into $ with ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html?*(.*)$
                    if matched then
                    set URL = $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3&$4
                    endif
                    match URL into $ with ^(.*)/space-(username|uid)-(.+?)\.html?*(.*)$
                    if matched then
                    set URL = $1/space.php?$2=$3&$4
                    endif
                    match URL into $ with ^(.*)/tag-(.+?)\.html?*(.*)$
                    if matched then
                    set URL = $1/tag.php?name=$2$3
                    endif
                    

    修改完服务器配置后请进入论坛 系统设置,打开 URL 静态化 功能,测试功能是否正常。如果出现问题,请仔细检查你所做的每一步。

discuz论坛中启用rewriterurl功能

下面以discuz论坛为例,为单独站点开始rewrite功能:

<VirtualHost *:80>
    ServerAdmin ywl@16399.com
    DocumentRoot "d:/site/bbs.abc.cn"
    ServerName bbs.abc.cn

 LoadModule rewrite_module modules/mod_rewrite.so

 <Directory "d:/site/bbs.abc.cn">
 Options Indexes MultiViews

 Options FollowSymLinks
 AllowOverride All

 order allow,deny
 Allow from all
 Options FollowSymLinks
 </Directory>

 <IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2
  RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
  RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
  RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3
  RewriteRule ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2
 </IfModule>

</VirtualHost>

Apache基本配置指南

1、如果找不到文件的具体位置,在Linux下可以用类似locate httpd.conf的指令来搜索文件的位置。如果搜索不到,可以先用updatedb指令更新索引数据库再用locate搜索。

2、apachectl configtest或apachectl –t检查配置文件是否合法。apachectl一般位于安装目录的bin目录下(如:/usr/local/apache2/bin)。不要直接调用httpd。

3、配置文件是httpd.conf;在Linux系统中,它可能存在于系统配置目录(如:/etc/httpd/conf/),也可能存在于Apache的安装目录(如:/usr/local/apache2/conf)。

4、配置文件中,一行包含一个指令,但行尾可以用\表示续行。\与下一行之间不能有其它任何字符,包括空白字符。
#表示这一行是注释。

5、指令对大小写不敏感,但是参数对大小定敏感,在Linux系统下,路径也要注意大小写。路径后不必加/。

6、类似于<Directory></Directory>表示一个配置段。大多数配置段中的指令仅针对配置段所匹配的请求有效。但诸如 <IfDefine>、<IfModule>、<IfVersion>之类,是在Apache启动时,如果条件成立才有效,并且对所有请求都有效。

httpd.conf的基本配置选项

7、ServerName服务器名称。它用来创建URL的重导向。ServerName是apache服务器自身识别访问请求的标记之一,他不必与实际IP或DNS名称一致。也可以不设置,如果这样,那apache会试图用IP来作为请求的标记。端口也可以不设置。
例:ServerName www.example.com:80

8、ServerAdmin管理员的电子邮件地址。服务器的错误提示页会用到。如果ServerSignature定义为Email的话,将在错误页的页尾增加ServerAdmin的链接。

9、Listen服务器监听的地址和端口。端口一定要指定。默认情况下,服务器会监听本机的所有地址。可以同时使用多个Listen指令。
例一:同时所有接受来自端口80和8000的请求
Listen 80
Listen 8080
例二:指定地址+端口,配置虚拟主机时,会需要这样设置。详细看虚拟主机的设置。这并不是必要的。
Listen 192.168.0.2:80
Listen 192.168.0.1:8080
注意地址是本机的地址,是指客户端对本机某个地址的请求。地址可以是域名,但最好是IP地址。
例三:IPv6地址必须用方括号括起来。
Listen [2001:db8::a00:20ff:fea7:ccea]:80
例四:要使Apache只处理IPv4的请求,只需如此:
Listen 0.0.0.0:80

10、ServerRoot 服务器基础目录,一般就是Apache的安装目录,不必更改。

11、DocumentRoot 指定主目录。不指定的话,默认目录一般是ServerRoot目录下的htdocs目录(如/usr/local/apache2/htdocs),视版本而定;但是可能会有例外,所以最好指定。如果指定相对路径,则认为是相对于ServerRoot目录的。目录后不要加/。

12、DirectoryIndex 默认首页名称。多个默认页名称用空格隔开。

13、ErrorDocument 处理请求出错时的处理方式。未配置时只返回错误代码。
例:
ErrorDocument 500 "The server made a boo boo."
# 指定本地URL时,该URL是相对于DocumentRoot目录的。
ErrorDocument 404 /missing.html
ErrorDocument 404 "/cgi-bin/missing_handler.pl"
# 使用绝对URL时,客户机将无法收到错误码。
ErrorDocument 402 http://www.example.com/subscription_info.html

14、ErrorLog,CustomLog 指定错误日志和访问日志。如果指定路径是相对路径,则认为是相对ServerRoot目录的。日志文件可能会很大,以至影响到其它文件的储存空间,所以有必要把日志文件放到一个单独的分区。
例一:
ErrorLog /var/log/error_log
# commom是日记文件的格式,由LogFormat定义。不可用于ErrorLog。
Customlog /var/log/access_log common
例二:管道日志,可以用Apache提供的rotatelogs来实现。rotatelogs程序一般位于安装目录的bin目录。
# 这将每24小时建立日志文件/var/log/logfile.nnnn,nnnn是日记建立时的系统时间。
CustomLog “|bin/rotatelogs /var/log/logfile 86400”common
# 日志文件达到5M时建立新日记,文件名类似于logfile.2006-12-30-24_33_12。
ErrorLog “|bin/rotatelogs /var/log/logfile.%Y-%m-%d-%H_%M_%S 5M”

15、User, Group 指定运行服务子进程的用户和组。Rpm包安装apache时会自动设置一个用户和组,但有时会设成nobody或者不设置。为了安全和方便管理,设置为用户和组为apache是很重要的。
例:User apache
Group apache
注意在Linux系统中手动添加apache用户和组时,必须把他们的shell指定为nologin

虚拟主机

16、虚拟主机通过<VirtualHost>配置段来配置,配置段里的指令对虚拟主机有效,配置段没有配置的,将采用全局的配置。检查虚拟主机的配置可用apachectl –S(可能某些版本这个参数无效)。

17、基于域名的虚拟主机在DNS把多个域名都映射到同一IP的情况下有用。典型的配置如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@test.com
DocumentRoot /www/docs/test.com
ServerName test.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/docs/test2.com
ServerName test2.com
</VirtualHost>

NameVirtualHost *:81
<VirtualHost *:81>
DocumentRoot /www/docs/test3.com
ServerName test3.com
</VirtualHost>
注意一:NameVirtualHost 指定虚拟主机所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虚拟主机时,NameVirtualHost是必要的指令。NameVirtualHost可以定义多个。
注意二:所有符合NameVirtualHost或<VirtualHost>标签定义的请求,都会被作为虚拟主机处理,而主服务器将不理会。NameVirtualHost定义了而<VirtualHost>标签没有定义的的请求,服务器会找不到相应的虚拟主机而将无法处理。所以每个NameVirtualHost定义的参数至少要有一个<VirtualHost>相匹配。
注意三:如果设置NameVirtualHost 或<VirtualHost>为*:80的话,所有针对80端口的请求,都会被虚拟主机处理,请求会根据域名指向某个虚拟主机。如果有来自80端口的请求,而所请求的域名没有被配置为虚拟主机,那将指向第一个虚拟主机。这样主服务器将无法收到来自80端口的任何请求。为此也要为主服务器配置一个虚拟主机。

18、ServerAlias 虚拟主机的别名
例:
NameVirtualHost *:80
<VirtualHost *:80>
       ServerName www.domain.tld
       ServerAlias domain.tld *.domain.tld
       DocumentRoot /www/domain
</VirtualHost>
这表示对 domain.tld和*.domain.tld的请求也由虚拟主机www.domain.tld处理。

19、ServerPath指令是用于让某些老式浏览器也访问基于域名的虚拟主机的,一般不必设置。

20、基于IP地址的虚拟主机。例:
Listen 80
<VirtualHost 172.20.30.40>
Docu
mentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.50 192.168.0.10:80>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>
每个虚拟主机可定义多个IP,之间用空格隔开。

21、各种虚拟主机的混用。例:
Listen 80
Listen 81

NameVirtualHost 172.20.30.40
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

NameVirtualHost 172.20.30.40:81
<VirtualHost 172.20.30.40:81>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>

# IP-based
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>
<VirtualHost 172.20.30.60:81 172.20.30.40:81>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>

22、虚拟主机混用时的问题:
一、虚拟主机混用可以这样理解:一行NameVirtualHost指令定义的所有虚拟主机为一组;该组与一个基于IP的虚拟主机平级。即把一行NameVirtualHost定义的整个组看作是一个基于IP的虚拟主机。
二、虚拟主机指定的端口必须是Listen定义的。如果虚拟主机没有指定端口,则认为是80端口。如果NameVirtualHost * 这样定义,是指所有地址的所有已定义端口。
三、更具体的地址定义优先。比如NameVirtualHost指令定义了*:80,而某个基于IP的虚拟主机定义为192.168.0.1:80,那么此时如有对192.168.0.1:80的请求,那请求会被优先指向192.168.0.1:80定义的虚拟主机。所以为了避免混乱,不要定义相互有交叉或包含的地址区间。
四、一个虚拟主机,可以同时为基于域名和基于IP的。如上一例中最后一个虚拟主机。这样符合两种定义的请求都会被指同一个虚拟主机。有时要区别内外网对虚拟主机的访问时可以这样,因为来自内网的请求可能和来自外网的请求可能不一样,但是它们需要指向同一个虚拟主机。

23、使用"_default_"虚拟主机,这个虚拟主机可以理解成基于IP的虚拟主机。例:
<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>
这个虚拟主机将接管与其它虚拟主机IP和端口不匹配的请求。不过如此一来,主服务器将不会处理任何请求。因此把主服务器配置成一个虚拟主机是必要的。

24、本地机器代理在其它机器上运行的虚拟主机。例:
<VirtualHost 158.29.33.248>
ProxyPreserveHost On
ProxyPass /foo/no !
ProxyPass /foo http://192.168.111.2
ProxyPassReverse /foo http://192.168.111.2
ServerName hostname.example.com
</VirtualHost>
一、首先这是一个基于IP的虚拟主机,它接收并处理对IP地址158.29.33.248的请求。
二、ProxyPass /foo http://192.168.111.2 将把对http://158.29.33.248/foo的请求转换为一个代理请求,该请求指向http://192.168.111.2
三、ProxyPass /foo/no ! 不代理针对/foo/no的请求。这个必须放在正常代理指令之前。
四、ProxyPreserveHost On 意思是传送原始请求的Host信息给被代理的机器。
五、ProxyPassReverse /foo http://192.168.111.2 可以保证请求URL在其它机器上被重定向后,本机处理时也可以保持一致。具体看手册关于反向代理的部分。
六、基于域名的虚拟主机也是同样的道理。不管是什么类型的虚拟主机,它只是处理归它处理的请求而已。

配置段

25、<IfDefine> 只有在用httpd命令行启动服务器时(最好不要直接使用httpd,用apachectl代替),使用了-D参数定义了相应参数时才生效。如服务器用apachectl –D test启动时,<IfDefine test>配置段生效。

26、<IfVersion> 例如:<IfVersion >= 2.0.55> 当Apache版本不低于2.0.55时生效。

27、<IfModule> 服务器启用了指定的模块后才生效。这是最常用的。例如<IfModule mod_mine_magic.c>。

28、<Directory> 用于封装一组指令,使之对某个目录和下属的子目录有效。
例:
<Directory />
       Options FollowSymLinks Indexes
       AllowOverride None
       order Deny,Allow
       Deny from All
       Allow from example.com
</Directory>
该配置段对整个根目录树有效。
一、Options 常用选项:FollowSymlinks允许在此目录中使用符号链接;Indexes允许目录列表,即在该目录没有默认页时服务器返回该目录的列表给客户机;SymLinksIfOwnerMatch只有符号链接与其目的目录或文件属于同一用户时才有效。
注意:对同一目录,只有一行Options有效,如果定义某个目录的Options同时要继承上级目录的定义,可以这样:Options +Indexes。如果这样:Options +Indexes –FollowSymLinks,这将为本级目录增加Indexes,取消FollowSymLinks。
二、AllowOverride 常用选项:None 不允许使用.htaccess;All允许在.htaccess中使用所有的指令。一般不必使用.htaccess,而且为了安全和效率起见,设置为None比较好。
三、Order 访问控制,控制条件由Deny行和Allow行定义。Order指令常用选项:Deny,Allow 除了符合条件的外,其它的也允许访问;Allow,Deny 除了符合条件的外,其它的不允许访问。
Deny from All是拒绝所有的访问,Allow from example.com是允许example.com域访问该目录(意思是如果该服务器上有多个虚拟主机的话,只有example.com可以访问该目录)。三行合起来的意思就是只允许example.com域访问根目录。当然这只是个例子,应该禁止所有域对根目录的访问。注意:Deny,Allow指令生效的顺序取决于Order中Deny和Allow的顺序。
注意<Directory>不能嵌套。
这样为了安全起见常常需要设置:
#拒绝对所有目录的访问,注意这里的/是指操作系统的根目录,而非DocumentRoot目录。
<Directory />
       Options –Indexes -FollowSymLinks
       AllowOverride None
       order Allow,Deny
</Directory>
#允许所有对/var/htdocs的访问,允许对/var/htdocs的文件列表。
<Directory /var/htdocs>
       Options +Indexes
       order Deny,Allow
</Directory>

29、<Files>和<Directory>类似,不过它定义的是对文件的访问控制。它们都可以接受正则表达式为参数,格式如<Files ~ "\.(gif|jpe?g|png)$">或者<FilesMatch "\.(gif|jpe?g|png)$">。

30、<Location>与<Files>和<Directory>同,不过它定义的是对URL的访问控制。

PHP配置

31、加载php模块:LoadModule php5_module modules/libphp5.so

32、AddModule mod_php5.c (不是必须的)

33、哪种后缀的文件作为php脚本来解析:AddType application/x-httpd-php .php (这是必须的,但是可以用下面的配置代替):
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
</Files>
这种方法还可以为.php文件专门设置更多的配置。

34、哪种后缀的文件是php源文件:Addtype application/x-httpd-php-source .phps (不是必须的)

35、添加index.php为目录首页:DirectoryIndex index.php(视情况而定)

36、ScriptAlias /php/ /usr/local/php/ 对类似http://example/php/abc.php的请求将引导执行/usr/local/php/abc.php脚本。 (一些所谓配置指南里有,事实上完全没有这个必要。并且ScriptAlias这个指令是针对CGI脚本的。他会把php脚本也当作已定义的cgi脚本处理)。

37、Action application/x-httpd-php "C:/PHP/php.exe" 所有application/x-httpd-php类型的文件都由C:/PHP/php.exe来处理,注意application/x-httpd-php必须是已经定义的文件类型。 (只有在windows中以CGI模式安装PHP时才有用)。

38、事实上,必要的配置只有这么两条:
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
可以把相关php的配置语句都放在一起便于管理。简单至此,不要被一些配置指南吓住了。

注:这篇文章给很多网站转载了真正出处不知道在那里,保存起来先。

20种让你的Apache配置更安全的方法

声明:关于安全的事情没有保证的或者绝对的。这些建议可以让你的服务器更安全,但不要认为遵循这些建议后你的服务器就理所当然是安全的。

另外,在这些建议中有的建议可能会降低服务器性能或者因为你的环境引起问题。我建议所作的任何改变是否适合你的需求完全由你决定。换句话说,那是你的风险。

一、确保你安装的是最新的补丁

如果门是敞开的话,在窗户上加锁就毫无意义。同样道理,如果你没有打补丁,继续下面的操作就没有什么必要。

二、隐藏Apache的版本号及其它敏感信息

默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。

这里有两条语句,你需要添加到你的httpd.conf文件中:

ServerSignature Off

ServerTokens Prod

ServerSignature出现在Apache所产生的像404页面、目录列表等页面的底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:

Server:Apache

如果你非常想尝试其它事物,你可以通过编辑源代码改成不是Apache的其它东西,或者你可以通过下面将要介绍的mod_security实现。

三、确保Apache以其自身的用户账号和组运行

有的Apache安装过程使得服务器以nobody的用户运行,所以,假定Apache和你的邮件服务器都是以nobody的账号运行的,那么通过Apache发起的攻击就可能同时攻击到邮件服务器,反之亦然。

User apache

Group apache

四、确保web根目录之外的文件没有提供服务

我们不让Apache访问web根目录之外的任何文件。假设你的所以web站点文件都放在一个目录下(例如/web),你可以如下设置:

?/P>

Order Deny,Allow

Deny from all

Options None

AllowOverride None

?/P>

?/P>

Order Allow,Deny

Allow from all

?/P>

注意,因为我们设置Opitins None 和AllowOverride None,这将关闭服务器的所有Option和Override。你现在必须明确把每个目录设置成Option或者Override。

五、关闭目录浏览

你可以在Directory标签内用Option命令来实现这个功能。设置Option为None或者-Indexes。

Options -Indexes

六、关闭includes

这也可以通过在Directory标签内使用Option命令来实现。设置Option为None或者-Includes。

Options -Includes

七、关闭CGI执行程序

如果你不用CGI,那么请把它关闭。在目录标签中把选项设置成None或-ExecCGI就可以:

Options -ExecCGI

八、禁止Apache遵循符号链接

同上,把选项设置成None或-FollowSymLinks:

Options -FollowSymLinks

九、关闭多重选项

如果想关闭所有选项,很简单:

Options None

如果只想关系一些独立的选项,则通过将Options做如下设置可实现:

Options -ExecCGI -FollowSymLinks -Indexes

十、关闭对.htaccess文件的支持

在一个目录标签中实现:

AllowOverride None

如果需要重载,则保证这些文件不能够被下载,或者把文件名改成非.htaccess文件。比如,我们可以改成.httpdoverride文件,然后像下面这样阻止所有以.ht打头的文件:

AccessFileName .httpdoverride

?/P>

Order allow,deny

Deny from all

Satisfy All

十一、运行mod_security

Run mod_security是O’Reilly出版社出版的Apache Security一书的作者,Ivan Ristic所写的一个非常好用的一个Apache模块。可以用它实现以下功能:

·简单过滤

·基于过滤的常规表达式

·URL编码验证

·Unicode编码验证

·审计

·空字节攻击防止

·上载存储限制

·服务器身份隐藏

·内置的Chroot支持

·更多其它功能

十二、关闭任何不必要的模块

Apache通常会安装几个模块,浏览Apache的module documentation,了解已安装的各个模块是做什么用的。很多情况下,你会发现并不需要激活那些模块。

找到httpd.conf中包含LoadModule的代码。要关闭这些模块,只需要在代码行前添加一个#号。要找到正在运行的模块,可以用以下语句:

grep LoadModule httpd.conf

以下模块通常被激活而并无大用:mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex。

更多方法请见http://www.petefreitag.com/item/505.cfm

“跟后台打印程序系统服务通讯时出现错误”问题的解决

事件类型:        警告
事件来源:        TermServDevices
事件种类:        无
事件 ID:        1114
日期:            2006-12-19
事件:            15:50:17
用户:            N/A
计算机:        7VF4VUNP5YBDD
描述:
跟后台打印程序系统服务通讯时出现错误。请打开服务管理单元,确认后台打印程序服务是否在运行。
----------------------------------------------------------------------------------------
解决办法:
运行“tscc.msc”,双击连接的“RDP-TCP”,选择“客户端设置”,选上“Windows打印机映射”和“LPT端口映射”表示禁用这两个映射,点击确定。