重写查询字符串

Posted

技术标签:

【中文标题】重写查询字符串【英文标题】:Rewrite Query String 【发布时间】:2010-11-17 17:01:41 【问题描述】:

我有这个网址:

oldsite.com/profile.php?uid=10

我想改写成:

newsite.com/utenti/10

我该怎么做?

更新:我写了这个:

RewriteCond %QUERY_STRING ^uid=([0-9]+)$
RewriteRule ^profile\.php$ http://www.newsite.com/utenti/$1 [R=301,L]

但是 $1 匹配完整的查询字符串,而不仅仅是用户 ID。

【问题讨论】:

【参考方案1】:

要在重写条件中使用匹配项,您必须使用 %1 而不是 $1。此外,如果您希望删除查询字符串的其余部分,您必须附加一个 ?

RewriteCond %QUERY_STRING ^uid=([0-9]+)$ RewriteRule ^profile\.php$ http://www.newsite.com/utenti/%1? [R=301,L]

【讨论】:

【参考方案2】:

$n 仅指 RewriteRule 指令的匹配项。使用%n 来引用对应的RewriteCond 指令的匹配项。

此外,您需要为替换指定一个空查询。否则将使用原始查询。

如果您希望查询的其余部分保持不变,请使用以下规则:

RewriteCond %QUERY_STRING ^(([^&]*&)*)uid=([0-9]+)(.*)
RewriteRule ^profile\.php$ http://new.example.com/utenti/%3?%1%4 [R=301,L]

【讨论】:

以上是关于重写查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

将查询字符串重写为另一个查询字符串

重写查询字符串

Mod Rewrite + QSA:重写目标和查询字符串中的相同查询字符串参数 - 可以强制使用目标吗?

PHP中查询字符串的HTACCESS重写规则

Apache2重写查询字符串转义两次

301 Htaccess 重写规则查询字符串