如何从search/2
重写index.php?search="x"&&searc_by="y"&page_no=2
?
如果我没错,%REQUEST_URI
是search/2
,对吧?在这种情况下,%THE_REQUEST
也是如此。
search/2
链接所在的页面将被重写为home_page。
答案 0 :(得分:0)
%{REQUEST_URI}
和%{THE_REQUEST}
是mod_rewrite中的变量。这些变量包含以下内容:
%{REQUEST_URI}
将包含主机名后面和查询字符串之前的所有内容。在网址http://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
形式的东西。由于在一个此类请求的生命周期内对服务器发出的请求是静态的,因此在进行重写时此变量不会更改。因此,在某些情况下,如果外部请求包含某些内容,您只想重写它。它通常用于防止无限循环发生。可以找到完整的变量列表here。
在您的情况下,您将获得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
。 QSA
(查询字符串追加)标志将现有查询字符串附加到重写的查询字符串。最终得到/index.php?search=x&search_by=y&page_no=2
。 L
标志停止了这一轮“重写”。这只是一个最优化的事情。