如何将其他URL变量添加到已使用mod_rewrite重写的URL中

时间:2011-09-03 20:57:06

标签: .htaccess mod-rewrite get

是否有人知道是否可以将其他变量放入您正在使用mod_rewrite的URL中,以基本上切入变量。

例如,如果我有URL:

website.com/post/53/post-title/

我正在使用mod_rewrite将其转换为:

website.com/post.php?postid=53

是否有优雅的方式将其他变量放入“预先重写”的网址并将其保留在我的post.php脚本中?

I.E。,如果我创建如下链接怎么办?

website.com/post/53/post-title/?anothervar=6

到目前为止,似乎我的mod_rewrite代码只是丢弃了额外的变量并将URL发送到post.php脚本,如下所示:

website.com/post.php?postid=53

我知道我可以使用$_SERVER['REQUEST_URI']在我的php脚本(AKA website.com/post/53/post-title/?anothervar=6)中获取原始URL,然后再通过mod_rewrite重写,然后只需将字符串删除即可添加变量,但我只是想知道是否有一个更优雅的解决方案,只使用mod_rewrite。

2 个答案:

答案 0 :(得分:14)

您还可以使用%{QUERY_STRING}将原始查询字符串传递给新网址。或者按照你的意愿使用它,例如。

RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R]

答案 1 :(得分:12)

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

“qsappend | QSA”

使用,QSA使mod_rewrite在重写时正确“合并”其他参数。

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

这将为用户提出的任何请求添加“page = $ 1”。

PS。虽然小心,因为mod_rewrite会很高兴地覆盖“页面”,尽管用户指定它。我不知道这件事。