欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

url重写(urlrewrite)的一些系统变量

发布时间:2023/12/2 windows 65 豆豆
生活随笔 收集整理的这篇文章主要介绍了 url重写(urlrewrite)的一些系统变量 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

学php也有3年了,一直对url重写不是很了解,本学用到的话都是百度一下,再复制作简单修改,一些变量的参数都不太了解什么意思,难得今天有时间,做个笔记吧!

1)可用的一些系统变量,在重写条件和重写规则里都可以使用,格式为 %{name_of_variable}

 

HTTP headers:connection & request: server internals:date and time:specials:
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
 
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代替,以此类推~

 

暂时就这样吧,完。

转载于:https://www.cnblogs.com/tujia/p/6277934.html

总结

以上是生活随笔为你收集整理的url重写(urlrewrite)的一些系统变量的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。