|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我想在讲述自己的学习方式前,对那些期望能从我的文章中获得有用信息的人说一句心里话: </p> 起首用“记事本”法式翻开“httpd.conf”设置装备摆设文件。此文件寄存在Apache办事器装置途径下的“conf”文件夹内。
1、利用 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
2、利用 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
<Directory /www/hosts>
ExecCGI is needed here because we can't force
CGI execution in the way that ScriptAlias does
Options FollowSymLinks ExecCGI
</Directory>
(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、毛病文档的定位
(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 "<body bgcolor=#ffffff>
你没有权限会见该页面!
</body>"
2、文档会见的暗码回护要使用.htaccess对某个目次下的文档设定会见用户和对应的暗码,起首要做的是生成一个.htpasswd的文本文档,例如:
zheng:y4E7Ep8e7EYV
这里暗码经由加密,用户可以本人找些东西将暗码加密成.htaccess撑持的编码。该文档最好不要放在www目次下,建议放在www根目次文档以外,如许更加平安些。
有了受权用户文档,可以在.htaccess中到场以下指令了:
AuthUserFile .htpasswd的办事器目次
AuthGroupFile /dev/null (需求受权会见的目次)
AuthName EntERPassword
AuthType Basic (受权类型)
require user wsabstract (答应会见的用户,假如但愿表中一切用户都答应,可使用 require valid-user)
注:括号局部为进修时分本人添加的正文
3、回绝来自某个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,也能够用域名来设定。
4、回护.htaccess文档
在利用.htaccess来设置目次的暗码回护时,它包括了暗码文件的途径。从平安思索,有需要把.htaccess也回护起来,不让他人看到个中的内容。固然可以用其他体例做到这点,好比文档的权限。不外,.htaccess自己也能做到,只需到场以下的指令:
<Files .htaccess>
order allow,deny
deny from all
</Files>
5、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外部也为其他很多操作所利用。所以,你可以充实信赖其设计和完成是准确的。
然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了) |
|