Как я могу иметь asp.net рядом с php? - PullRequest
1 голос
/ 03 января 2012

У меня есть сайт asp.net mvc3.Он заменил старый сайт php.У многих людей есть части сайта, добавленные в закладки в отношении местоположений .php, и я хотел бы добавить их обратно на сайт asp.net как простые пересылки в новое местоположение.Так, например, mysite / product.php будет перенаправлен на mysite / usermap / product.cshtml.Когда я вставляю product.php в каталог и использую привязку к нему, мне предлагается открыть его с помощью определенной программы или сохранить.Есть идеи?

Ответы [ 3 ]

4 голосов
/ 03 января 2012

Вы можете создать небольшой контроллер перенаправления и добавить маршрут, соответствующий чему-то вроде mysite/{id}.php.

Тогда в этом контроллере

public ActionResult Index(string id)
{
    return RedirectToActionPermanent("Product", "YourExistingController", id);
}

редактировать

В вашем файле global.asax.cs

public void RegisterRoutes(RouteCollection routes)
{
    // you likely already have this line
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // assuming you have a route like this for your existing controllers.
    // I prefixed this route with "mysite/usermap" because you use that in your example in the question
    routes.MapRoute(
        "Default",
        "mysite/usermap/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    // route to match old urls
    routes.MapRoute(
        "OldUrls",
        "mysite/{oldpath}.php",
        new { Controller = "OldPathRedirection", action = "PerformRedirection", oldpath = "" }
    );
}

Тогда вы бы определили OldPathRedirectionController (Controllers/OldPathRedirectionController.cs наиболее вероятно)

public class OldPathRedirectionController : Controller
{
    // probably shouldn't just have this hard coded here for production use.
    // maps product.php -> ProductController, someotherfile.php -> HomeController.
    private Dictionary<string, string> controllerMap = new Dictionary<string, string>()
    {
        { "product", "Product" },
        { "someotherfile", "Home" }
    };

    // This will just call the Index action on the found controller.
    public ActionResult PerformRedirection(string oldpath)
    {
        if (!string.IsNullOrEmpty(oldpath) && controllerMap.ContainsKey(oldpath))
        {
            return RedirectToActionPermanent("Index", controllerMap[oldpath]);
        }
        else
        {
            // this is an error state. oldpath wasn't in our map of old php files to new controllers
            return HttpNotFoundResult();
        }
    }
}

Я немного убрал это от первоначальной рекомендации. Надеюсь, этого будет достаточно, чтобы вы начали! Очевидные изменения заключаются в том, чтобы не жестко закодировать карту имен файлов php в контроллерах mvc и, возможно, изменить маршрут, чтобы разрешить дополнительные параметры, если вам это требуется.

2 голосов
/ 03 января 2012

Если вы используете IIS7, модуль перезаписи Url отлично подходит.Вот эта страница: http://www.iis.net/download/urlrewrite

Когда я вставляю product.php в каталог и использую для него ссылку на ссылку, мне предлагается открыть его с помощью определенной программы или сохранить.Есть идеи?

Обновлять сопоставления обработчиков вручную.Однако я уверен, что когда вы установите PHP для IIS (http://php.iis.net/) он сделает это за вас.

1 голос
/ 03 января 2012

Установите PHP в IIS, используя этот сайт.http://php.iis.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...