Newer Version Available
Salesforce サイトの URL の書き換え
サイトは、サイト訪問者にわかりやすい URL とリンクを表示する組み込みロジックを備えています。アドレスバーに入力したり、ブックマークから起動したり、または外部 Web サイトからリンクする URL 要求を再記述するルールを作成します。サイトページ内のリンクの URL を再記述するルールも作成できます。URL を再記述すると、URL がわかりやすくなるだけでなく、ユーザが直感的に理解できるようになるため、検索エンジンによるサイトページのインデックス作成がさらに容易になります。
たとえば、自分のブログサイトを持っているとします。URL を書き換えない場合、ブログのエントリの URL は次のようになります。http://myblog.force.com/posts?id=003D000000Q0PcN
URL を書き換えると、ユーザはレコード ID ではなく日付やタイトルでブログの投稿にアクセスできます。大晦日の投稿の URL は次のようになります。http://myblog.force.com/posts/2009/12/31/auld-lang-syne
また、サイトページ内に表示されるリンクの URL を書き換えることもできます。大晦日の投稿にバレンタインデーの投稿へのリンクが含まれる場合、リンク URL は次のように表示されます。http://myblog.force.com/posts/2010/02/14/last-minute-roses
サイトの URL を書き換えるには、元の URL をわかりやすい URL に対応付ける Apex クラスを作成して、Apex クラスをサイトに追加します。
Site.UrlRewriter インターフェースのメソッドについての詳細は、「UrlRewriter」を参照してください。
Apex クラスの作成
- クラスおよびメソッドはグローバルである必要がある
- Apex クラスおよびメソッドはすべて global である必要があります。
- クラスに両方のメソッドを実装する必要がある
- Apex クラスには mapRequestUrl メソッドおよび generateUrlFor メソッドの両方を実装する必要があります。いずれのメソッドも使用しない場合は、そのメソッドが null を返すようにします。
- Visualforce サイトページでのみ機能する書き換え
- 受信 URL 要求は、サイトに関連付けられている Visualforce ページのみに対応付けできます。標準ページ、画像、その他のエンティティに対応付けることはできません。
- サイトページのリンクの URL を書き換えるには、$Page マージ変数を含む !URLFOR 関数を使用します。たとえば、次のコードでは、myPage という名前の Visualforce ページにリンクします。
- 『Visualforce 開発者ガイド』の付録「関数」を参照してください。
- 符号化された URL
- Site.urlRewriter インターフェースを使用して取得する URL は符号化されています。符号化されていない URL の値にアクセスする必要がある場合は、EncodingUtil クラスの urlDecode メソッドを使用します。
- 文字の制限
- わかりやすい URL は、Salesforce の URL とは異なる必要があります。3 文字のエンティティのプレフィックスまたは 15 文字または 18 文字の ID を含む URL は書き換えられません。
- わかりやすい URL と書き換えられた後の URL のどちらでもピリオドは使用できません。ただし、URL の末尾には使用できない .well-known パスコンポーネントは例外です。
- 文字列の制限
- わかりやすい URL と書き換えられた後の URL パスのどちらでも、サイトのベース URL の後の最初のパスコンポーネントとして次の予約文字列を使用することはできません。サイトのベース URL の後の最初のパスコンポーネントとは、たとえば、https://sites.force.com/baseURL、https://sites.force.com/pathPrefix/baseURL、https://custom-domain/pathPrefix/baseURL、https://sites.force.com/pathPrefix/baseURL/another/path などの baseURL を指します。
- apexcomponent
- apexpages
- aura
- chatter
- chatteranswers
- chatterservice
- cometd
- ex
- faces
- flash
- flex
- home
- id
- ideas
- idp
- images
- img
- javascript
- js
- knowledge
- lightning
- login
- m
- mobile
- ncsphoto
- nui
- push
- resource
- saml
- sccommunities
- search
- secur
- services
- servlet
- setup
- sfc
- sfdc
- sfdc_ns
- sfsites
- site
- style
- vote
- widg
- 書き換えられた後の URL パスの最後に次の予約文字列を使用することはできません。
- /aura
- /auraFW
- /auraResource
- /AuraJLoggingRPCService
- /AuraJLVRPCService
- /AuraJRPCService
- /dbcthumbnail
- /HelpAndTrainingDoor
- /htmldbcthumbnail
- /l
- /m
- /mobile
- 相対パスのみ
- PageReference.getUrl() メソッドでは、ホスト名またはサイトのプレフィックス (ある場合) の直後に指定する URL の一部のみが返されます。たとえば、URL が http://mycompany.force.com/sales/MyPage?id=12345 であり、「sales」がサイトのプレフィックスである場合、/MyPage?id=12345 のみが返されます。
- ドメインとサイトのプレフィックスは書き換えできません。
- 一意のパスのみ
- サイトのプレフィックスと同じ名前を持つディレクトリには、URL を対応付けできません。たとえば、サイト URL が http://acme.force.com/help で、サイトプレフィックスが「help」である場合、help/page への URL をポイントすることはできません。結果として、返されるパスは http://acme.force.com/help/page ではなく、http://acme.force.com/help/help/page になります。
- 一括クエリ
- ページ作成でのパフォーマンスを向上させるには、generateUrlFor メソッドでタスクを一度に 1 つずつではなく、一括で実行します。
- 項目の一意性の適用
- URL を書き換えるために選択した項目が一意であることを確認します。クエリに SOQL の一意の項目またはインデックス付き項目を使用すると、パフォーマンスが向上する可能性があります。
サイトへの URL 書き換えの追加
- [設定] から、[クイック検索] ボックスに「サイト」と入力し、[サイト] を選択します。
- [新規] をクリックします。既存のサイトを変更する場合は [編集] をクリックします。
- [サイトの編集] ページで、[URL 書き換えクラス] の [Apex クラス] を選択します。
- [保存] をクリックします。
コード例
この例では、mycontact と myaccount という 2 つの Visualforce ページで構成される単純なサイトが存在します。このサンプルを試してみる前に、両方のページで「参照」権限が有効になっていることを確認します。各ページでそのオブジェクト種別の標準コントローラが使用されます。取引先責任者ページには親取引先ページへのリンクと取引先責任者の詳細が含まれます。
書き換えを実装する前は、「Force.com サイトの URL の書き換え」に示されるように、アドレスバーとリンク URL はレコード ID (ランダムな 15 桁の文字列) を表示しました。書き換えを有効にした後は、「Force.com サイトの URL の書き換え」に示されるように、アドレスバーとリンクがわかりやすく書き換えられた URL を表示します。
これらのページの URL の書き換えに使用する Apex クラスについては、詳しい説明と共に「URL を書き換える Apex クラスの例」に示しています。
サイトページの例
このセクションでは、この例で使用する取引先ページおよび取引先責任者ページの Visualforce を示します。
URL を書き換える Apex クラスの例
書き換え前と書き換え後
- 取引先責任者ページの書き換え前の元の URL
- 取引先責任者ページから親取引先ページへのリンク
- 取引先ページへのリンクの書き換え前の元の URL (ブラウザのステータスバーに表示される)
- 取引先責任者ページの書き換えられた URL
- 取引先責任者ページから親取引先ページへのリンク
- 取引先ページへのリンクの書き換え後の URL (ブラウザのステータスバーに表示される)