您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 37288|回复: 10
打印 上一主题 下一主题

[php学习资料] .htaccess用法

[复制链接]
跳转到指定楼层
楼主
发表于 2019-7-11 11:35:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
.htaccess最重要的功能是实现URL重定向,比如URL静态化、URL重定向或者防止盗链等。1 Y! v( n5 b' c- H4 ?
7 p  [0 s2 O/ J# q! a
上述强大的功能都是由mod_rewrite模块实现,下面对其做一下简单介绍。
7 h1 G5 @! F# T) m
9 r! O5 k' s/ ]* Y一.安装和启用mod_rewrite模块:8 E, ^8 e9 k- Y* z+ z

! a! O) R; [' o7 `7 k(1).安装模块:6 L  f6 b! }) u, e4 Z1 B5 {$ _

  n7 h3 t2 U" j3 I  N
  1. sudo a2enmod rewrite
复制代码

* {+ r' \+ G% V4 M% L0 s! G7 N(2).开启httpd.conf的rewrite:
' D6 N+ P3 l" k8 x3 k# I5 M% [2 A1 M- c! ~1 H3 Z7 D; e
在[Apache安装目录]/conf/httpd.conf中找到如下代码:1 H2 r" _( ^$ |' w9 g1 I2 y; D

, X# ]- E$ x" q4 h
  1. #LoadModule rewrite_module modules/mod_rewrite.so
复制代码

$ n# a1 V0 V) k3 K" l去掉前面的#即可开启;如果没有这一行代码,那么手动添加。
. R( v/ j" Y7 d+ H% t* C# i& P3 _( V: n
特别说明:需要确保对应目录下存在mod_rewrite.so。4 P+ @6 n  t/ t0 l0 C) f

$ s( B8 C; f* v  K+ A在[Apache安装目录]/conf/httpd.conf中找到如下代码:- P4 O7 S+ j3 @# E

3 h. y2 v( }: c9 M- i
) B+ W6 G& H* o: p8 w
  1. <Directory />4 W3 o( }! p3 P  ?3 Z/ x; ]
  2.     Options FollowSymLinks1 [: z) Q8 N0 B7 o
  3.     AllowOverride None
    ( R' U9 c0 N2 K
  4.     Order deny,allow" k# a, W+ z1 n. {$ o% J
  5.     Deny from all* f7 }( X/ b; [7 n& D' I: w" T( [
  6. </Directory>
复制代码
- b. {5 {, n; N) D1 o2 A4 x, I
(1).将AllowOverride None”修改为“AllowOverride All实现所有文件夹都支持.htaccess。! K( G( E7 i8 W  r1 Z. b

9 O2 ]5 q$ T; K, c6 J(2).如果只允许特定文件夹支持.htaccess,可以在[Apache安装目录]/conf/httpd.conf添加如下代码:+ N( D; C% d" T# H5 i
" S7 k9 J9 s& T1 u7 G& x

5 L, W/ f/ j* E+ v3 |. R% v- {
  1. <Directory "D:/antzone/softwhy/">
    * V5 }. L. X$ J1 i' M
  2.     Options Indexes FollowSymLinks
    + |# I& a7 C" c6 L4 H' w' q9 M# G
  3.     AllowOverride All5 t' q- S. l. I5 w4 R
  4.     Order allow,deny5 `$ {+ K$ X( S3 d
  5.     Allow from all
    ! N. r6 M. R! i# l, f
  6. </Directory>
复制代码

: J: t) c, i% X& n. o% \$ w+ X此方式通常用在虚拟主机中;便于管理,代码建议写入[Apache安装目录]/conf/extra/httpd-vhost.conf中。
9 N4 d" s; g! B3 Q
) U' i0 T; [. F6 A# d: E$ H二.重写代码演示:
4 _* q; C5 a: V' V4 B* r0 `0 {( r$ c# x  J2 K0 z' U
' ^3 |; P5 p3 Y3 x! U( Z/ Z
  1. <IfModule mod_rewrite.c>
    ) }% Q0 }0 l$ Q" s3 n
  2. # Turn on rewrite engine- O9 b6 a0 _4 L3 D1 ]3 A5 E% j2 u
  3. Options +FollowSymlinks: `. q2 X1 g: \6 D
  4. RewriteEngine on
    8 E6 @: M0 F3 O2 [' [. d4 N0 J0 e6 j
  5. # More rules below6 S% N# ~% l; _; z
  6. ...9 {6 I) H) g: e" k$ \0 F: Z  h2 y/ W% n* D
  7. </IfModule>
复制代码
9 \( B# {! [2 w2 D
上面是重写代码格式演示,解释如下:  ?* ~8 Y: Q( D$ Y. Y2 c

' H0 o% m6 S' Y5 t+ q2 |7 V; r(1).IfModule判断Apache是否安装了mod_rewrite模块。
- \% Q/ K! g- P' c1 P" b5 [
8 _; n1 o0 a* o  K4 {+ f  e" h/ u/ f3 ?& w(2).FollowSymlinks必须要启用,rewrite引擎的安全需求。通常FollowSymlinks在Apache的主配置文件中已经启用,所以可以省略。+ h+ ^6 |# R8 p8 V
' U; a! G1 q0 k6 b
(3).RewriteEngine用于启用rewrite引擎。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
沙发
 楼主| 发表于 2019-7-11 11:42:27 | 只看该作者
.htaccess是一个特殊的文件,利用它可以完成大量的功能,比如URL静态化、301重定向,访问限制等。
特别说明:此文件的完整名称就是.htaccess,服务器截图如下:
一..htaccess介绍:
( Q) k7 _( q8 e6 g# b7 ]: v
9 S0 n$ Y3 R7 E" J* M8 a6 |(1).是否支持.htaccess:
: p7 {2 b- {/ w, W1 c( z9 g; F8 X2 c- `5 j% P# D2 {
如果主机采用Unix或Linux系统,或者Apache服务器,那么通常都是支持.htaccess。  Y( l$ D  p* u# ~0 U( S9 Z7 m- }

" t  G; w" c( K, H主机支持不代表服务商会开启此功能,所以最好具体询问一下,当然也可以写一段代码亲测。4 T' S# ~! u2 _5 _. ]$ \
: p7 G' o9 Y& s5 j: q+ a" k
(2).创建.htaccess文件:
( b: m1 [. L; f# ]& q  |" t  f. O
通常,首先创建一个txt文本文件,然后将其命名为.htaccess即可。
  M( Q' K* w/ j- j1 E7 W' h# v3 @1 N; @5 }9 l
可能由于系统等原因,上述方式并不成功,那么可以将以其他方式命名,例如:
; `) Q0 e6 w1 G0 x! ?, I) n$ ^' L3 F

+ e. }% o7 Y+ ^3 @
  1. antzone.txt
复制代码

5 L9 R/ E* c8 |+ Y4 `1 S4 ^将其上传到主机之后,再使用FTP工具重新将其命名为.htaccess。
; I: d3 k8 O6 Y. Z# }' [
1 o9 b6 g. |+ a1 }* T二.代码演示:5 W9 o7 D2 C) ?
7 l0 O- x2 h. g4 a: |5 k' [- i
下面通过一段简单的代码实例做一下演示:( `1 W/ P8 l6 O/ H/ v# V' L& l
) `# A1 y7 s  B4 m( W* f2 b' T1 c0 f
  1. # 将 RewriteEngine 模式打开
    6 }+ F9 ~1 A7 a, m
  2. RewriteEngine On
    0 x1 {4 A5 b. O) p- U
  3.   
    ) T7 q6 C( |9 v# Q; ^
  4. # 修改基准目录* v) I( w* s: J  Z4 a
  5. RewriteBase /  h: p! A; @/ N0 x8 \* b
  6.   
    7 q2 x; Z. ^7 z1 q
  7. # Rewrite 不带www的跳转到带有www的
    : {& {; @' o* {
  8. RewriteCond %{http_host} ^softwhy.com$ [NC]
    ! v7 p' I. z1 J: G, ~- F+ g' G! b
  9. RewriteRule ^(.*)$ http://www.softwhy.com/$1 [R=301]
复制代码
) t. O2 I. t- r0 U
代码解析如下:
: I: X; s( i* X& O+ p% ~
: I! W- [9 D, P7 ?8 ]- B' {(1).RewriteEngine On:开启重写功能。- n" M" X$ a9 z: U3 R
6 O4 }+ s$ y; l9 S/ d8 I1 l
(2).RewriteBase:重写基准目录,具体参阅.htaccess RewriteBase用法一章节。
5 @; o! R2 v+ N; L' ?$ m1 D) |# Y0 c
1 ?! m* P* W7 \# f, R- a# z(3).RewriteCond:规定重写的条件。9 X: {/ J. c7 v) {! g7 T& X0 s

: J; i7 X) q+ x$ K(4).RewriteRule:重写命令: C, O8 Q8 ^. C- ~
! |3 I, h; }- @

7 D% w3 o4 k+ _9 {
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2019-7-11 11:45:35 | 只看该作者
Rewrite重写任务基本上都是由RewriteCond和RewriteRule两个命令配合完成。
首先看一段简单代码:
  1. RewriteBase /
    : v9 {: W% V6 G- o0 O
  2. RewriteCond %{http_host} ^softwhy.com$ [NC]
    6 m. H2 V6 _3 R. b" M0 {! L" k; O
  3. RewriteRule ^(.*)$ http://www.softwhy.com/$1 [R=301]
复制代码
下面对上述代码做一下分析:
(1).RewriteBase /规定根目录为基准路径,具体参阅.htaccess RewriteBase用法一章节。
(2).RewriteCond规定重写的条件,如果条件成立,那么将会执行RewriteRule所规定的重写规则。
具体代码细节,后面会做介绍,它实现不带www的URL跳转到带有www的URL,比如:
  1. softwhy.com/article-451-1.html
      r% I% Q4 a" ?
  2. # 跳转到如下链接
    2 J7 K8 H9 B9 x$ q3 q
  3. www.softwhy.com/article-451-1.html
复制代码
一.RewriteCond命令:
它用来定义重写规则执行的条件。
语法结构:
  1. RewriteCond String Pattern [flags]
复制代码
定义一个条件,当String所规定的内容与Pattern规则匹配时,才会执行RewriteRule规定重写。
参数解析:
1.String:纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
(1).$N:RewriteRule后向引用。$N引用紧跟在RewriteCond之后的RewriteRule中Pattern的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
(2).%N:RewriteCond后向引用 。%N引用最后一个RewriteCond的Pattern中的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
2.Pattern:应用于当前实例TestString的正则表达式 ,还可以包括以下扩展:
(1).!:表示TestString不与当前正则匹配;格式是!CondPattern。
(2).>: 将condPattern作为普通字符串与String比较,String大于Pattern为真;格式是>Pattern。
(3).=:将condPattern作为普通字符串与String比较,String与Pattern相同时为真;格式是=Pattern。
(4).-d:将String当作一个目录名,检查它是否存在以及是否是一个目录;格式是-d。
(5).-f:将String当作一个文件名,检查它是否存在以及是否是一个文件;格式是-f。
(6).-s:将String当作一个文件名,检查它是否存在以及是否是一个长度大于0的文件;格式是-s。
(7).-l: 将String当作一个文件名,检查它是否存在以及是否是一个 symbolic link;格式是-l。
(8).-F:检查String是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。检查通过一个内部subrequest完成的, 因此需要谨慎使用,以防止降低服务器的性能。
(9).-U:检查String是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。检查通过一个内部subrequest完成的, 因此需要谨慎使用,以防止降低服务器的性能。
3.[flags]:多个标志之间用逗号分隔。
(1).NC:表示不区分大小写。
(2).OR:默认的情况下,二个条件之间是AND的关系,用这个标志将关系改为OR。
二.RewriteRule命令:
它用来规定当RewriteCond条件满足时要执行的规则。
语法结构:
  1. RewriteRule Pattern Substitution [flags]
复制代码
参数解析:
1.Pattern:作用于当前URL的正则表达式;此url不包含协议、域名和查询字符串部分。
2.Substitution:当RewriteCond满足时,用来替换原始URL指定内容的字符串,还可以包括以下扩展:
(1).$N:RewriteRule后向引用。$N引用紧跟在RewriteCond之后的RewriteRule中Pattern的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
(2).%N:RewriteCond后向引用 。%N引用最后一个RewriteCond的Pattern中的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
3.[flags]:多个标志之间用逗号分隔,下面是常见的一些flag:
(1).R:表示重定性,[R=301]表示301重定向,默认是302重定向。
(2).F:强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。
(3).G:强制当前URL为已废弃的,即,立即反馈一个HTTP响应代码410(已废弃的)。
(4).L:立即停止重写操作,并不再应用其他重写规则。
(5).N:重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。
(6).C:此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配,则其后继的链接的规则会被忽略。
(7).NC:忽略大小写。
(8).QSA:此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。
代码实例:
  1. RewriteCond %{http_host} ^softwhy.com$ [NC]# b7 F, }3 F9 `, J* S5 s. G, e
  2. RewriteRule ^(.*)$ www.softwhy.com/$1 [R=301]
复制代码
代码解析如下:
(1).RewriteCond用来规定执行后面重写的条件。
(2).%{http_host}是一个服务器变量,可以获取访问的域名,如果域名是"softwhy.com",添加成立。
(3).RewriteRule规定当RewriteCond条件成立索要执行的重写规则。
(4).^(.*)$获取URL除去协议、域名和查询字符串部分,比如softwhy.com/forum.php?mod=viewthread&tid=1,只获取forum.php部分,域名和查询部分不会被获取,如果要获取可以参阅RewriteRule QSA用法一章节。
(5).$1表示^(.*)$小括号所匹配的内容,$2表示第二个小括号所匹配的内容,以此类推。
(6).[R=301]表示原始网址重定向为后来重写的网址。
(7).用softwhy.com/forum.php?mod=viewthread&tid=1访问,softwhy.com/forum.php被www.softwhy.com/forum.php替换,最终是以www.softwhy.com/forum.php?mod=viewthread&tid=1访问页面。
  1. RewriteCond %{HTTP_HOST} ^(.+)\.google\.com$   1 M8 M7 d& f; R# l9 f& y
  2. RewriteRule ^/([\w]+)/([\d]+)$ /service/detail\.html\?id=$1&date=$2&c=%1 [L]
复制代码
代码分析如下:
(1).%{HTTP_HOST}获取域名。
(2).^(.+)\.google\.com$表示任何以google.com为根域名的域名。
(3).^/([\w]+)/([\d]+)$获取访问url两个斜线之间的部分,比如a/b/x.php,那么将会获取a/b。
(4).$1获取^/([\w]+)/([\d]+)$第一个小括号匹配的内容。
(5).$2获取^/([\w]+)/([\d]+)$第二个小括号匹配的内容。
(6).%1获取^(.+)\.google\.com$第一个小括号匹配的内容。
  1. RewriteRule forum.php?mod=viewthread&tid=100 article-2094-1.html [R=301]
复制代码
本意是,链接(www.)softwhy.comforum.php?mod=viewthread&tid=100跳转到(www.)softwhy.article-2094-1.html,但是结果却非常让人失望,最后结果如下:
  1. (www.)softwhy.article-2094-1.html??mod=viewthread&tid=100
复制代码
如果Substitution没有查询字符串部分,那么它附加原来URL查询字符串部分。
代码修改如下:
  1. RewriteRule forum.php?mod=viewthread&tid=100 article-2094-1.html? [R=301]
复制代码
再后面添加一个问号即可。
& U/ R/ d6 `- c9 R
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2019-7-11 11:48:31 | 只看该作者
使用RewriteBase可以重写基准路径,位于.htaccess文件靠顶部的位置。
代码实例:
  1. # 将 RewriteEngine 模式打开& U; m" a4 H2 C, q5 m" \  w
  2. RewriteEngine On
    0 f6 L- u5 I7 L$ @1 O) T. P! G
  3. RewriteBase /
    & @- W( \- a0 A' v4 F' C1 g1 N
  4. RewriteCond %{http_host} ^softwhy.com$ [NC]( l' i& `$ Q. `# q# G! G$ @' C
  5. RewriteRule ^(.*)$ www.softwhy.com/$1 [R=301]
复制代码
使用RewriteBase可以定义基准路径,上面将当前目录设置为基准目录。
  1. RewriteEngine On
    ) W2 ~2 V3 l# Z! n1 h8 ^
  2. RewriteBase /
    . b: U3 k3 }! G9 h
  3. RewriteRule ^forum\.htm$ forum.php [R=301]
复制代码
上面代码是将.html页面重定向到对应的.php页面。
假设虚拟空间在主机的位置是/host/antzone/,如果去掉RewriteBase /,那么将会重定向到:
  1. http://www.softwhy.com/host/antzone/forum.php
复制代码
这是因为RewriteBase的默认值是当前.htaccess所在的物理路径。
但绝大多数网站服务器URL不与物理文件路径直接对应,而是将虚拟主机所在目录为web站点的根目录。
再来看一段代码实例:
  1. RewriteEngine On
    : K* }' B( \3 g, j+ Y$ U
  2. RewriteBase / antozne/+ P3 p$ c# N: N' D9 i( y+ T
  3. RewriteRule ^(.*)\.htm$ forum.php [R=301]
复制代码

7 z+ B( m0 b& X1 T3 m# B
- q# V. n9 r' D6 p2 ?7 r
回复 支持 反对

使用道具 举报

5
 楼主| 发表于 2019-7-11 11:49:44 | 只看该作者
Rewrite %{QUERY_STRING}用法
服务器变量%{QUERY_STRING}可以获取查询字符串内容。
链接如下:
  1. http://www.softwhy.com/forum.php?mod=viewthread&tid=1860
复制代码
上面链接中mod=viewthread&tid=1860就是查询字符串部分。
假如要将forum.php?mod=viewthread&tid=1860重定向到article-2094-1.html,可以使用如下代码:
  1. RewriteCond %{QUERY_STRING} ^(.*)tid=1860$ [NC], Z8 u2 a1 G: U& h. |  V
  2. RewriteRule ^forum.php$ article-2094-1.html? [R=301]
复制代码
代码分析如下:
(1).%{QUERY_STRING}可以获取查询字符串,也就是mod=viewthread&tid=1860。
(2).^(.*)tid=1860$用来判断当前URL的tid是否是1860。
(3).最后重定向到article-2094-1.html。
特别说明:rticle-2094-1.html问号不能省略。
% s0 v5 x- K+ a5 u# U

5 X7 k/ Y% C, w  E& [
回复 支持 反对

使用道具 举报

6
 楼主| 发表于 2019-7-11 11:50:25 | 只看该作者
Rewrite %{REQUEST_FILENAME}用法
服务器变量%{REQUEST_FILENAME}可以获取所访问文件的绝对路径。
代码实例如下:
  1. RewriteEngine on
    5 I$ ]8 j; _4 D6 o  @
  2. RewriteCond %{REQUEST_FILENAME} !-f& W7 X9 T" L7 G
  3. #如果当前变量所代表的路径不是一个常规目录
    5 _# n  |) R% W
  4. RewriteCond %{REQUEST_FILENAME} !-d
    ( u# p5 B& S" b9 c/ Z. q; `  A
  5. RewriteRule (.*) /404.htm
复制代码
代码解析如下:
(1).RewriteEngine on开启重写功能。
(2).RewriteCond用来规定重写条件。
(3).%{REQUEST_FILENAME}获取当前所访问文件的绝对路径。
(4).-f用来检测当前值所代表的路径是否是一个常规文件,前面加!,表明不是常规文件则满足要求。
(5).-d用来检测当前值所代表的路径是否是一个常规目录,前面加!,表明不是常规文件则满足要求。
(6).如果既不是常规文件,也不是常规目录,那么就跳转到404页面。

2 R2 W9 f1 K$ c6 ~8 C7 `
, B( k" d! A# J) w
回复 支持 反对

使用道具 举报

7
 楼主| 发表于 2019-7-11 11:52:44 | 只看该作者
Rewrite %{HTTP_USER_AGENT}用法
服务器变量%{HTTP_USER_AGENT}可以获取访客的类型,不仅仅限于浏览器。
代码实例如下:
  1. RewriteEngine on
    0 H/ J( N$ j- e6 L& }' t
  2. RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC]2 G1 a, ]9 P" X- L8 C. J3 f9 a
  3. RewriteRule . antzone.txt [L]
复制代码
代码解析如下:
(1).RewriteEngine on开始重写功能。
(2).RewriteCond用来规定重写条件。
(3).%{HTTP_USER_AGENT}获取访客的类型。
(4).2.0.50727循环的标识码,判断当前访客是不是迅雷;不知道标识码是否准确,请自行查询。
(5).如果是迅雷,则跳转到antzone.txt文本;RewriteRule后的点表示访问任何URL。
  1. RewriteCond %{HTTP_USER_AGENT} ^.*MSIE.*
复制代码
判断是否是IE浏览器。

- g8 `0 u8 M9 b3 ?8 ?! L9 Z4 H% k1 h/ z1 B# g1 U. }
回复 支持 反对

使用道具 举报

8
 楼主| 发表于 2019-7-11 11:53:30 | 只看该作者
Rewrite %{HTTP_HOST}用法
服务器变量%{HTTP_HOST}可以获取访问的域名。
代码实例如下:
  1. RewriteCond %{http_host} ^softwhy.com$ [NC]
    ' H/ h. @6 Y) e. t
  2. RewriteRule ^(.*)$ www.softwhy.com/$1 [R=301]
复制代码
代码解析如下:
(1).RewriteCond用来规定执行后面重写的条件。
(2).%{http_host}是一个服务器变量,可以获取访问的域名,如果域名是"softwhy.com",添加成立。
(3).RewriteRule规定当RewriteCond条件成立索要执行的重写规则。
(4).^(.*)$获取URL除去查询字符串的部分,比如softwhy.com/forum.php?mod=viewthread&tid=1,只会获取forum.php这部分,前面的域名和查询部分都不会被获取。
(5).$1表示^(.*)$小括号所匹配的内容,$2表示第二个小括号所匹配的内容,以此类推。
(6).[R=301]表示原始网址重定向为后来重写的网址。
(7).用softwhy.com/forum.php?mod=viewthread&tid=1访问,softwhy.com/forum.php被www.softwhy.com/forum.php替换,最终是以www.softwhy.com/forum.php?mod=viewthread&tid=1访问页面。

+ ~% U% e! b% {' [9 s* |+ ~; [; @2 S5 E7 r( O' J! }
7 b7 [6 [$ r  j
回复 支持 反对

使用道具 举报

9
 楼主| 发表于 2019-7-11 11:54:24 | 只看该作者
RewriteRule QSA用法
[QSA]用于在URL中截取查询字符串,需要正则表达式小括号生成的子表达式配合。; h& ^6 e4 c) u# t
首先看一段代码实例:
  1. RewriteEngine On
    % n) @8 z4 c9 k3 p3 m# D+ A
  2. RewriteRule /pages/(.+) /page.php?page=$1
复制代码
假如现在访问/pages/88?count=1页面,只会映射到:/page.php?page=88。
因为默认条件下,不会获取到查询字符串部分,(.+)只能匹配到88。
代码修改如下:
  1. RewriteEngine On2 |: |) g( v- ?* D
  2. RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
复制代码
访问/pages/88?count=1页面,将会影射到:/page.php?page=88&count=1,下面做一下分析:
(1).[QSA]和正则表达式的子表达式配合使用。
(2).88?count=1中的问号被更换为&。

4 W! x& r+ ?! l9 @: k0 Q; I8 ^8 K/ R" d- n9 |

; M) ?  v0 O/ _8 \" A
% Q/ M: c$ g; X; A# A& @
回复 支持 反对

使用道具 举报

10
 楼主| 发表于 2019-7-11 11:55:37 | 只看该作者
.htaccess 301重定向
301重定向是永久重定向,告诉搜索引擎,当前网址已经被另一个网址永久替换。
搜索引擎会在一段时间之后,将新的网址靠前展现,原来的URL地址将逐渐失去排名。
代码实例如下:
  1. RewriteCond %{QUERY_STRING} ^(.*)tid=14023$ [NC]% F1 L" O# T$ a4 R9 C' O4 y
  2. RewriteRule ^forum.php$ article-2094-1.html? [R=301]
复制代码
目的是当访问forum.php?mod=viewthread&tid=14023时候,重定向到article-2094-1.html。
代码解析如下:
(1).%{QUERY_STRING}获取URL查询字符串部分(mod=viewthread&tid=14023)。
(2).^(.*)tid=14023$正则表达式,用来和前面的查询字符串匹配,如果成功,则执行下面的规则。
(3).RewriteRule定义具体的重定向规则。
(4).默认情况下,RewriteRule后面的Pattern部分只会获取URL的非查询字符串部分(不包括域名),可以使用[QSA]改变此特点,具体参阅RewriteRule QSA用法一章节。
(5).article-2094-1.html?规定最终要替换的地址,问号很重要,否则会附加原来URL查询字符串部分:
  1. article-2094-1.html?mod=viewthread&tid=14023
复制代码
添加问号就可以剥离查询字符串。

" Y8 P( z% H, b% m( A: t
5 g! ^# ]) i0 ?9 X) b1 j9 ]1 _
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 16:23 , Processed in 0.095022 second(s), 23 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!