我有这种情况,其中两个网站使用相同的数据(主版和移动版)。因此,在主版本的某些页面中,我有内部链接,如www.domain.com/link1 ... 但是当移动版本使用相同的超链接时,它会将用户上下文定向到主站点,但我需要拦截该请求并处理它,并在移动版本的情况下将用户重定向到我需要的地方。
让我们在www.domain.com/about/strategy.aspx(netforms)页面的网站主版本中说我有一个绝对的网址www.domain.com/services/item.aspx?Id=1256它是好。 但当我在mobile.domain.com/about/strategy(mvc)上获得同一页面时,我想将链接www.domain.com/services/item.aspx?Id=1256更改为mobile.domain.com/services/1256 。问题是我有>拥有绝对网址和内容管理员的10000个网页会疯狂地管理这个问题。
有什么想法吗?
答案 0 :(得分:0)
如果您希望在Web表单中寻找用户友好的URL,那么答案就是URL重写。
您可以找到一些第三方/开源dll来实现此功能。
如果我对你的要求有误,请告诉我。:)
答案 1 :(得分:0)
答案 2 :(得分:0)
我可以考虑两种可能的解决方案,所有这些解决方案都需要javasctipt:
答案 3 :(得分:0)
我已经手动更换了DB中的绝对URL,例如www.domain.com/services/service.aspx?Id=1000使用SQL替换方法成为/services/service.aspx?Id=1000。然后使用Dictionary实现RewritingModule。
public class RewritingModule : IHttpModule
{
/// <summary>
/// Инициализация
/// </summary>
/// <param name="application"></param>
public void Init(HttpApplication application)
{
application.BeginRequest += ApplicationBeginRequest;
}
private static void ApplicationBeginRequest(object sender, EventArgs e)
{
var _httpContext = HttpContext.Current;
foreach (KeyValuePair<string, string> item in DictionaryRewrites)
{
var currentUrl = _httpContext.Request.RawUrl;
string itemKey = item.Key;
if (currentUrl.Equals(itemKey, StringComparison.OrdinalIgnoreCase))
{
Process301Redirect(_httpContext, item.Value);
break;
}
}
}
private static Dictionary<string, string> DictionaryRewrites = new Dictionary<string, string>()
{
{ "/Services/Pavilions/Item.aspx?ItemID=5", "/exhibitions/pavillions/3/hall4" },
{ "/Services/ConferenceHalls/Item.aspx?ItemID=10127", "/conferences/conferencehalls/1/conferencehall1" }
};
/// <summary>
/// 301 Redirect
/// </summary>
/// <param name="context"></param>
/// <param name="toRedirect"></param>
private static void Process301Redirect(HttpContext context, string toRedirect)
{
var _localizationSettings = EngineContext.Current.Resolve<LocalizationSettings>();
var _workContext = EngineContext.Current.Resolve<IWorkContext>();
var _httpContext = HttpContext.Current;
var _webHelper = EngineContext.Current.Resolve<IWebHelper>();
string applicationPath = _httpContext.Request.ApplicationPath;
if (_localizationSettings.SeoFriendlyUrlsForLanguagesEnabled)
{
toRedirect = toRedirect.AddLanguageSeoCodeToRawUrl(applicationPath, _workContext.WorkingLanguage);
}
string str = _webHelper.GetApplicationLocation() + toRedirect;
context.Response.AddHeader("Location", str);
context.Response.Status = "301 Moved Permanently";
}
public void Dispose()
{
//clean-up code here.
}
}