我有一个现有的实现,可以为每个用户提供一个网址,例如
https://example.com/FirstUser
https://example.com/SecondUser
在https://example.com之后,他希望客户拥有哪个URL取决于客户 到目前为止,我们已经通过MVC路由及其正常工作进行了处理。
这需要更改为https://FirstUser.example.com
有人可以帮我什么最好的方法吗,我浏览了一些博客,看来我必须添加重定向来重定向URL 从https://example.com/FirstUser到https://FirstUser.example.com
<rule name="redirect" stopProcessing="true">
<match url="users/([_0-9a-z-]+)(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="www.example.net" />
</conditions>
<action type="Redirect" url="http://{R:1}.example.net{R:2}" />
</rule>
https://forums.iis.net/t/1176588.aspx?Rewrite+Subfolder+to+Subdomain
在我的情况下,可能会有用户或控制器名称,因此在“ /”之后可能是userURL或控制器名称,例如https://example.com/Login
我面临的三个问题
第二种解决方案
public class SubdomainRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var host = httpContext.Request.Url.Host;
var index = host.IndexOf(".");
string[] segments = httpContext.Request.Url.PathAndQuery.Split('/');
if (index < 0)
return null;
var subdomain = host.Substring(0, index);
string controller = (segments.Length > 0) ? segments[0] : "Home";
string action = (segments.Length > 1) ? segments[1] : "Index";
var routeData = new RouteData(this, new MvcRouteHandler());
routeData.Values.Add("controller", controller); //Goes to the relevant Controller class
routeData.Values.Add("action", action); //Goes to the relevant action method on the specified Controller
routeData.Values.Add("subdomain", subdomain); //pass subdomain as argument to action method
return routeData;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
//Implement your formating Url formating here
return null;
}
}
我无法处理1和3rd,我该如何区分或编写规则,或者应该在代码中处理它?</ p>
需要专家意见。
谢谢