当前位置: 首页 > backend >正文

.htaccess语法讲解

(基础)

一、正则表达式

$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。

^  匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。

.    换行符以外的所有字符
 
\w   匹配字母或数字或下划线或汉字
 
\s   匹配任意的空白符
 
\d   匹配数字
 
\b   匹配单词的开始或结束
 
 *   重复零次或更多次
 
 +   重复一次或更多次
 
 ?   重复零次或一次
 
 {n}         重复n次
 
 {n,}        重复n次或更多次
 
 {n,m}       重复n到m次
 
 () $1 $2    一个括号代表一个分组,第一个括号里匹配的内容就用$1引用,第二个括号匹配的内容用$2引用,以此类推.....

二、 htaccess是什么
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。

三、.htaccess都可以做什么?
.htaccess文件可以的事情,主要包括:文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,等等。

四、.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标记    含 义    描 述
R    Redirect         发出一个HTTP重定向
F    Forbidden       禁止对URL地址的存取
G    Gone              标记URL地址不存在
P    Proxy             将URL地址传递给mod_proxy
L    Last                停止处理接下来的规则
N    Next               再次重第一个规则开始处理,但是使用当前重写后的URL地址
C    Chain            将当前的规则和紧随其后的规则链接起来
T    Type              强制执行指明的MIME类
NS    Nosubreq   只在没有任何内部子请求执行时运行本脚本
NC    Nocase       URL地址匹配对大小写不敏感
QSA    Qsappend    在新的URL地址后附加查询字符串部分,而不是替代
PT    Passthrough    将重写后的URL地址传递给另一个Apache模块进行进一步处理
S    Skip    忽略之后的规则
E    Env     设置环境变量

 
rewritecond的其他用法:
“-d”(目录)
    将TestString视为一个路径名并测试它是否为一个存在的目录。
“-f”(常规文件)
    将TestString视为一个路径名并测试它是否为一个存在的常规文件。
“-s”(非空的常规文件)
    将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
“-l”(符号连接)
    将TestString视为一个路径名并测试它是否为一个存在的符号连接。
“-x”(可执行)
    将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
“-F”(对子请求存在的文件)
    检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
“-U”(对子请求存在的URL)
    检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

常规demo解析 :

<IfModule mod_rewrite.c>Options +FollowSymlinks -MultiviewsRewriteEngine On //开启RewriteRule ^index.php/(.*)$ https://domain.com/$1 [N,L,R=301] //匹配带有index.php的页面去除index.php并301跳转到 https://domain.com/对应正则匹配的参数 上RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/   //如果是 GET /index.php HTTP/1.1RewriteRule ^index\.php$ https://domain.com/ [R=301,L]  完全匹配 index.php 则301跳转到 https://domain.com/ 上RewriteCond %{HTTP_HOST} !^domain.com$ [NC]RewriteRule ^(.*)$ https://domain.com/$1 [L,R=301]RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]</IfModule>

http://www.xdnf.cn/news/11409.html

相关文章:

  • [Linux系列]Chrony时间同步服务器
  • 下载了鲁大师,打开goolgle浏览器弹出360导航页
  • Web前端开发【新手入门指南】
  • JFreeChart 使用介绍
  • maven 环境变量的配置
  • 使用Collections.shuffle打乱集合顺序
  • 曼彻斯特编码
  • build-essential软件包简介
  • 24 | Boost:你需要的“瑞士军刀”
  • JQuery选择器及其样式操作、筛选方法以及链式编程
  • 彩虹表(rainbow table)
  • 如何用GlobalMapper下载高清卫星影像?
  • Apache CXF 架构指南
  • matlab使用教程(73)—指定绘图颜色
  • 【PDF报表】 Jasper Report入门学习
  • 数据库的三范式
  • 程序员都能当黑客吗?IT男、码农和程序猿有啥区别?
  • Aircrack-ng实战案例
  • 【PostgreSQL】postgresql | linux安装postgresql
  • ZFS-128bit文件系统
  • Java中生成随机数的4种方式!
  • JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)
  • 一、.netcore的开发环境与安装
  • win10系统重装(超简单)
  • go标准库strings — 字符串操作
  • 【Linux】认识Linux下的编译器gcc/g++ | 认识动静态库
  • SUSE Linux下安装Quartus的详细过程及编程示例
  • java timezone_详解Java中的时区类TimeZone的用法
  • 2024年鸿蒙最新谷歌开源Fuchsia OS,对标鸿蒙取代 Android?,面试篇
  • 耦合性(或称“耦合度”)