如何以正确的方式使用附加的querystring进行虚拟主机重定向



我对一些redirect规则感到困惑,我需要在production中做。我已经看过a lot of examples in stackoverflow了,他们已经建立了一些关于重定向的knowledge。然而,我没有任何特殊的条件,除了重定向到一个新的url与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>

谢谢你的帮助

首先,RewriteCond表示查询字符串应该由一个或多个字符组成。如果您希望重定向即使没有查询字符串也能工作,只需删除条件。否则,你可能只是想让它"。+'来明确它至少应该是一个字符。

第二,RewriteRule中有两个错误。

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

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

规则应该是这样的:

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

$1的意思是"使用你在第一个括号中捕获的东西",删除?的意思是"不要替换查询字符串"。

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

RewriteEngine On

最新更新