1

我想重写所有的 URL,比如

www.example.com/pages/foo

进入

www.example.com/go.php?q=foo

我通过使用规则 belove 做到了,但我也无法通过查询。

RewriteRule     ^pages/(.*)$            /go.php?q=$1  [L]

我想重写:

www.example.com/pages/foo?bar=baz

进入

www.example.com/go.php?q=foo&bar=baz

我怎样才能做到这一点?

4

1 回答 1

2

找到了!

网址:/pages/foo?bar=baz

RewriteRule ^pages/(.*) /go.php?q=$1 [QSA,L,R]

变成:/go.php?q=foo&bar=baz

正在发生的事情是:

  • 捕获斜线后的所有内容并将其存储在 $1 中
  • 在 /go.php?q= 请求资源并添加我们捕获的值
  • [R] 更改显示的 URL(否则我们会看到 URL 没有变化,尽管我们会点击正确的页面)
  • QSA 表示 Query String Append,这是缺少的链接 :)
  • [L] 表示“最后一条规则”:不要寻找更多匹配项

希望有帮助!

有用的网址:


第二种选择是:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^pages/(.*) /go.php?q=$1&%1 [R]
  • 将整个查询字符串捕获为%1
  • 将 /path/ 之后的 URL 捕获为$1
  • 组装替换字符串并重写 URL

"除了纯文本之外,Substition 字符串还可以包括

  • 对 RewriteRule 模式的反向引用 ($N)
  • 对最后匹配的 RewriteCond 模式的反向引用 (%N)"

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule

于 2013-01-30T12:36:22.827 回答