通城做网站公司,厦门建设局网站工程师评审,美食网站建设的可行性,互联网信息投诉平台入口首先.htaccess什么?
.htaccess是一个纯文本文件#xff0c;它里面存放着Apache服务器配置相关的指令。
当我们使用apache部署一个网站代码准备部署到网上的时候#xff0c;我们手中的apache的httpd.conf大家肯定都知道。这是apache的配置文件#xff0c;然而我们大多数的…首先.htaccess什么?
.htaccess是一个纯文本文件它里面存放着Apache服务器配置相关的指令。
当我们使用apache部署一个网站代码准备部署到网上的时候我们手中的apache的httpd.conf大家肯定都知道。这是apache的配置文件然而我们大多数的网站都是基于云服务器来部署的还有就是团队协作开发的时候我们很难直接修改公共的httpd.conf这时 .htaccess就是httpd.conf的衍生品它起着和httpd.conf相同的作用。
.htaccess的基本作用
URL重写、自定义错误页面MIME类型配置访问权限控制等主要体现在伪静态的应用图片防盗链自定义404错误页面阻止/允许特定IP/IP段目录浏览与主页禁止访问指定文件类型文件密码保护
如何启用呢
首先我们找到httpd.conf,查找AllowOverride。启用AllowOverride 这个作用是允许重写覆盖相关配置 将AllowOverride None改为 All 再打开mod_rewrite机制即还是在.httpd.conf中查找mod_rewrite.so 这个作用是在httpd.conf外重写配置 先给个福利
这里分享给大家一个自动生成.htaccess的网站懒人必备哦
我们接下来接着分析相关功能
自定义错误页面 写法ErrorDocument 错误代码 空格 /目录名/文件名.扩展名
例子
ErrorDocument 404 /404.htmlErrorDocument 500 /500.htm
这样写好后保存后重启apache(一旦修改就一定要重启apache后文不再赘述),我们发现对应的错误代码显示的页面即是我们指定的文件很好理解
URL重写
这个功能是.htaccess很强大的功能试想我们做好的web一般都不想让用户多输入url吧还有就是什么.php.asp.do统统去掉才好. 首先把这个功能打开
# 将 RewriteEngine模式打开RewriteEngine On 我们先截取一段thinkphp中的默认隐去.php的.htaccess RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
第一眼看上去这都什么鬼之前还同学问我这段代码就是这样吗 额是的absulotly~我们慢慢分析下 首先这里面有两个基本的命令 RewriteCond和 RewriteRule RewriteCond Syntax: RewriteCond TestString CondPattern [flags]
TestString是一个纯文本的字符串除了包含普通的字符外 还可以包含 1.RewriteMap扩展引用方法是${mapname:key|default} 2.TestString可以包含服务器变量 引用方法是%{val} 其中val(变量)可以是 这里我们列举出一些常用的val REQUEST_FILENAME 这是与请求相匹配的完整的本地文件系统的文件路径名。 HTTPS 如果连接使用了SSL/TLS它将包含字符串”on”否则就是”off”(无论mod_ssl 是否已经加载该变量都可以安全的使用)。 REQUEST_URI 这是在HTTP请求行中所请求的资源. 其实有些val和PHP中的许多变量是相同的比如
RewriteCond %{HTTP_USER_AGENT} ^Mozilla//5/.0.*
RewriteRule index.php index1php
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule index.php index2.php
RewriteRule index.php index3.php也就相当于PHP
?phpif($_SERVER[HTTP_USER_AGENT] Mozilla/5.0){header(Location:1.php);}else if($_SERVER[HTTP_USER_AGENT] Lynx){header(Location:2.php);}elseheader(Location:3.php);
?CondPattern是条件模式即一个应用于当前TestString实例的正则表达式,这个正则表达式是和perl通用的。 但还有不同于不同正则的 1、可以在CondPattern串的开头使用”!’(惊叹号)来指定 不匹配 。 2、CondPatterns有若干特殊的变种。 除了正则表达式的标准用法还有下列用法 将CondPattern视为纯字符串与TestString按词典顺序进行比较。 如果TestString小于CondPattern则为真。 “CondPattern”————-(词典顺序的大于) 将CondPattern视为纯字符串与TestString按词典顺序进行比较。 如果TestString大于CondPattern则为真。 “CondPattern”————-(词典顺序的等于) 将CondPattern视为纯字符串与TestString按词典顺序进行比较。 如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。 如果CondPattern是”—(两个双引号)则TestString将与空字符串进行比较。 “-d”————-(目录) 将TestString视为一个路径名并测试它是否为一个存在的目录。 “-f “————-(常规文件) 将TestString视为一个路径名并测试它是否为一个存在的常规文件。 “-s “————-(非空的常规文件) 将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。 “-l “————-(符号连接) 将TestString视为一个路径名并测试它是否为一个存在的符号连接。 “-x “————-(可执行) 将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。 该权限由操作系统检测。 “-F “————-(对子请求存在的文件) 检查TestString是否为一个有效的文件而且可以在服务器当前的访问控制配置下被访问。 “-U “————-(对子请求存在的URL) [flags]
作为RewriteCond指令的第三个参数。flags是一个以逗号分隔的以下标记的列表。 RewriteRule
RewriteRule Syntax: Pattern rewritePattern [flags]
Pattern就是正则如php。rewritePattern 是针对Pattern 匹配后的URL进行rewritePattern 规定的替换。应用替换时前面Pattern 第一个中匹配的内容后面rewritePattern 就可以用$1引用第二个中匹配的就用$2应用……以此类推。flags和上面的RewriteCond一致这里不再赘述啦~ 而我们的例子中的三行就是 RewriteCond %{REQUEST_FILENAME} !-f #如果文件存在就直接访问文件不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)RewriteCond %{REQUEST_FILENAME} !-d #如果目录存在就直接访问目录不进行RewriteRule RewriteRule ^(.)$ index.php/$1 [QSA,PT,L] #对于所有的 ^(.) 加上 “index.php/” 拼接为index.php/XXX( ^(.*) ) 追加请求串QSA移交给下一个处理器 pass throughPT可不是代理为MIME类型PT是一个flage而且这是 last最后的rulesL的 。
好长的一串这回有点懂了吧。我们继续吧~
阻止/允许特定的IP地址
deny from 127.0.0.1 #阻止这个ipallow from 192.168.0.1#允许这个ipdeny 202.200.*.* #阻止所有202.200开头的ip 这个也比较好理解。
通过.htaccess放盗链
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain(/)?.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?baidu(/)?.*$ [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp|png)$ http://mydomain/404.html [R,NC,L]这个呢和之前的一样把除了mydomain和baidu域名的请求图片都冲定位到404.html.这就起到了防盗链的需求。
重定向
Redirect permanent index.php home.php #永久重定向Redirect temp index.php home.php #临时重定向
关于临时和永久的重定向就是302和301 我们摘抄出来一段话 1301 redirect——301代表永久性转移(Permanently Moved)301重定向是网页更改地址后对搜索引擎友好的最好方法只要不是暂时搬移的情况,都建议使用301来做转址。
SEO搜索引擎优化中提到一点如果我们把一个地址采用301跳转方式跳转的话搜索引擎会把老地址的PageRank等信息带到新地址同时在搜索引擎索引库中彻底废弃掉原先的老地址。
2302 redirect——302代表暂时性转移(Temporarily Moved )在前些年不少Black Hat SEO曾广泛应用这项技术作弊目前各大主要搜索引擎均加强了打击力度象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam也很容易被搜寻引擎容易误判为spam而遭到惩罚。
3meta fresh——这在2000年前比较流行不过现在已很少见。其具体是通过网页中的meta指令在特定时间后重定向到新的网页如果延迟的时间太短(约5秒之內)会被判断为spam。