PHP教程:httpd.conf文件装备-Php-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝26
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:153回复:0

  PHP教程:httpd.conf文件装备

楼主#
更多 发布于:2016-06-02 20:45

Apache的虚拟主机装备教程.

首要用“记事本”程序翻开“httpd.conf”装备文件。此文件存放在Apache服务器装置途径下的“conf”文件夹内。

一、运用 mod_vhost_alias

1.简略的动态虚拟主机

(1)从 Host: 头中取得服务器姓名 Server Name

UseCanonicalName Off

(2)这儿的日志格局,能够在将来经过第一个参数域来分隔不相同的虚拟主机的日志

LogFormat "%V %h %l %u %t \"%r\" %s %b"

VCommon

CustomLog logs/Access_log vcommon

(3)在回来恳求的文件名的途径中包括进服务器姓名: server name

VirtualDocumentRoot /www/hosts/%0/docs

VirtualScriptAlias /www/hosts/%0/CGI-bin

2.更为有用的根据 IP 地址的虚拟主机

(1)从 IP 地址反解析得到服务器姓名(server name)

UseCanonicalName DNS

(2)在日志中包括 IP 地址,便于后续分发

LogFormat "%A %h %l %u %t \"%r\" %s %b"

vcommon

CustomLog logs/access_log vcommon

(3)在文件途径中包括 IP 地址

VirtualDocumentRootIP /www/hosts/%0/docs

VirtualScriptAliasIP /www/hosts/%0/cgi-bin

二、运用 mod_rewrite

1. 运用 mod_rewrite 完成简略的动态虚拟主机

(1)从 Host: 头获取服务器姓名

UseCanonicalName Off

(2)可切割的日志

LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b"

vcommon

CustomLog logs/access_log vcommon

ExecCGI is needed here because we can't force

CGI execution in the way that ScriptAlias does

Options FollowSymLinks ExecCGI

(3)接下来是要害有些

RewriteEngine On

a ServerName derived from a Host: header may be

any case at all RewriteMap lowercase int:tolower

首要处理通常文档:

答应变名 /icons/ 起作用 - 别的变名类同

RewriteCond %{REQUEST_URI} !^/icons/

答应 CGIS

RewriteCond %{REQUEST_URI} !^/cgi-bin/

开端“变戏法”

RewriteRule ^/(.*)$

/www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1

如今处理 CGIs - 咱们需求强行运用一个 MIME 类型

RewriteCond %{REQUEST_URI} ^/cgi-bin/

RewriteRule ^/(.*)$

/www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-

 cgi]

2.运用独立的虚拟主机装备文件 vhost.map

(1)vhost.map 文件包括了相似下面的内容:

www.customer-1.com /www/customers/1

www.customer-2.com /www/customers/2

...

www.customer-N.com /www/customers/N

(2)http.conf 包括了:

RewriteEngine on

RewriteMap lowercase int:tolower

(3)界说映像文件

RewriteMap vhost txt:/www/conf/vhost.map

(4)和上面的比方相同,处理变名

RewriteCond %{REQUEST_URI} !^/icons/

RewriteCond %{REQUEST_URI} !^/cgi-bin/

RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

(5)这儿做根据文件的从头映射

RewriteCond ${vhost:%1} ^(/.*)$

RewriteRule ^/(.*)$ %1/docs/$1

RewriteCond %{REQUEST_URI} ^/cgi-bin/

RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

RewriteCond ${vhost:%1} ^(/.*)$

RewriteRule ^/(.*)$ %1/cgi-bin/$1

.htaccess文件功用

.htaccess文件的功用:"分布式装备文件"供给了关于目录改动装备的办法,即:在一个特定的文档目录中放置一个包括一个或多个指令的文件,

以作用于此目录及其一切子目录。作为用户,所能运用的指令受到限制。管理员能够经过Apache

的AllowOverride指令来设置.子目录中的指令会覆盖更高档目录或许主服务器装备文件中的指令。

一、过错文档的定位

(1)常用的客户端恳求过错回来代码:

