我有一个asp.net mvc3网站。它取代了旧的php网站。很多人都将网站的部分内容添加到.php位置的书签中,我想将这些内容添加回asp.net网站,简单地转发到新位置。所以mysite / product.php会重定向到mysite / usermap / product.cshtml。当我将product.php插入目录并使用锚点href时,系统会提示我用某个程序打开它或保存它。有什么想法吗?
答案 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 = "" }
);
}
然后您将定义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控制器,如果需要,可能会改变路径以允许额外的参数。
答案 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/