3

ASP.Net MVC 3 を使用してクライアント用の Web サイトを構築しました。これは、私が構築していない古いサイトを置き換えるために構築され、PHP で作成されました。

新しいウェブサイトにあるほとんどのページは、以前は www.mysite.com/contactus.php だった www.mysite.com/contactus など、元の古いページにマッピングされています。

エラー ログ (Elmah によって記録されたもの) を確認したところ、次のような古いページへのリクエストでエラーが発生しています。

パス '/ContactUs.php' のコントローラーが見つからないか、IController を実装していません。

誰かがこの問題を修正する方法についての推奨事項を持っていますか?理想的には、ユーザーを新しい宛先が存在する場合は新しい宛先にリダイレクトするか、デフォルトでホームページにリダイレクトするだけです。

4

2 に答える 2

4

これは、web.config の IIS 書き換えルールで実行できるはずです。

<rewrite>
  <rules>
    <rule name="Remove .php suffix">
      <match url="^(.*).php$" />
      <action type="Rewrite" url="{R:1}" />
    </rule>
  </rules>
</rewrite>

これにより、着信リクエストの「.php」サフィックスが取り除かれます。詳細については、こちらを参照してください: http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module

于 2013-04-06T20:17:42.093 に答える
2

You can use this route:

routes.MapRoute(
    name: "oldphp",
    url: "{*path}",
    defaults: new { controller = "PhpRedirect", action="Get" },
    constraints: new { path = @".*\.php" });

And then implement PhpRedirectController like this:

public class PhpRedirectController : Controller
{
    [HttpGet]
    public ActionResult Get(string path)
    {
        // TryGetNewUrl should be implemented to perform the
        // mapping, or return null is there is none.
        string newUrl = TryGetNewUrl(path);
        if (newUrl == null)
        {
            // 404 not found
            return new HttpNotFoundResult();
        }
        else
        {
            // 301 moved permanently
            return RedirectPermanent(newUrl);
        }
    }
}
于 2013-04-06T20:21:20.973 に答える