次のリダイレクトを実行しようとしています。
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"
そして、内部サーバー エラーが発生します。このコードに何か問題があることがわかりますか?
基本的に、「/」などの不正な文字がいくつかあります
各パラメータの値をエンコードする必要があります。使用しているプログラミング言語でそれを行う方法はわかりませんが、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);
}
エンコードされたパラメータは次のようになります
board=_master&action=opentopic&topic=4&forum=The_Forum%22+%22%2fcontent%2f1998-09-10%2f1004%2fwet-h2s---hic-concern---ae-amp
ただし、ブラウザのアドレスバーにはパラメータが保持されます
"?board=_master&action=opentopic&topic=4&forum=The_Forum"+"%2fcontent%2f1998-09-10%2f1004%2fwet-h2s---hic-concern---ae-amp"
RewriteRule を覚えておいてください:
代わりに、この書き換えルールを使用してください。
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+cgi-bin/teemz/teemz\.cgi\?board=_master&action=opentopic&topic=4&forum=The_Forum [NC]
RewriteRule ^ /content/1998-09-10/1004/wet-h2s---hic-concern---ae-amp [L,R=301]