Apache Rewrite - 将部分查询字符串放在替换字符串中

时间:2010-06-16 12:58:19

标签: apache mod-rewrite rewrite

我想改写:

www.example.com/file.html?username=john&number=1234

要:

www.example.com/users/john

但我无法弄清楚如何从查询字符串中提取“用户名”值。我整个早上一直在谷歌上搜索官方文档,但没有运气。我需要通过重写来解决这个问题,而不是更改应用程序。

任何帮助非常感谢! Rangi

2 个答案:

答案 0 :(得分:0)

RewriteCond %{QUERY_STRING}  username=([^&]+)
RewriteRule /?file.html /users/%1 

转到http://example.com/file.html?username=foobar会将您重定向到http://example.com/users/foobar,如果您需要外部重定向,请在最后添加[R]

大多数情况下,重写是以相反的方式完成的,很少见到想要在“外部”网址中的查询字符串,但内部没有它们的人。或者我向后理解你的问题了吗?

答案 1 :(得分:0)

好的,我已经用两条规则解决了这个问题,虽然不确定我是不是最好的方式。

RewriteRule ^file.html xxx/%{QUERY_STRING} [L]
RewriteRule ^xxx/[^=]*=([^&]*) /users$1 [R=301,L]

第一条规则使查询字符串成为URL的一部分,因此第二条规则可以看到它,因此匹配并重写它的一部分。我使用“xxx”但它可以是任何东西。