401 Authorization Required

403 Forbidden

404 Not Found

405 Method Not Allowed

408 Request Timed Out

411 Content Length Required

412 Precondition Failed

413 Request Entity Too Long

414 Request URI Too Long

415 Unsupported Media Type

(2)多见的服务器过错回来代码:

500 Internal Server Error

(3)用户能够运用.htaccess指定自个事前制作好的过错提示页面。通常情况下,大家能够专门建立一个目录,例如errors放置这些页面。然后再.htaccess中,参加如下的指令:

ErrorDocument 404 /errors/notfound.html

ErrorDocument 500 /errors/internalerror.html

一条指令一行。

上述第一条指令的意思是关于404,也即是没有找到所需求的文档的时分得显现页面为/errors目录下的notfound.html页面。不难看出语法格局为:

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

假如所需求提示的信息很少的话,不用专门制作页面,直接在指令中运用HTML号了,例如下面这个比方:

ErrorDocument 401 "

你没有权限拜访该页面!

"

二、文档拜访的暗码维护要运用.htaccess对某个目录下的文档设定拜访用户和对应的暗码,首要要做的是生成一个.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV

这儿暗码经过加密,用户能够自个找些东西将暗码加密成.htaccess支撑的编码。该文档最佳不要放在www目录下,主张放在www根目录文档以外,这么更为安全些。

有了授权用户文档,能够在.htaccess中参加如下指令了:

AuthUserFile .htpasswd的服务器目录

AuthGroupFile /dev/null (需求授权拜访的目录)

AuthName EntERPassword

AuthType Basic (授权类型)

require user wsabstract

(答应拜访的用户,假如期望表中一切用户都答应,能够运用 require valid-user)

注:括号有些为学习时分自个添加的注释

三、回绝来自某个IP的拜访

假如我不想某个政府有些拜访到我的站点的内容,那能够经过.htaccess中参加该有些的IP而将它们回绝在外。

例如:

order allow,deny

deny from 210.21.112.43

deny from 219.146.95

allow from all

注:

第二行回绝某个IP,第三行回绝某个IP段,也即是219.146.95.0~219.146.95.255 想要回绝一切人?用deny from

all好了。不止用IP,也能够用域名来设定。

四、维护.htaccess文档

在运用.htaccess来设置目录的暗码维护时,它包括了暗码文件的途径。从安全思考,有必要把.htaccess也维护起来,不让别人看到其间的内容。尽管能够用别的方法做到这点,比方文档的权限。不过,.htaccess自身也能做到,只需参加如下的指令:

order allow,deny

deny from all

五、URL转向

咱们可能对网站进行从头计划,将文档进行了搬迁,或许更改了目录。这时分,来自搜索引擎或许别的网站连接过来的拜访就可能犯错。这种情况下,能够经过如下指令来完成旧的URL主动转向到新的地址:

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

或许全部目录的转向:

Redirect 旧目录 新目录

改动缺省的主页文件

通常情况下缺省的主页文件名有default、index等。不过,有些时分目录中没有缺省文件,而是某个特定的文件名,比方在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来拜访很费事。在.htaccess中能够容易的设置新的缺省文件名:

DirectoryIndex 新的缺省文件名

也能够列出多个,顺序标明它们之间的优先等级,

例如:

DirectoryIndex filename.html index.cgi index.pl

default.htm

rewrite重写功用

Apache模块

mod_rewrite,一个根据一定规矩的实时重写URL恳求的引擎此模块供给了一个根据正则表达式分析器的重写引擎来实时重写URL恳求。它支撑每个完整规矩能够具有不限数量的子规矩以及附加条件规矩的灵活并且强壮的URL操作机制。此URL操作能够依赖于各种测验,比方服务器变量、环境变量、HTTP头、时间符号,乃至各种格局的用于匹配URL组成有些的查找数据库。此模块能够操作URL的一切有些(包括途径信息有些),在服务器级的(httpd.conf)和目录级的(.htaccess)装备都有用,还能够生成终究恳求字符串。此重写操作的成果能够是内部子处理,也能够是外部恳求的转向,乃至还能够是内部署理处理。可是,一切这些功用和灵活性带来一个疑问,那即是复杂性,因而,不要指望一天之内就能看懂全部模块。更多的评论、细节、示例,请查看具体的URL重写文档。

