バリエーション ルート ジャンプ ロジックをカスタマイズする

最終更新日: 2010年11月12日

適用対象: SharePoint Server 2010

Microsoft SharePoint Server 2010 にサイト コレクションを準備し、バリエーションを構成するとき、以下のことが実行されます。

  • マスター ページおよびページ レイアウト ギャラリーの VariationRootPageLayout.aspx ページ レイアウト ファイルを使用して、VariationRoot という名前のバリエーション ホーム サイトにページを作成します。

  • バリエーション ホーム サイトの既定のウェルカム ページを VariationRoot ページに置き換えます。

バリエーション ホーム サイトを参照すると、SharePoint Server 2010 はサイトの WelcomePage プロパティを検索し、VariationRoot ページを実行します。このページは VariationRootPageLayout.aspx に基づいているので、ページ レイアウト ファイルを実行します。VariationRootPageLayout ページ レイアウトには、VariationsRootLanding.ascx と呼ばれるファイルへの参照と VariationsRootLanding.ascx ファイルで定義された 1 つのユーザー コントロールが含まれています。ページ レイアウトは、VariationsRootLanding.ascx ファイル内のロジックを実行し、ユーザーをバリエーション サイトにリダイレクトします。

VariationsRootLanding.ascx ファイルで使用される既定のロジックは、ブラウザーの accept lang または現在のドキュメントが使用できる言語コードの配列に一致するバリエーション サイトにユーザーをリダイレクトします。VariationsRootLanding.ascx ファイルは、パス \<Program Files>\Common Files\Microsoft Shared Debug\Web Server Extensions\14\Template\ControlTemplates に定義されています。

既定のバリエーション ルート ジャンプ先ロジックで、accept lang に基づかないバリエーション サイトにユーザーをリダイレクトする場合は、次の 3 つの方法のいずれかにより実行することができます。それぞれのオプションには独自の長所と短所があるので、使用する方法を決定する前に慎重に検討する必要があります。

  • VariationsRootLanding.ascx ファイルを直接編集します。

    これはロジックを編集する最も簡単な方法です。フロントエンド Web サーバー ファイル システムで、必要に応じて VariationsRootLanding.ascx ファイル内のロジックを直接編集します。

    注意

    各フロントエンド Web サーバー コンピュータの VariationsRootLanding.ascx ファイルを更新する必要があります。 サーバー ファームのすべてのサイト コレクションが、指定したカスタム バリエーション ルート ジャンプ ロジックに関連付けられています。

  • VariationsRootLanding.ascx ファイルの内容をマスター ページおよびページ レイアウト ギャラリーのページ レイアウトにコピーします。

    このアプローチを実施する方法の詳細については、最初の手順「VariationsRootLanding.ascx ファイルの内容をページ レイアウトにコピーするには」を参照してください。前のアプローチと同様、このアプローチでも DLL のコンパイルおよび展開を行わずに、直接編集によって迅速にカスタマイズを実行できます。また、各サイト コレクションは独自のページ レイアウトのセットを使用するので、このアプローチではサイト コレクション レベルでバリエーション ルート ジャンプ ロジックのカスタマイズを実行できます。このプロセスを完了するには、各フロントエンド Web サーバー コンピューターの web.config ファイルを更新する必要があります。

    注意注意

    VariationRootPageLayout.aspx ファイルの AllowCompilation フラグの設定は慎重に行ってください。インライン コードの使用は、第三者が悪意のあるコードをページに挿入する可能性があることを意味します。

  • プリコンパイル済みアセンブリを作成します。

    このアプローチを実施する方法の詳細については、2 番目の手順「プリコンパイル済みアセンブリを作成するには」を参照してください。このアプローチは、インライン コードの実行のためにマスター ページおよびページ レイアウト ギャラリー項目を開くことに伴うセキュリティ上の問題を引き起こすことがありません。前のアプローチと同様に、カスタマイズはサイト コレクション レベルで実行されます。ただし、バリエーション ルート ジャンプ ロジックを変更する必要があるたびに、アセンブリを再コンパイルしなければなりません。したがって、このアプローチでは、変更、テスト、展開のサイクルが低速になります。すべてのフロントエンド Web サーバー ファイル システム コンピューターにアセンブリを展開する必要があります。

