如何使用追加查询字符串的方式进行虚拟主机重定向

时间:2013-04-23 09:13:20

标签: apache2 query-string virtualhost url-redirection

我对redirect中需要做的一些production规则感到困惑。我已经看过a lot of examples in stackoverflow了,他们已经建立了一些关于重定向的knowledge。但是我没有任何特殊条件,除了重定向到exact query string的新网址,无论它如何形成appended

由于它正在制作中,我确实有尝试和捕捉的闲暇,所以我想尽可能避免错误。这就是我认为应该做的事情:

<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>

帮助

1 个答案:

答案 0 :(得分:2)

首先,您的RewriteCond表示您的查询字符串应包含一个或多个字符。如果您希望重定向工作,即使没有查询字符串,只需删除条件即可。否则,你可能只想把它变成'。+'来澄清它至少应该是一个字符。

其次,RewriteRule中有两个错误。

首先,您的(.*)正在捕捉路径 - 但您永远不会将其添加到新字符串中。

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

规则应该如下:

RewriteRule (.*) http://www.newproductionserver.com/$1 [R=301,L] 

$1表示“使用您在第一个括号中捕获的内容”,删除?表示“并且不替换查询字符串”。

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

RewriteEngine On