重写规则和the_request

时间:2014-10-18 06:52:14

标签: apache mod-rewrite rewrite request-uri

如何从search/2重写index.php?search="x"&&searc_by="y"&page_no=2

如果我没错,%REQUEST_URIsearch/2,对吧?在这种情况下,%THE_REQUEST也是如此。

search/2链接所在的页面将被重写为home_page。

1 个答案:

答案 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=2QSA(查询字符串追加)标志将现有查询字符串附加到重写的查询字符串。最终得到/index.php?search=x&search_by=y&page_no=2L标志停止了这一轮“重写”。这只是一个最优化的事情。