htaccess 301使用复杂URL重定向生成内部服务器错误

时间:2013-01-02 08:27:25

标签: apache .htaccess redirect

我正在尝试执行以下重定向:

Redirect 301 "/cgi-bin/teemz/teemz.cgi?board=_master&action=opentopic&topic=4&forum=The_Forum" "/content/1998-09-10/1004/wet-h2s---hic-concern---ae-amp"

导致内部服务器错误。你们有没有看到这段代码有什么问题?

2 个答案:

答案 0 :(得分:0)

基本上你有一些非法字符,例如“/

您需要对每个参数的值进行编码。我不知道你怎么能用你正在使用的编程语言那样做,但在ASP.NET MVC中我们有这个库。

 public ActionResult Index2()
    {
        var sb = new StringBuilder();
        foreach (var key in Request.QueryString.AllKeys)
            sb.AppendFormat("&{0}={1}", key, HttpUtility.UrlEncode(Request.QueryString[key]));
        var parameters = sb.Remove(0, 1);
        const string rawurl = "http://localhost:49534/home?";
        var url = string.Format("{0}{1}", rawurl, sb);
        return Redirect(url);
    }

编码参数将变为

板= _master&安培;行动= opentopic&安培;主题= 4和;版面= The_Forum%22 +%22%2fcontent%2f1998-09-10%2f1004%2fwet-H2S --- HIC-关注--- AE-安培< / p>

但您的浏览器地址栏将保留参数

“板= _master&安培;行动= opentopic&安培;主题= 4和;版面= The_Forum” + “%2fcontent%2f1998-09-10%2f1004%2fwet-H2S --- HIC-关注--- AE-安培”

答案 1 :(得分:0)

记住RewriteRule:

  • 与前导斜杠不匹配
  • 与查询字符串
  • 不匹配

请改用此重写规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+cgi-bin/teemz/teemz\.cgi\?board=_master&action=opentopic&topic=4&forum=The_Fo‌​rum [NC]
RewriteRule ^ /content/1998-09-10/1004/wet-h2s---hic-concern---ae-amp [L,R=301]