%{REQUEST_URI}
并且%{THE_REQUEST}
是 mod_rewrite 中的变量。这些变量包含以下内容:
%{REQUEST_URI}
将包含主机名后面和查询字符串之前的所有内容。在 urlhttp://www.example.com/its/a/scary/polarbear?truth=false
中,%{REQUEST_URI}
将包含/its/a/scary/polarbear
. 此变量在每次重写后更新。
%{THE_REQUEST}
是一个变量,包含向服务器发出的整个请求。这是形式的东西GET /its/a/scary/polarbear?truth=false HTTP/1.1
。由于向服务器发出的请求在一个此类请求的生命周期内是静态的,因此在进行重写时此变量不会更改。因此,在您只想在外部请求包含某些内容时重写的某些情况下很有帮助。它通常用于防止发生无限循环。
可以在此处找到完整的变量列表。
在您的情况下,您将有一个指向search/2?search=x&search_by=y
. 您想在内部将其重写为index.php?search=x&search_by=y&page_no=2
. 您可以使用以下规则执行此操作:
RewriteRule ^search/([0-9]+)$ /index.php?page_no=$1 [QSA,L]
第一个参数匹配传入的外部请求。然后将其重写为/index.php?page_no=2
. (query string append) 标志将现有的QSA
查询字符串附加到重写的查询字符串。你最终得到/index.php?search=x&search_by=y&page_no=2
. 该L
标志停止了这一“轮”重写。这只是一个优化的事情。