首页 > 其他分享 >.htaccess语法介绍和常规使用示例

.htaccess语法介绍和常规使用示例

时间:2022-12-29 11:22:19浏览次数:40  
标签:RewriteRule HTTP 示例 URL TestString 语法 htaccess RewriteCond

一、 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

相关文章

  • vue基本语法
    vue基本语法v-bind<!DOCTYPEhtml><htmllang="en"xmlns:v-bind="http://www.w3.org/1999/xhtml"><head><metacharset="UTF-8"><title>Title</title>......
  • R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例|附代码数据
    全文下载链接:http://tecdat.cn/?p=21317最近我们被客户要求撰写关于DLNM的研究报告,包括一些图形和统计输出。本文提供了运行分布滞后非线性模型的示例,同时描述了预测变量......
  • XML语言的基本语法-Java Web
    (目录)一、说明XML(eXtendedMarkupLanguage,可扩展的标记性语言)被设计用来定义结构、传输和存储数据,不用于表现和展示数据,目的是数据的内容HTML中的元素都是固定的,以显......
  • Java基本语法
    关键字与保留字关键字(keyword)的定义和特点:定义:被Java语言赋予了特殊的含义特点:所有的关键字都是小写的保留字(reservedword):现有Java版本尚未使用,但以后版本可能当作......
  • commons.net.telnet使用示例
     importorg.apache.commons.net.telnet.TelnetClient;importjava.io.IOException;publicclassTelnetDemo{publicstaticvoidmain(String[]args)throwsIOExce......
  • setup语法糖
    Vue3.2版本开始才能使用语法糖!什么是setupscript它是Vue3的一个新语法糖,在setup函数中。所有ES模块导出都被认为是暴露给上下文的值,并包含在setup()返回对......
  • Python 缩进语法的起源:上世纪 60-70 年代的大胆创意!
    上个月,Python之父GuidovanRossum在推特上转发了一篇文章《​​TheOriginsofPython​​》,引起了我的强烈兴趣。众所周知,Guido在1989年圣诞节期间开始创造Python,......
  • Loki Promtail 使用 multiline 对Java 堆栈日志进行多行处理的示例
    promtail使用multiline处理java多行日志文本的示例Environment:promtail_version:v2.7.1originJavalogcontent:logfilecontentstdout-a.log:2022-Dec-270......
  • Spring AOP源码(一):源码分析示例
    1、aop.xml配置文件1<?xmlversion="1.0"encoding="UTF-8"?>2<beansxmlns="http://www.springframework.org/schema/beans"3xmlns:xsi="http://www.w3.......
  • 第一篇 MarkDown语法
    一级标题前面加一个井号后空格二级两个井号三级三个井号字体效果(*~不加空格)helloword两边加两个**加粗,helloword两边各加一个星号变斜体helloword两边......