2011-09-03 119 views
6

没有任何人有任何想法,如果有可能把其他变量到您使用mod_rewrite基本上砍成变量的URL。如何添加额外的URL变量,一个URL的mod_rewrite已经改写

举例来说,如果我有网址:

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

,我使用mod_rewrite把它变成:

website.com/post.php?postid=53 

是存在的,优雅的方式把额外变量进入“预-rewritten“URL并将其保存为我的post.php脚本?

IE,如果我创造什么类似下面的链接:

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

到目前为止,好像我的mod_rewrite代码仅仅抛出了额外的变量和发送的URL post.php这样的脚本:

website.com/post.php?postid=53 

我知道我可以使用$_SERVER['REQUEST_URI']来获得原始URL在我的PHP脚本(AKA website.com/post/53/post-title/?anothervar=6)以前被通过mod_rewrite的重写,然后就砍了字符串来获取可变添加,但我只是想知道是否有一个更优雅的解决方案,只使用mod_rewrite。

回答

13

你也可以使用%{QUERY_STRING}到原来的查询字符串传递到新的URL。或者如你所希望的那样使用它。

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

致谢,解决了这个问题。重写规则结束时的[R]是什么?在我的任何重写规则行结束时,我都没有。 – billmalarky

+0

谢谢,我添加了这条评论,因为我忘了在上面的那个通知你:你的重写规则末尾是什么[R]?在我的任何重写规则行结束时,我都没有。 – billmalarky

+0

这里是最好的答案。谢谢你 – Joshua

11

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会很高兴地覆盖“页面”,尽管如果用户指定它。没有办法绕过它,我知道了。

+0

[QSA]帮我解决了这个问题。我有一个页面(example.com/page)如果您访问西班牙的链接,它(example.com/spanish/pagina),其被翻译成西班牙语这是改写到example.com/page?language=spanish。我试图追加这是通过AJAX发送一个额外的GET变量/西班牙语/ pagina并一直得到HTML网页回来(在同一页的Ajax调用,但只执行一个PHP脚本发送JSON数据,而不是生成的html内容)。任何人做这样的事情应该警惕使用QSA现在 – OzzyTheGiant