Ao personalizar páginas do SharePoint, adicionar web parts ou trabalhar com soluções do SharePoint Framework, você pode ver o erro: “Server relative URL must start with SPWeb server relative URL.” Esse erro impede que uma página ou web part carregue corretamente. A causa raiz é uma incompatibilidade entre a URL fornecida no código ou configuração e o caminho relativo ao servidor real do site do SharePoint. Este artigo explica exatamente por que esse erro ocorre e como corrigi-lo usando o formato de URL correto.
Principais Conclusões: Corrigindo o Erro de URL Relativa ao Servidor
- Formato da URL relativa ao servidor: Deve começar com o caminho do conjunto de sites, por exemplo
/sites/MeuSite, não uma URL completa comohttps://contoso.sharepoint.com/sites/MeuSite. - Contexto do objeto SPWeb: A URL deve corresponder ao caminho raiz do aplicativo web ou à raiz do conjunto de sites, não ao caminho de um sub-site.
- Usando a variável
$webno SharePoint Framework: Sempre preceda a URL relativa ao servidor com a URL relativa ao servidor do web usandothis.context.pageContext.web.serverRelativeUrl.
Por que o Erro de URL Relativa ao Servidor Ocorre
O SharePoint usa URLs relativas ao servidor para referenciar recursos como páginas, listas e arquivos dentro de um conjunto de sites. Uma URL relativa ao servidor omite o protocolo e o domínio, começando com o caminho gerenciado, por exemplo /sites/MeuSite ou /equipes/MeuSiteEquipe. O erro “Server relative URL must start with SPWeb server relative URL” é acionado quando a URL fornecida não começa com o mesmo caminho do objeto web do SharePoint (SPWeb) atual.
O objeto SPWeb representa um site específico do SharePoint, que pode ser o site raiz de um conjunto de sites ou um sub-site. Cada SPWeb tem uma propriedade ServerRelativeUrl. Por exemplo, um site em https://contoso.sharepoint.com/sites/Projetos/Subsite tem uma URL relativa ao servidor de /sites/Projetos/Subsite. Se você tentar definir uma URL de página como /sites/Projetos/Paginas/Home.aspx, a URL é válida para a raiz do conjunto de sites, mas não para o sub-site. A URL correta para o sub-site seria /sites/Projetos/Subsite/Paginas/Home.aspx.
Cenários Comuns que Disparam o Erro
O erro aparece em várias situações:
- Web parts do SharePoint Framework (SPFx): Quando você codifica uma URL relativa ao servidor em uma propriedade de web part em vez de usar o contexto da página.
- Layouts de página ou master pages personalizados: Quando um link ou referência de recurso usa uma URL que não começa com o caminho relativo ao servidor do site atual.
- Scripts PowerShell ou código CSOM: Quando você passa uma URL relativa ao servidor para um método que espera que a URL seja relativa ao SPWeb atual.
- Fluxos de trabalho do SharePoint Designer: Quando uma ação de fluxo de trabalho referencia uma lista ou biblioteca usando uma URL absoluta ou relativa malformada.
O problema central é sempre o mesmo: a URL fornecida não começa com o mesmo caminho do site em que você está trabalhando.
Passos para Corrigir o Erro de URL Relativa ao Servidor
Método 1: Corrigir a URL em Web Parts do SharePoint Framework
- Identifique a URL relativa ao servidor do web atual
No código da sua web part SPFx, usethis.context.pageContext.web.serverRelativeUrlpara obter o caminho base correto. Para um site em/sites/MeuSite, essa propriedade retorna/sites/MeuSite. - Preceda o caminho base à sua URL de destino
Em vez de escrever/sites/MeuSite/Listas/Tarefas, construa a URL dinamicamente:this.context.pageContext.web.serverRelativeUrl + '/Listas/Tarefas'. Isso garante que a URL final comece com o caminho SPWeb correto. - Teste a web part em um site diferente
Implante a web part em um sub-site. Verifique se a URL é atualizada automaticamente para incluir o caminho do sub-site. Se a web part ainda usar uma URL codificada, o erro reaparecerá.
Método 2: Corrigir URLs em Código CSOM ou PowerShell
- Obtenha o objeto SPWeb
No CSOM, useclientContext.Webpara obter o web atual. No PowerShell, useGet-SPWebcom a URL do site. - Leia a propriedade
ServerRelativeUrl
Para o objeto web, acesse$web.ServerRelativeUrl(PowerShell) ouweb.ServerRelativeUrl(CSOM). Armazene esse valor em uma variável. - Construa o caminho relativo ao servidor completo
Combine a URL relativa ao servidor do web com o caminho relativo do recurso. Exemplo:$web.ServerRelativeUrl + '/Listas/MinhaLista'. Não inclua o domínio absoluto. - Valide a URL final
Verifique se a URL combinada começa com a URL relativa ao servidor do web. Se não começar, ajuste o caminho do recurso para ser relativo à raiz do web.
Método 3: Corrigir URLs em Layouts de Página e Master Pages
- Use o token
~sitecollection
No SharePoint Designer ou HTML, substitua caminhos codificados por~sitecollectionou~site. O token~sitecollectionresolve para a URL relativa ao servidor do conjunto de sites. O token~siteresolve para a URL relativa ao servidor do site atual. - Reescreva URLs absolutas
Se um link usar uma URL absoluta comohttps://contoso.sharepoint.com/sites/MeuSite/Paginas/Home.aspx, altere para~site/Paginas/Home.aspx. Isso garante que o link funcione em qualquer site dentro do conjunto. - Teste com um sub-site
Navegue até um sub-site e verifique se todos os links e recursos carregam sem o erro. Se o erro persistir, verifique se o token resolveu para o caminho correto.
Se o Erro Persistir Após a Correção Principal
“Server Relative URL Must Start With SPWeb Server Relative URL” no SharePoint Designer
Ao editar uma página no SharePoint Designer, você pode ver esse erro após alterar a URL de um recurso vinculado. A causa geralmente é uma URL codificada em uma web part Data View ou em um hiperlink. Para corrigir, abra a página no modo avançado, encontre a URL do recurso e substitua por um token ou uma URL relativa ao servidor que comece com o caminho do site atual. Use ~site para recursos que devem seguir o site atual.
Erro ao Adicionar uma Web Part Programaticamente
Se você adicionar uma web part via código e fornecer uma URL relativa ao servidor para uma propriedade como ContentLink, certifique-se de que a URL seja relativa ao web onde a web part está sendo adicionada. Por exemplo, se você adicionar uma web part a um sub-site em /sites/MeuSite/Subsite, a URL deve começar com /sites/MeuSite/Subsite. Um erro comum é usar o caminho raiz do conjunto de sites. Sempre obtenha a URL relativa ao servidor do web atual dinamicamente.
Validação de URL no Painel de Propriedades do SharePoint Framework
No SPFx, se você tiver um campo no painel de propriedades que aceita uma URL relativa ao servidor, o usuário pode inserir um valor incorreto. Adicione validação à sua web part que verifique se a URL inserida começa com this.context.pageContext.web.serverRelativeUrl. Se não começar, mostre uma mensagem de erro e impeça a renderização da web part. Isso captura o problema antes que o erro ocorra.
URL Relativa ao Servidor vs URL Absoluta vs URL Relativa ao Site
| Item | URL Relativa ao Servidor | URL Absoluta | URL Relativa ao Site |
|---|---|---|---|
| Formato | /sites/MeuSite/Paginas/Home.aspx |
https://contoso.sharepoint.com/sites/MeuSite/Paginas/Home.aspx |
/Paginas/Home.aspx |
| Inclui domínio | Não | Sim | Não |
| Inclui caminho gerenciado | Sim | Sim | Não |
| Funciona entre conjuntos de sites | Sim | Sim | Não |
| Funciona entre sub-sites | Sim | Sim | Não |
| Caso de uso comum | APIs, SPFx, CSOM | Links externos, e-mails | Navegação no mesmo site, imagens |
O erro se aplica apenas a URLs relativas ao servidor. Se você usar uma URL absoluta, o SharePoint geralmente a aceita, mas ainda pode lançar o erro se o código esperar explicitamente uma URL relativa ao servidor. A abordagem mais segura é sempre usar URLs relativas ao servidor construídas a partir do contexto do web atual.
Agora você pode identificar e corrigir o erro “Server relative URL must start with SPWeb server relative URL”. Sempre use métodos dinâmicos para obter a URL relativa ao servidor do web atual, seja no SPFx, PowerShell ou layouts de página. Para soluções complexas, teste tanto em sites raiz quanto em sub-sites para detectar incompatibilidades de caminho precocemente. Uma prática confiável é armazenar a URL relativa ao servidor do web em uma variável no início do código e precedê-la a cada caminho de recurso.