如何使用htaccess rewrite将domain.com/go/?custom_ref=001更改为domain.com/go/?ref=001?

时间:2012-11-13 19:24:32

标签: .htaccess mod-rewrite url-rewriting url-rewrite-module

如何更改:

domain.com/go/?custom_ref=001

进入

domain.com/go/?ref=001

请使用htaccess重写吗?

1 个答案:

答案 0 :(得分:0)

不是特别灵活,但这适用于您的确切问题:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^ref=([0-9]*)
RewriteRule ^go/$ go/?custom_ref=%1 [QSA]

请注意,对于要匹配的条件,ref必须在查询字符串中排在第一位。规则上的[QSA](查询字符串追加)标志将保留原始查询字符串,因此传递的其他值不会丢失。

另请注意,此代码假定.htaccess文件位于文档根目录中。如果文件位于其他位置,则需要调整RewriteRule。例如,当.htaccess文件放在/go/.htaccess时,将其更改为以下内容将起作用:

RewriteRule . ?custom_ref=%1 [QSA]

如果您希望这更灵活,请查看对this question的回复 - 它们包含更改查询字符串中的单个变量并保留其他所有内容的语法。


修改

要在查询字符串中将custom_ref替换为ref,您可以使用以下内容重定向包含custom_ref变量的请求。在RewriteEngine On和其他规则之间添加:

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)custom_ref=(.*)
RewriteRule ^go/$ /go/?%1ref=%3 [R=301,L]

这更像是一个补丁,而不是一个解决方案。如果您可以访问代码,我建议改为修改变量名称。