追加シナリオとして、VariationsRootLanding.ascx ファイルのコードを変更することによって使用できる方法があります。バリエーション サイトへの展開を対象範囲とする展開ジョブを使用する場合で、ジョブが展開元のバリエーション階層のすべてのバリエーション ラベルを展開するわけではない場合、通常これらのラベルにリダイレクトされるユーザーは、展開先のバリエーション ルートに移動するときに 404 エラーを受信します。たとえば、バリエーション階層にドイツ語ロケールを対象とするラベルがある場合は、このラベルが対象範囲とする展開に含まれていないと、ブラウザーは、展開先コンピューターのバリエーション ルートに移動するときにドイツ語ロケールで 404 エラーを受信するように設定します。既定では、ルート ジャンプ ロジックは、使用するリダイレクト URL の有効性をチェックしません。

この問題を解決する方法の 1 つは、ルート ジャンプ ロジックを修正して、ターゲットのリダイレクト URL に機能する Web サイトが存在するときにそれを検出することです。この方法の実行の詳細については、3 番目の手順「ルート ジャンプ ロジックを修正して、機能する Web サイトが存在するときにそれを検出するには」を参照してください。

VariationsRootLanding.ascx ファイルの内容をページ レイアウトをコピーするには

  1. VariationsRootLanding.ascx ファイルからコードをコピーして、マスタ ページおよびページ レイアウト ギャラリーの VariationRootPageLayout.aspx に埋め込みます。

  2. VariationRootPageLayout.aspx ファイルを必要に応じて変更します。

  3. VariationRootPageLayout.aspx 内からの VariationsRootLanding.ascx およびそのユーザー コントロールへの参照を削除します。

  4. VariationRootPageLayout.aspx のインライン コードの実行を可能にするには、各 Web クライアントの web.config ファイルを次のように変更します。

      <SharePoint>
        <SafeMode ... >
          <!-- Marks VariationRootPageLayout.aspx for ASP.NET compilation. -->
          <PageParserPath VirtualPath= "/_catalogs/masterpage/VariationRootPageLayout.aspx" 
            CompilationMode="Always"  
            AllowServerSideScript="False"
            AllowUnsafeControls="False" 
            IncludeSubFolders="True"/>
          </PageParserPaths>
        </SafeMode>
      </SharePoint>
    

プリコンパイル済みアセンブリを作成するには

  1. VariationsRootLanding.ascx ファイルのコードをコピーして、独自のアセンブリ DLL に独自のコントロールを作成します。

  2. コントロールを必要に応じて変更します。

  3. マスタ ページおよびページ レイアウト ギャラリーの VariationRootPageLayout.aspx にコントロールへの参照を追加します。

  4. VariationRootPageLayout.aspx 内からの VariationsRootLanding.ascx およびそのユーザー コントロールへの参照を削除します。

ルート ジャンプ ロジックを修正して、機能する Web サイトが存在するときにそれを検出するには

  1. VariationsRootLanding.ascx ファイルを開きます。

  2. GetRedirectUrl() セクションで、次のコード行を見つけます。

    return (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);
    
  3. 手順 2. のコード行を次のコードに置き換えます。

    // Customization for handling matchedUrl not valid. 
    // (For example, a content deployed target site collection, 
    // without source hierarchy.)
    matchedUrl = (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);                           
    using (SPSite site = new SPSite(matchedUrl))
    using (SPWeb web = site.OpenWeb())
         {
         // If matchedUrl is the same as the URL of the Web
         // that you just opened, then matchedUrl is valid.
         if (string.Compare(matchedUrl, web.Url, StringComparison.OrdinalIgnoreCase) == 0 && web.DoesUserHavePermissions(SPBasePermissions.Open))
           {
          //Target URL is valid; return it.
            return matchedUrl;
            }
            else
            {
          //Target URL was NOT valid; the variation label is missing.
          //Perform logic here to redirect the user appropriately.
          //If nothing is done here, then this function returns null
          //and the landing behavior reverts to the
          //VariationsRootLandingRunTime control.
          //This control displays a simple error message that
          //indicates that it could not find an appropriate subsite to 
          //redirect to.
            }
       }
    

関連項目

その他の技術情報

バリエーション サイトと複数言語サイト