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


上一篇: 安装腾讯云开发者工具套件 PHP SDK 3.0
下一篇: lnmp重新安装mysql
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 203
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