【问题标题】:Creating Application/Virtual Directories in a site that POINT to that site to simulate multiple sites. Good idea?在指向该站点的站点中创建应用程序/虚拟目录以模拟多个站点。好主意?
【发布时间】:2010-11-15 23:00:43
【问题描述】:

我们需要一种表达方式

www.site.com/india www.site.com/asia www.site.com/usa 等等……

但是我们希望所有这些请求都指向 www.site.com,而不必为每种类型的站点物理创建文件和目录...所以如果我只是创建一个虚拟目录 (www.site.com /india) 并将其指向 www.site.com... 然后我想我可以查看 URL 并相应地设置一些参数/文本/图像来填写模板...

这有意义吗?还是 web.configs 有问题?或者更好的方法

【问题讨论】:

  • 我应该提到..这是与 Ektron CMS 一起使用的。 Ektron CMS 是一个 Web 表单 ASP.NET... 那么将 Web 表单应用程序更改为使用路由有多容易?我想知道仅使用 MVC 中的路由方面而不使用 MVC 可能并不复杂?
  • oops.. 我刚刚注意到您提供了一个在 webforms 中路由的示例

标签: asp.net iis redirect


【解决方案1】:

我鼓励您考虑路由,如下所示:http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

这里重复的给定示例是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

通过类似的方法,你可以只提取你需要的信息


第一个示例是 MVC 路由,要进行网络表单路由,您应该看这里 http://msdn.microsoft.com/en-us/library/cc668202(VS.90).aspx,这是一个(非常有限的)示例:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add("BikeSaleRoute", new Route
    (
       "bikes/sale", 
       new CustomRouteHandler("~/Contoso/Products/Details.aspx")
    ));
}

使用他们在代码中构建的自定义路由处理程序。一旦你掌握了它的窍门,Routehandler 就很容易使用。它们让你更有表现力。

【讨论】:

  • 拒绝复制粘贴 ASP.NET MVC 应用程序的默认路由配置,而不对有关经典 ASP.NET WebForms 的原始问题进行任何调整。
  • @drachenstern,他确实做到了。你不看标签吗?他们信息量很大。这个网站上有asp.net 标签和asp.net-mvc 标签,它们完全不同。 OP 正确标记了他的问题。
  • @punkouter 确实注意到我的帖子恢复为 MVC 而不是网络表单。有很多方法可以在 web 表单中进行路由,但从长远来看,MVC 风格会更容易维护,至少根据流行理论 ;)
  • @Punkouter ~ 在您学习 SO 社区时给您的注意事项:在用户名(至少 5 或 6 个字母)前加上 @ 符号,就像我为了通知该用户所做的那样你正在和他们交谈。它也显示在左上角的 SuperMultiCollider 上,以便于通知。
【解决方案2】:

我认为您会发现,在没有不同的 web.config 指向您的本地化文件的情况下以五种方式本地化同一个网站会很困难。

我要做的是让 www.site.com 的索引自动发现客户的位置或询问他们想要的网站版本。然后,将它们引用到该站点的虚拟目录下的 default.aspx,该目录使用一组通用的自定义 Web 控件,根据该站点的 web.config 中引用的资源文件进行本地化。这样,您只需要复制站点骨架,它可以像 index.aspx 一样小。

如果该网站主要是 aspxs,这将无法正常工作。在这种情况下,我会像以前一样进行网站选择,但使用查询字符串来跟踪客户端位置并因此进行本地化。这仍然可以让您调出正确的本地化设置。

【讨论】:

  • 你是说虚拟目录应该指向站点的唯一副本,每个副本都有一个单独的 web.config? DRY怎么了?如果所有 VD 都指向相同的绝对路径,您打算如何应用不同的 Web 配置?
  • 我没有说这两件事。 VD 将指向站点的子目录,每个子目录都有自己的 Global.asax 和 web.config,根据 VD 指示的文化将它们指向特定于站点的本地化。他们可能需要自己的 default.aspx 文件,但我怀疑他们甚至需要那个。
  • 啊,现在我明白了。我不得不承认这不是我的第一种方法,因为您仍然需要每个国家/地区的目录,这似乎有点笨拙-尤其是因为某些操作系统存在目录中最大条目数的问题。也就是说,如果他坚持使用 ASP.Net(非 MVC),它可能和其他任何建议一样好,所以 +1
  • 总共只有大约 15 个 VD
【解决方案3】:

不,请答应我不要为世界上每个国家/地区创建虚拟目录。而是结帐routing。这里有一些other examples

【讨论】:

  • 您的other examples 是谷歌搜索。严重地?对我投反对票,对不起。
  • @drachenstern,这不仅仅是一个谷歌搜索,它是一个带有适当关键字(网络表单 + 路由)的辅助谷歌搜索,它将指导 OP 快速找到解决问题的方法。
  • @drachenstern,你的傲慢开始惹恼我了。将直接忽略此线程。
【解决方案4】:

如果您尚未编写站点,请考虑使用路由或更好的 MVC。您绝对不应该创建多个虚拟目录 - 维护将是一场噩梦

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2023-03-28
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多