一、 htaccess是什么?
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。
二、.htaccess都可以做什么?
.htaccess文件可以的事情,主要包括:文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,等等。
通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
三、.htaccess语法规则
RewriteCond (可以理解为if)
语法结构
RewriteCond String Pattern [flags]
RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当RewriteCond的条件(CondPattern)匹配成功时,RewriteRule的重写规则才被应用于当前URL处理。
TestString是一个纯文本的字符串,除了包含普通的字符外,还可以包括下列的变量结构扩展:
RewriteMap扩展:引用方法是:${mapname:key|default} 细节请参见RewriteMap指令 。
TestString可以包含服务器变量 ,引用方法是:%{NAME_OF_VARIABLE}
NAME_OF_VARIABLE可以是下表列出的字符串之一:
HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT REMOTE_ADDR REMOTE_HOST REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE DOCUMENT_ROOT SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME API_VERSION THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ
RewriteRule
语法结构
RewriteRule pattern target [Flag1,Flag2,Flag3]
RewriteRule flag
rewritecond的其他用法:
“-d”(目录)
将TestString视为一个路径名并测试它是否为一个存在的目录。
“-f”(常规文件)
将TestString视为一个路径名并测试它是否为一个存在的常规文件。
“-s”(非空的常规文件)
将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
“-l”(符号连接)
将TestString视为一个路径名并测试它是否为一个存在的符号连接。
“-x”(可执行)
将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
“-F”(对子请求存在的文件)
检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
“-U”(对子请求存在的URL)
检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
四、.htaccess常见使示例解释
一个图片防盗链的例子:
RewriteEngine On //On|Off,RewriteEngine 用于开启或停用rewrite功能 RewiteBase / //RewriteBase URL-path,设定基准目录,例如希望对根目录下的文件rewrtie,就是”/” RewriteCond %{HTTP_REFERER} !^http://(.+.)?baidu.com/ [NC] //如果来源网址不是*.baidu.com RewriteCond %{HTTP_REFERER} !^$ //并且来源网址不是空 RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] //如果访问的文件后缀是jpeg,jpg,gif,bmp,png的图片,则重定向到一个固定的图片
额外说明
1、RewriteBase用于设定重写的基准URL。在对一个新的URL进行替换时,此模块必须把这个URL重新注入到服务器处理中。为此,它必须知道其对应的URL前缀或者说URL基准。通常,此前缀就是对应的文件路径。但是,大多数网站URL不是直接对应于其物理文件路径的,因而一般不能做这样的假定!所以在这种情况下,就必须用RewriteBase指令来指定正确的URL前缀。如果你的网站服务器URL不是与物理文件路径直接对应的,而又需要使用RewriteBase指令,则必须在每个对应的.htaccess文件中指定RewriteRule。
2、RewriteRule Pattern Substitution [Flags] 其中的Pattern就是参数,一般为一些文件的扩展名;Substitution是用来替换前面用的;这儿的Flags,参考上面的表格,常用的R表示 redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。
3、RewriteRule反向引用:
引用方法是 $N (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。
4、RewriteCond反向引用:
引用方法是 %N (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。
5、RewriteMap 扩展:
引用方法是 ${mapname:key|default}
6、服务器变量:
引用方法是 %{ NAME_OF_VARIABLE } 这个是我们最常使用到的功能
7、CondPattern:
是条件pattern, 即, 一个应用于当前实例TestString的正则表达式, 即, TestString将会被计算然后与CondPattern匹配.可以在pattern串中使用!字符(惊叹号)来实现匹配的反转。
五、更多使用示例
1、图片重定向
RewriteEngine On RewriteCond %{HTTP_HOST} ^localhost$ //如果域名是localhost RewriteCond %{REQUEST_FILENAME} !-f //并且访问的文件找不到 RewriteRule ^images/(.+) http://127.0.0.1/test/showimages/$1 [R=302,L] //则跳转到另一个域名下的另一个目录访问这个图片
2、二级域名重定向到www.teslacar.vip
rewriteEngine on rewriteCond %{http_host} ^teslacar.vip [NC] rewriteRule ^(.*)$ http://www.teslacar.vip/$1 [R=301,L]
3、网站升级时,临时错误页面
RewriteEngine on RewriteCond %{REQUEST_URI} !/teslacar.html$ //如果请求的地址不是teslacar.html RewriteCond %{REMOTE_ADDR} !^123.123.123.123 //客户端ip如果不是这个 RewriteRule $ /error.html [R=302,L] //则重定向到error.html这个升级提醒页面
4、重定向RSS地址到FeedSky
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedSky [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feed.feedsky.com/yours
5、防止目录浏览
Options All -Indexes
6、404重定向
ErrorDocument 404 /404.html
7、设置目录默认页面
DirectoryIndex about.html
备注:.htaccess的权限要设置成644
标签:RewriteRule,HTTP,示例,URL,TestString,语法,htaccess,RewriteCond From: https://www.cnblogs.com/shamo89/p/17012000.html