查看文章 |
浅谈对.htaccess的一些说明
2009-02-22 23:27
http://space.im286.com/index.php/action-viewthread-tid-1816434 在网上关于对.htaccess文件如何使用的文章比较的多,但却没有说明其中的一些命令或语法所表达的意思。这使得很多新手往往比较困惑,不得其解,有些二丈摸不着头脑。本文就从这方面来简单的说说,希望能作为对其的一个补充,更希望能基此落伍,呵呵!! 不知道大家平时有没有看一些经济类的文章,如果有的话,应该晓得当前有两个非常重要的理论或思潮:一是新自由主义,强调“看不见的手”,二是凯恩斯的继承者(新凯恩斯)主义,强调政府的干预。对于第一次接触到.htaccess文件的朋友,可能不太懂这是做什么用的,这儿我们大家加深一下印象,这是个“凯恩斯式”的文件,是专门控制和干预的。 .htaccess主要是基于Apache服务器,是其的一个重要组成部份,所以要想了解它,首先得看Apache的说明文档。一般你装完Apache,就可以看见了。这网上都有翻译,略过不提。通常要想使.htaccess文件起作用,就要安装Apache的一些对应的模块(一般不要你装,下载下来就有了),并且在配置文件中(通常是httpd.conf),在相应的<Directory />和</Directory>之间让AllowOverride命令不为None就成了。如果你要在特别的目录下让它不生效,就要加None,这时服务器就不会读.htaccess这个文件,使得它没用。这里的AllowOverride按中文就是“允许访问“的意思。具体如下面几个例子: CODE: <Directory />其中有None的都不会生效,有ALL或没写的都会生效。顺便说一下,在配置文件中搜索.htaccess,上面都还有一些注释。在生效后,.htaccess最主要的用处有三个,也是最常用到的。 第一,限制特定用户和特定的ip进行访问 限定用户要密码才能访问,在网上主要有两种方式,一种就是由.htaccess文件这样控制的弹出窗口(popup)模式,包话php的那种弹出方式。二是基于表单(form)发送的方式,比如进落伍这样的论坛,进邮箱看信等。其实它们都是遵循http协议的(具体可看RFC2068,RFC2616),再下面是TCP/IP,然后是链路层这样的,可看ISO层次。 下面是例子和说明: CODE: AuthUserFile /var/www/im286/VIP/.htpasswd其中的AuthUserFile指定一个包含用户和密码的(可由htpasswd命令或其它脚本生成,格式一般如im286:S3pzYTKk/orpU这样的)文本文件,这儿是.htpasswd,前面加一点表示隐藏。AuthGroupFile指定一个用戶组的文本文件,/dev/null表示没有。AuthName是指显示在弹出窗中的名称,AuthType是认证类型,一般不变。Limit限制了只能是GET和POST,require valid-user,说明只有在这个.htpasswd文件中的用户才是有效的。特定ip访问比较好理解,如下例: CODE: <Limit GET POST>这个就不细说了。第二,可以重定向URL 要重定向URL,就要使Apache装有能重定向的模块mod_rewrite(URL Rewriting Engine),为了让这个模块引擎起作用,就得令RewriteEngine on,就是让RewriteEngine这个命令参数启动起来。其它的以Rewrite开头的参数很多,就不一一说了,下面举两个例子: CODE: RewriteEngine ON 这儿运用了正则表达式(具体大家到网上看一下就知道了)对条件进行匹配,最重要的就是两个命令RewriteCond和RewriteRule。RewriteCond的语法如下: RewriteCond TestString CondPattern [Flags] 其中的TestString是指一个文本格式的条件,例子中用的是环境变量名HTTP_HOST所包含的内容(Name= Value),这是一个map(键值对)格式的数据类型。 CondPattern是条件参数,这儿以第一个例子为例,就是abc.com。 Flags标识是是第三个参数,可以用来紧跟下一个条件,这儿用OR表示或者,如果没有[Flags],则用隐含的AND,表示并且。其它的还可以NC等等,表示忽略大小写。 RewriteRule的语法如下: RewriteRule Pattern Substitution [Flags] 其中的Pattern就是参数,一般为一些文件的扩展名,Substitution是用来替换前面用的,这儿的Flags,常用的R表示redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。其它的还有很多,具体大家可看Apache文档下的模块(mod)下的mod_rewrite.html文件。 下面简单说说例子的含义: 第一个例子的意思就是如果客户请求(在浏览器上键入)abc.com,那么与第二个参数abc.com匹配的话,就会转向到www.999.com这个网站去。 第二个例子类同,就不多说了。其上的301是http响应代码,具体意思可参考前面提到的RFC文档,你也可以直接在网上搜一下就可以得到了。 第三,防止盗链 基本和前面一样,就举两个例子吧,如下: CODE: RewriteEngine on 具体意思就不多说了。其它的如防止spamer(广告)和bot(搜索机器人),去广告等等,网上都有了,就不说了。对于我们新手来说,支持.htaccess的免费空间不多,如果有的话,如果主机商不是太过分的话,一般都尽量支持它的广告,若是它是很过分的话,比如放了一个恶意插件或广告面占屏幕很大,就要动用一些技巧来屏蔽了。 不知不觉写了好多,想起如果有人看,肯定很累,就此住手。呵呵,真希望能够落伍啊!! |
最近读者: