全网最全超详细.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解析

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine 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.1

  RewriteRule ^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} !-d
  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]


</IfModule>



  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.htaccess是一个用于配置Apache服务器的配置文件,通过.htaccess文件可以实现多种功能,比如重定向、访问控制等。然而,nginx服务器并不直接支持.htaccess文件,与.htaccess文件功能相似的配置是通过nginx的配置文件来完成的。nginx的配置文件是一个文本文件,通常位于服务器的/etc/nginx/目录下,通过修改该文件可以实现类似于.htaccess文件的功能。因此,在nginx服务器上,需要直接修改nginx的配置文件来实现相应的功能,而无需使用.htaccess文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使Nginx服务器支持.htaccess的方法](https://blog.csdn.net/index_ling/article/details/105855671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [nginx支持.htaccess文件实现伪静态的方法分享](https://download.csdn.net/download/weixin_38595689/14892500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值