0

2 つの Web サイトが同じデータ (メイン バージョンとモバイル) を使用している状況があります。したがって、メイン バージョンの一部のページには、www.domain.com/link1 のような内部リンクがあります。しかし、モバイル バージョンが同じハイパーリンクを使用すると、ユーザー コンテキストがメイン サイトに誘導されますが、その要求をインターセプトして処理する必要があります。モバイル版の場合に必要な場所にユーザーをリダイレクトします。

www.domain.com/about/strategy.aspx (webforms) ページのサイトのメイン バージョンで、www.domain.com/services/item.aspx?Id=1256 への絶対 URL があり、問題ないとしましょう。しかし、mobile.domain.com/about/strategy (mvc) で同じページを取得したときに、リンク www.domain.com/services/item.aspx?Id=1256 を mobile.domain.com/services/1256 に変更したい. 問題は、絶対 URL を持つページが 10000 以上あり、コンテンツ マネージャーがこの問題の管理に夢中になることです。

何か案が?

4

4 に答える 4

0

SQL 置換メソッドを使用して、www.domain.com/services/service.aspx?Id=1000 が /services/service.aspx?Id=1000 になるように、DB の絶対 URL を手動で置き換えました。次に、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.
        }
    }
于 2013-03-22T05:16:25.073 に答える
0

この記事をご覧ください:

http://www.iis.net/learn/extensions/url-rewrite-module/developing-a-custom-rewrite-provider-for-url-rewrite-module

于 2013-03-21T11:28:11.547 に答える
0

おそらく、Web フォームで使いやすい URL を探しているなら、その答えは URL Rewriting です。

この機能用のサード パーティ/オープン ソース DLL を見つけることができます。

私があなたが必要とするものに間違っていたら教えてください.:)

于 2013-03-21T11:27:11.397 に答える
0

私は2つの可能な解決策について考えることができます.それらはすべてjavasctiptを必要とします:

  1. ページのURLをオーバーライドするjs関数があります
  2. クリックをキャッチしてユーザーをサーバーアクションに転送するjsハンドラーがあり、そこでユーザーを必要な場所にリダイレクトします。
于 2013-03-21T11:30:41.813 に答える