我怎样才能将php与asp.net并排?

时间:2012-01-02 21:13:11

标签: php asp.net-mvc-3

我有一个asp.net mvc3网站。它取代了旧的php网站。很多人都将网站的部分内容添加到.php位置的书签中,我想将这些内容添加回asp.net网站,简单地转发到新位置。所以mysite / product.php会重定向到mysite / usermap / product.cshtml。当我将product.php插入目录并使用锚点href时,系统会提示我用某个程序打开它或保存它。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您可以创建一个小的重定向控制器,并添加一个匹配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 = "" }
    );
}

然后您将定义OldPathRedirectionControllerControllers/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控制器,如果需要,可能会改变路径以允许额外的参数。

答案 1 :(得分:2)

如果您使用的是IIS7,则Url重写模块非常棒。这是页面:http://www.iis.net/download/urlrewrite

  

当我将product.php插入目录并使用锚点href时,系统会提示我使用某个程序打开它或保存它。有什么想法吗?

手动更新处理程序映射。但是我很确定当你为IIS安装PHP时(http://php.iis.net/)它会为你做这件事。

答案 2 :(得分:1)

使用此站点将PHP安装到IIS中。 http://php.iis.net/