转:http://www.365mini.com/page/apache-options-directive.htm
Options
指令是Apache配置文件中一个比较常见也比较重要的指令,Options
指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options
指令的主要作用是控制特定目录将启用哪些服务器特性。
Options
指令常见的配置示例代码如下:
- <Directory />
- #指定根目录"/"启用Indexes、FollowSymLinks两种特性。
- Options Indexes FollowSymLinks
- AllowOverride all
- Order allow,deny
- Allow from all
- </Directory>
Options
指令的完整语法为:Options [+|-]option [[+|-]option] ...
。简而言之,Options指令后可以附加指定多种服务器特性,特性选项之间以空格分隔。下面我们来看看Options
指令后可以附加的特性选项的具体作用及含义(Apache配置中的内容均不区分大小写):
- All
- 表示除
MultiViews
之外的所有特性。这也是Options指令的默认设置。 - None
- 表示不启用任何的服务器特性。
- FollowSymLinks
- 服务器允许在此目录中使用符号连接。如果该配置选项位于
<Location>
配置段中,将会被忽略。 - Indexes
- 如果输入的网址对应服务器上的一个文件目录,而此目录中又没有
DirectoryIndex
指令(例如:DirectoryIndex index.html index.php
),那么服务器会返回由mod_autoindex
模块生成的一个格式化后的目录列表,并列出该目录下的所有文件(如下图)。 - MultiViews
- 允许使用
mod_negotiation
模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的file
文件夹下中存在名为hello.jpg
和hello.html
的两个文件,此时用户输入Http://localhost/file/hello
,如果在file
文件夹下并没有hello
子目录,那么服务器将会尝试在file
文件夹下查找形如hello.*
的文件,然后根据用户请求的具体情况返回最匹配要求的hello.jpg
或者hello.html
。 - SymLinksIfOwnerMatch
- 服务器仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于
<Location>
配置段中,将会被忽略。 - ExecCGI
- 允许使用
mod_cgi
模块执行CGI脚本。 - Includes
- 允许使用
mod_include
模块提供的服务器端包含功能。 - IncludesNOEXEC
- 允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从
ScriptAlias
目录使用"#include virtual"虚拟CGI脚本。
此外,比较细心的读者应该注意到,Options
指令语法允许在配置选项前加上符号"+"或者"-",那么这到底是什么意思呢。
实际上,Apache允许在一个目录配置中设置多个Options
指令。不过,一般来说,如果一个目录被多次设置了Options
,则指定特性数量最多的一个Options
指令会被完全接受(其它的被忽略),而各个Options
指令之间并不会合并。但是如果我们在可选配置项前加上了符号"+"或"-",那么表示该可选项将会被合并。所有前面加有"+"号的可选项将强制覆盖当前的可选项设置,而所有前面有"-"号的可选项将强制从当前可选项设置中去除。你可以参考下面的例子:
- #示例1
- <Directory /web/file>
- Options Indexes FollowSymLinks
- </Directory>
- <Directory /web/file/image>
- Options Includes//允许使用
mod_include
模块提供的服务器端包含功能。 - </Directory>
- #目录/web/file/image只会被设置Includes特性
- #示例2
- <Directory /web/file>
- Options Indexes FollowSymLinks
- </Directory>
- <Directory /web/file/image>
- Options +Includes -Indexes
- </Directory>
- #目录/web/file/image将会被设置Includes、FollowSymLinks两种特性
----------------------------------------------------------------------
AllowOverride 设置为 None 时,.htaccess 文件将被完全忽略。当此指令设置为All时,所有具有“.htaccess” 作用域的指令都允许出现在.htaccess 文件中。
Require all granted #允许所有
Require all denied #拒绝所有
<IfModule test>...</IfModule>仅当test为真的时候才进行处理。如果test为假,所有其间的指令都将被忽略.
301(永久移动)请求的网页已永久移动到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。
303(查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
---------------------------------------------------
RewriteEngine On
RewriteCond %{HTTP_HOST} ^xxx\.com$ [NC]
RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]
输入 xxx.com 自动变成 www.xxx.com 。RewriteCond判断条件,RewriteRule实施。nc:no case,不区分大小写,R=301,永久跳转;L:last,中止重写流程,不再对当前URL施加更多的重写规则。
RewriteCond %{REQUEST_FILENAME} !-f//是否不是一个正常文件
RewriteCond %{REQUEST_FILENAME} !-d//是否不是一个目录
更多rewrite请参考:http://blog.csdn.net/function__/article/details/54379804
---------------------------------------------------
FastCgiIpcDir
- 描述:指定作为 UNIX 套接字文件存储位置的目录,该套接字文件用于应用程序和 Web 服务器之间的通信。
- 缺省:无
- 模块:mod_fastcgi
- 配置文件中有多个实例:是
- 作用域:服务器配置
- 语法:
- UNIX 平台:FastCgiIpcDir directory
- Windows NT 和 Windows 2000 操作系统:FastCgiIpcDir name
- 值:directory 或 name
FastCgiExternalServer
- 描述:将文件名定义为外部 FastCGI 应用程序。与 Fastcgiserver 伪指令的运作相同,只不过 CGI 应用程序是在 Web 服务器以外的另一个进程中运行。
- 缺省:无
- 模块:mod_fastcgi
- 配置文件中有多个实例:是
- 作用域:服务器配置
- 语法:FastCgiExternalServer file name -host hostnameport [-appConnTimeout n]
FastCgiExternalServer file name -socket file name [-appConnTimeout n]
<FilesMatch> 指令:包含作用于与正则表达式匹配的文件名的指令.
---------------------------------------------------------------------------------------------
转:http://www.cnblogs.com/lzrabbit/archive/2013/03/05/2944804.html
Apache配置虚拟目录和多主机头
多个虚拟目录
首先把Apache安装到D:\Program Files\Apache2.2目录下,端口号设置为8080,安装完成后默认的网站根目录为D:\Program Files\Apache2.2\htdocs,通常我们可以在htdocs下面建立个文件夹MySite,然后在浏览器输入:http://localhost:8080/MySite 这样就可以看到我们自己的站点了。然而有时我们想把站点放到其它目录下面,这时就需要配置虚拟目录了
比如我们在D盘建立如下文件夹D:\Code\WebSite,然后通过http://localhost:8080/DemoSite来访问这个站点(相当于同一个域名下不同应用,但与DocumentRoot不冲突)
打开httpd.conf文件,搜索<IfModule alias_module> 节点,然后在节点内输入以下内容:
#下面是虚拟目录声明格式
#Alias用来定义虚拟目录及虚拟目录路径,其中虚拟目录名称用于URL访问的路径别名,可以和虚拟目录名称不同
#<Directory/>节点用于定义目录的访问权限等
#
#Alias 虚拟目录名称 虚拟目录路径
#<Directory 虚拟目录路径>
# Options Indexes FollowSymLinks
# AllowOverride All
# Order allow,deny
# Allow from all
#</Directory>
#下面是具体的示例,/DemoSite是目录别名 "D:/Code/WebSite"是虚拟目录的实际路径
Alias /DemoSite "D:/Code/WebSite"
<Directory "D:/Code/WebSite">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
重启Apache服务后,在浏览器输入http://localhost:8080/DemoSite就可以正常访问了
这里需要注意下目录尽量使用"/",而不是使用"\",原因就是"\"代表转义符有些情况下会导致莫名奇妙的错误
多主机头绑定
(就是在一个端口上绑定多个域名,然后每个域名可以指向不同的目录进行访问,主机头是IIS里面的说法),打开httpd.conf文件,在文件最后添加如下内容
#多主机头配置无需放在特定的节点下面,一般直接在配置文件底部添加即可 #NameVirtualHost addr[:port] 为一个基于域名的虚拟主机指定一个IP地址(和端口) #声明主机头必须加这条指令,否者主机头配置不会生效 #VirtualHost节点下面ServerName就是要绑定的域名,DocumentRoot表示此域名指向的目录 #本机测试的话请在hosts中进行域名绑定如 127.0.0.1 www.mysite1.com
NameVirtualHost *:8080 <VirtualHost *:8080> ServerName www.mysite1.com DocumentRoot "D:\Program Files\Apache2.2\htdocs" </VirtualHost> <VirtualHost *:8080> ServerName www.mysite2.com DocumentRoot "D:\Code\MySite" </VirtualHost>
配置好后,重启apache服务,浏览器输入www.mysite1.com:8080,就会自动定向到D:\Program Files\Apache2.2\htdocs站点了
输入www.mysite2.com:8080就会自动定向到D:\Code\MySite站点,如此就可以实现在一个服务器上同时运行多个站点。
------------------------------------------------------------------
转:http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_alias.html
Apache模块 mod_alias
说明: | 提供对文件系统到文档树的映射和URL的重定向 |
---|---|
状态: | Base |
模块名: | alias_module |
源文件: | mod_alias.c |
概要
此模块提供的指令可以操控作为请求到达服务器的URL。 Alias
和ScriptAlias
指令用于在URL和文件系统路径之间实现映射, 使不在DocumentRoot
目录下的内容也能成为文档树的一部分, 其中,ScriptAlias
指令有更多的一层含义, 它标明此目标目录下只有CGI脚本。
Redirect
指令引导客户端以一个不同的URL产生一个新的请求, 常用于一个资源被移动到一个新的位置的时候。
Alias 指令
说明: | 映射URL到文件系统的特定区域 |
---|---|
语法: | Alias URL-path file-path|directory-path |
上下文: | 服务器配置, 虚拟主机 |
状态: | Base |
模块: | mod_alias |
Alias
指令使文档可以被存储在DocumentRoot
以外的本地文件系统中。 以(%已经被解码的)url-path路径开头的URL可以被映射到以 directory-filename开头的本地文件。
例子:Alias /image /ftp/pub/image
对http://myserver/image/foo.gif的请求,服务器将返回/ftp/pub/image/foo.gif文件.
注意:如果url-path中有后缀的 /,则服务器要求有后缀 /以扩展此别名。 即,Alias /icons/ /usr/local/apache/icons/
并不能对/icons
实现别名。
ScriptAlias 指令
说明: | 映射一个URL到文件系统并视之为CGI脚本 |
---|---|
语法: | ScriptAlias URL-path file-path|directory-path |
上下文: | 服务器配置, 虚拟主机 |
状态: | Base |
模块: | mod_alias |
ScriptAlias
指令的行为与Alias
指令相同, 但同时它又标明此目录中含有应该由mod_cgi
中cgi-script处理器处理的CGI脚本。 以URL-path开头的(已被%解码)的URL会被映射到由第二个参数指定的 具有完整路径名的本地文件系统中的脚本。
例子:
ScriptAlias /cgi-bin/ /web/cgi-bin/
对http://myserver/cgi-bin/foo
的请求会引导服务器执行/web/cgi-bin/foo
脚本.