• 全网最全超详细.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]

    flags 

    RewriteRule flag
    RewriteRule标记含 义描 述
    RRedirect发出一个HTTP重定向
    FForbidden禁止对URL地址的存取
    GGone标记URL地址不存在
    PProxy将URL地址传递给mod_proxy
    LLast停止处理接下来的规则
    NNext再次重第一个规则开始处理,但是使用当前重写后的URL地址
    CChain将当前的规则和紧随其后的规则链接起来
    TType强制执行指明的MIME类
    NSNosubreq只在没有任何内部子请求执行时运行本脚本
    NCNocaseURL地址匹配对大小写不敏感
    QSAQsappend在新的URL地址后附加查询字符串部分,而不是替代
    PTPassthrough将重写后的URL地址传递给另一个Apache模块进行进一步处理
    SSkip忽略之后的规则
    EEnv设置环境变量

    rewritecond的其他用法:

    “-d”(目录)

        将TestString视为一个路径名并测试它是否为一个存在的目录。

    “-f”(常规文件)

        将TestString视为一个路径名并测试它是否为一个存在的常规文件。

    “-s”(非空的常规文件)

        将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。

    “-l”(符号连接)

        将TestString视为一个路径名并测试它是否为一个存在的符号连接。

    “-x”(可执行)

        将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。

    “-F”(对子请求存在的文件)

        检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

    “-U”(对子请求存在的URL)

        检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

    常规demo解析

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

  • 相关阅读:
    了解5个区别,FPmarkets用烛台和Renko图实现交易翻倍
    node 包管理工具对比 npm、yarn、pnpm、yarn berry
    电脑翻译软件-在线电脑实时翻译软件
    MySQL基础篇
    解决Web server failed to start. Port XXXX was already in use.
    推荐两款开源的绘制流程图软件
    MySQL安装_win10(超详细)
    foo 是什么意思
    浅谈一下前端字符编码
    VoLTE端到端业务详解 | 网元标识类
  • 原文地址:https://blog.csdn.net/qq_39586877/article/details/125445051