url重写(urlrewrite)的一些系统变量
学php也有3年了,一直对url重写不是很了解,本学用到的话都是百度一下,再复制作简单修改,一些变量的参数都不太了解什么意思,难得今天有时间,做个笔记吧!
1)可用的一些系统变量,在重写条件和重写规则里都可以使用,格式为 %{name_of_variable}
HTTP headers: | connection & request: | |
---|---|---|
HTTP_ACCEPT HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_REFERER HTTP_USER_AGENT |
AUTH_TYPE CONN_REMOTE_ADDR CONTEXT_PREFIX CONTEXT_DOCUMENT_ROOT IPV6 PATH_INFO QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_PORT REMOTE_USER REQUEST_METHOD SCRIPT_FILENAME |
|
server internals: | date and time: | specials: |
DOCUMENT_ROOT SCRIPT_GROUP SCRIPT_USER SERVER_ADDR SERVER_ADMIN SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE |
TIME_YEAR TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY TIME |
API_VERSION CONN_REMOTE_ADDR HTTPS IS_SUBREQ REMOTE_ADDR REQUEST_FILENAME REQUEST_SCHEME REQUEST_URI THE_REQUEST |
使用示例:
RewriteCond %{HTTP_REFERER} !abc.com [NC]
RewriteCond %{REQUEST_URI} !logo.png [NC]
RewriteRule \.(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L]
PS:具体每个变量是什么意思就不说了,看变量名一般也知道是什么意思,实在不知道就自己再查吧
2)参数变量(只列出常用的几个,其他的请看 这里)
-d 是否一个目录
-f 是否一个文件
-U 是否一条有效的链接
这个比较常用来做伪静态时,判断访问链接是否一个真实目录或一个真实文件,不对它们进行重写(!是不等于的意思)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
3)比较运算符(用于重写条件 RewriteCond)
字符串比较
= 等于
< 小于
> 大于
<= 小于等于
>= 大于等于
整数比较
-eq 等于(equal)
-ge 大于等于(greater or equal)
-gt 大于(greater than)
-le 小于等于(less or equal)
-lt 小于(less than)
-ne 不等于(not equal)
4)RewriteBase 重写的根目录
默认重写是从根目录 / 开始的,但如果你的web目录是在二维目录里的,例如 /myapp/ 里的,这时候你要使用 urlrewrite的话是这样的
RewriteRule "^/myapp/index\.html$" "/myapp/index.php"
这样的话,是不是会很烦??这时候你就可以用RewriteBase了
RewriteBase "/myapp/"
RewriteRule "^index\.html$" "index.php"
5)RewriteRule 后面的标识(flags)(同时只列出几个常用的,其他的请看 这里)
[QSA] 保留未重写之前的链接的查询参数
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA] 使用 [QSA] 标识, 一个类似 /pages/123?one=two 这样的请求,会被重写成 /page.php?page=123&one=two 这样,如果没有 [QSA] 标识, 一样的请求,将会被重写成 /page.php?page=123
[PT] 使用这个标识,会让系统遇到一些以pathinfo格式分隔的url,不当成一个目录路径来处理
例如:/home/article/detail/id/1.html 默认地,url用/分隔的,是会被认为是目录来处理的(home目录下的article目录下的detail目录下的id目录下的1.html文件) 使用[PT]标识,就是告诉系统,这就是条字符串,不是目录,不要去找目录
[L] 匹配的最后一条规则,意思就是如果匹配了这一条规则,就不用比较这一条规则后的规则是否匹配了,直接停掉就可以了
[NC] 匹配时忽略大小写
[R] 重定向,url防盗链或301跳转等等会用到
PS:重定向时,想发出什么请求头,就用R=状态码就可以了 例如301重定向就是这样写的:[R=301,L]
6)正则怎么写?
1、正则部分是不需要处理域名也处理不到域名的,重写从根目录(/)开始
#错误的
RewriteRule htt:\/\/www\.abc\.com\/index\.html http:\/\/www\.abc\.com\/index\.php [NC,L] #这个也是错误的
RewriteRule (.*)\/index\.html $1\/index\.php [NC,L] #正确的
RewriteRule index\.html index\.php [NC,L]
2、^和$
^和$是匹配开头和结束的,不限制开头和结束时,相当于模糊匹配
#这个是可以匹配到图片文件链接,做防盗链的
RewriteRule \.(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L] #但下面这样是不行的,图片链接还有域名路径和文件名呢,直接.jpg这样肯定是匹配不上的
RewriteRule ^\.(jpg|png|gif|jpeg)$ http://www.abc.com/logo.png [R,NC,L] #下面这样是这是可以的
RewriteRule ^(.+)\.(jpg|png|gif|jpeg)$ http://www.ot.com/logo.png [R,NC,L]
3、$1 $2 $3 ......??
$1 $2 这些点位符是替换首页正则式匹配上的内容的,一个括号()一个组
RewriteRule ^/article/(\d+)/(\d+)\.html$ index\.php/article/index/cat_id/$1/id/$2 [NC,L]
前面两个(\d+)组,后面用$1 $2代替,再加一个组,就用$3代替,以此类推~
暂时就这样吧,完。
url重写(urlrewrite)的一些系统变量的更多相关文章
- URL重写 UrlRewrite
为什么要URL重写? 1.有利于SEO,带参数的URL权重较低: 2.地址看起来更正规,推广uid 伪静态:看起来像普通页面,而非动态生成的页面. 原理:在Global.asax的Applicatio ...
- windows2008R2下iis7.5中的url重写(urlrewrite)
以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...
- springMVC学习之url重写:urlrewrite with tuckey UrlRewriteFilter
在开发网站时地址栏的一些信息是我们不希望让客户看到,所以在开发时候就会涉及到url重写的问题. 下面介绍一种常用的url地址重写的方法. 1.利用maven下载相关jar文件,pom文件配置如下: & ...
- UrlRewrite(URL重写)--ASP.NET中的实现
概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的 ...
- ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
核心提示:大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有 ...
- 网站URL重写(Java UrlRewrite 的使用)
现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城.URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息. 在此说下它的好处,在开发过 ...
- IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)
下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...
- windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)
以前在windows2003里,使用的是iis6.0,那时常使用的URL重写组件是iisrewrite,当服务器升级到windows2008R2时,IIS成了64位的7.5,结果iisreite组件是 ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...
随机推荐
- Java日志 (zhuan)
http://www.cnblogs.com/bird-li/p/4696662.html ************************************************* 日志对于 ...
- pro mvvm 读书笔记
一.分离关注点 目的是确保每一个模块值有单一的,明确的目的,不需要去负责其他的功能.单一的目的也称为关注点. 1.1依赖 引用程序集对于依赖来说不是必须的.依赖关系可能也存在于一个代码单元要知道另一个 ...
- MongoDB学习之(一)安装
第一步:下载MongoDB的安装版进行安装 https://pan.baidu.com/s/1X3hIqORJ61TCG1UJ_yr6ag 由于第二次安装出现一些问题,所有还是记录一下,免得以后踩坑. ...
- 【C#/WPF】Image图片的Transform变换:平移、缩放、旋转
WPF中图像控件Image的变换属性Transform: 平移 缩放 旋转 即要想实现图片的平移.缩放.旋转,是修改它所在的Image控件的Transform变换属性. 下面在XAML中定义了Imag ...
- 利用HttpClient写的一个简单页面获取
之前就听说过利用网络爬虫来获取页面,感觉还挺有意思的,要是能进行一下偏好搜索岂不是可以满足一下窥探欲. 后来从一本书上看到用HttpClient来爬取页面,虽然也有源码,但是也没说用的HttpClie ...
- OK335xS 256M 512M nand flash make ubifs hacking
/********************************************************************************* * OK335xs 256M 51 ...
- HttpGet params not being sent httpget.setParams(params)不好使
错误的代码 HttpClient httpclient = new DefaultHttpClient(); HttpUriRequest request = new HttpGet(uri); Ht ...
- FreeMarker MyEclipse IDE
1. 下载freemarker-ide : http://sourceforge.net/projects/freemarker-ide/files/ 2. 下载完成后解压,由于IDE中的freema ...
- iOS彩票项目--第四天,新特性界面搭建,UICollectionViewController的初次使用
一.新特性界面搭建的思路: 在AppDelegate加载主窗体的时候进行判断程序版本号,直接进入程序或者进入新特性展示界面 取出当前的版本号,与旧的版本号相比较(旧的版本号在进入程序的时候存起来 =& ...
- LINQ教程一:LINQ简介
一.为什么要使用LINQ 要理解为什么使用LINQ,先来看下面一个例子.假设有一个整数类型的数组,找到里面的偶数并进行降序排序. 在C#2.0以前,如果要实现这样的功能,我们必须使用'foreach' ...