标签:.com 信息 正则表达式 redirect idt 页面 .htaccess 服务器 tps
在编写Apache重写或者看别人的重写时,经常会看到以下段落
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
RewriteRule index.php index.m.php
就像程序中的if语句一样,表示如果符合某个或某 几个条件执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来个例子
例一:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
RewriteRule index.php index.m.phpRewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule index.php index.L.phpRewriteRule index.php index.b.php
上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候,会自动让你访问到index.m.php这个文件,当你是用一些移动终端访问的 时候,会让你对index.php这个文件的访问实际访问的是index.L.php去,如果你是用其它的浏览器访问的时候,会让你跳到 index.b.php。
例二:
RewriteCond %{HTTP_USER_AGENT} (www.test.cn)
RewriteRule (.*)$ test.php
上面语句的作用是如果你访问的父页面地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到test.php的访问.
例三:
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule (.*)$ test.php
上面语句的作用是如果你的地址是host1或host2或host3的时候,则就跳到对test.php。从这里可以看出,RewriteCond语句之间默认的是 AND, 如果想要OR,则要明确的写出来
RewriteCond TString Pattern [flags]
TString为被匹配的字符串,可以是
RewriteRule反向引用($N)、
RewriteCond反向引用(%N)、
服务器变量(%{NAME_OF_VARIABLE})
RewriteMap扩展(${mapname:key|default})
Pattern是一个应用于当前实例TString的正则表达式。
TString将会计算后与Pattern匹配
返回两个结果, 要么为match要么为no-match, 为match继续往下执行
具体参数参见apache中RewriteCond中文手册
此指令可以多次使用。每个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要
在运行时,规则是按这个顺序生效的
具体参数参见
Apache ReWriteRule参数
apache中RewriteCond中文手册
给一张[flag]速查表
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 | 设置环境变量 |
例子
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
上面规则,意思是当前请求不是文件,也不是目录,这将url重写到index.php入口文件。
你调试apache的重写规则调试到抓狂过吗?
你有看到项目htaccess中N条重写规则而不知所措吗?
我想肯定有,下面介绍让如何让你明明白白的调试apache的重写规则。
mod_rewrite是带有日志功能的,开启的方法如下:
在apache的配置文件中增加
RewriteLog "/myfolder/mylogfile.log"
RewriteLogLevel 9
Rewriteloglevel 0 代表关闭,9代表开启最大debug输出,调为9可以看到最详细的重写匹配信息.请将上面”/myfolder/mylogfile.log”替换为你电脑上的实际路径,添加好之后重启apache,访问重写页面的时候apache就会自动的日志文件里面增加记录了
那些熟悉早期版本的mod_rewrite的无疑将寻找RewriteLog和RewriteLogLevel指令。此功能已被下述的新的模块的日志记录配置完全取代。
LogLevel alert rewrite:trace3
其中,记录等于由trace1~trace8,数值越大,记录的信息越多。你将能够在你的 apache配置的error_log 中看到这些信息。
注意:
标签:.com 信息 正则表达式 redirect idt 页面 .htaccess 服务器 tps
原文地址:https://www.cnblogs.com/phptec/p/9636166.html