Apache2 如何以正确的方式使用附加查询字符串进行virtualhost重定向

Apache2 如何以正确的方式使用附加查询字符串进行virtualhost重定向,apache2,query-string,virtualhost,url-redirection,Apache2,Query String,Virtualhost,Url Redirection,我对我在生产中需要执行的一些重定向规则感到困惑。我已经在stackoverflow中看到了很多示例,它们构建了我关于重定向的一点知识。然而,除了重定向到带有精确查询字符串的新url之外,我没有任何特殊条件,不管它是如何形成的附加到它的 由于它是在生产中,我有时间尝试和捕捉,所以我希望尽可能避免错误。以下是我认为我应该做的: <VirtualHost X.X.X.X:80> ServerName mypoductionserver.com ServerAlias cs.mypr

我对我在
生产中需要执行的一些
重定向
规则感到困惑。我已经在stackoverflow中看到了很多示例,它们构建了我关于重定向的一点知识。然而,除了重定向到带有
精确查询字符串的新url之外,我没有任何特殊条件,不管它是如何形成的
附加到它的

由于它是在生产中,我有时间尝试和捕捉,所以我希望尽可能避免错误。以下是我认为我应该做的:

<VirtualHost X.X.X.X:80>
  ServerName mypoductionserver.com
  ServerAlias cs.myproductionserver.com
  LogLevel warn
  ErrorLog  /var/log/apache2/productionerror.log

  CustomLog /var/log/apache2/productionaccess.log combined

  RewriteCond %{QUERY_STRING} .
  RewriteRule (.*) http://www.newproductionserver.com/? [R=301,L] 
</VirtualHost>

ServerName mypoductionserver.com
ServerAlias cs.myproductionserver.com
日志级别警告
ErrorLog/var/log/apache2/productionerror.log
CustomLog/var/log/apache2/productionaccess.log组合
重写cond%{QUERY_STRING}。
重写规则(.*)http://www.newproductionserver.com/? [R=301,L]

感谢您的帮助首先,您的RewriteCond说明您的查询字符串应该由一个或多个字符组成。如果希望重定向在没有查询字符串的情况下仍然有效,只需删除该条件即可。否则,您可能只需要将其设为“.+”,以说明它至少应该是一个字符

其次,
重写规则
中有两个错误

首先,使用
(.*)
可以捕获路径,但不能将其添加到新字符串中

其次,通过使用
结束规则,您正在删除原始查询字符串

规则应该如下所示:

RewriteRule (.*) http://www.newproductionserver.com/$1 [R=301,L] 
$1
表示“使用第一个括号中捕获的内容”,删除
表示“不要替换查询字符串”

此外,为了使任何重写都能正常工作,您需要首先激活mod_rewrite:

RewriteEngine On