(1)特别字符的引证:

在Apache

1.3.20中,TestString和Substitution中的特别字符能够用前导斜杠(\)来完成转义(即忽略其特别意义而视

之为通常字符)。

比方,Substitution能够用"\___FCKpd___27quot;来包括一个美元符号,以防止mod_rewrite把它视为反向引证。

(2)环境变量

此模块会盯梢两个额定的(非规范)CGI/SSI环境变量,SCRIPT_URL和SCRIPT_URI。他们包括了当时资源的逻辑网络视图,而规范CGI/SSI变量SCRIPT_NAME和SCRIPT_FILENAME包括的是物理系统视图。留意:这些变量坚持的是其开始被恳求时的URI/URL,即在任何重写操作之前的URI/URL。其重要性在于他们是重写操作重写URL到物理途径名的初始根据。

示例:

SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html

SCRIPT_FILENAME=/u/rse/.www/index.html

SCRIPT_URL=/u/rse/

SCRIPT_URI=http://en1.engelschall.com/u/rse/

(3)rewrite的指令

rewrite的指令有很多比方RewriteBase 指令

RewriteBase指令显式地设置了目录级重写的基准URL。鄙人文中,你将看到RewriteRule能够用于目录级的装备文件中(.htaccess)并在部分范围内起作用,即规矩实践处理的只是剥离了本地途径前缀的一有些。处理完毕后,这个途径会被主动地附着回去。默认值是"RewriteBase

physical-directory-path"。

在对一个新的URL进行更换时,此模块有必要把这个URL从头写入到服务器处理中。为此,它有必要知道其对应的URL前缀或许说URL基准。通常,此前缀即是对应的文件途径。可是,大多数网站URL不是直接对应于其物理文件途径的,因而通常不能做这么的假定!

所以在这种情况下,就有必要用RewriteBase指令来指定准确的URL前缀。

假如你的网站服务器URL不是与物理文件途径直接对应的,而又需求运用RewriteBase指令,则有必要在每个对应的.htaccess文件中指定RewriteRule

例如,目录级装备文件内容如下:

/abc/def/.htaccess -- /abc/def 目录的装备文件

留意:/abc/def 是 /xyz 的物理途径(例如存在一条'Alias /xyz

/abc/def'指令)。

RewriteEngine On

让服务器知道咱们运用的是 /xyz 而不是物理途径 /abc/def

RewriteBase   /xyz

重写规矩

RewriteRule   ^oldstuff\.html$  newstuff.html

注:上述比方中,对/xyz/oldstuff.html的恳求被准确地重写为对物理文件/abc/def/newstuff.html的恳求。

以下列出了内部处理的具体步骤:

恳求:

/xyz/oldstuff.html

内部处理进程:

/xyz/oldstuff.html     ->

/abc/def/oldstuff.html  (per-server Alias)

/abc/def/oldstuff.html ->

/abc/def/newstuff.html  (per-dir    RewriteRule)

/abc/def/newstuff.html -> /xyz/newstuff.html  

   (per-dir    RewriteBase)

/xyz/newstuff.html     ->

/abc/def/newstuff.html  (per-server Alias)

成果:

/abc/def/newstuff.html

尽管这个进程看来很繁复,可是由于目录级重写的到来机遇现已太晚了,它不得不把这个(重写)恳求从头写入到Apache核心中,所以Apache内部确实是这么处理的。可是:它的开支并不象看起来的那样大,由于从头写入彻底在Apache服务器内部进行,并且这么的进程在Apache内部也为别的很多操作所运用。所以,你能够充沛信任其规划和完成是准确的。

优质IT资源分享社区为你提供此文。

本站有大量优质php教程视频,资料等资源,包含php基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看

php教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客