%{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标志停止了这一“轮”重写。这只是一个优化的事情。