There are some properties for SPSite and SPWeb class using which we can get the URL values for the sites and webs. The two most used of these properties are - 'ServerRelativeUrl' and 'Url'
As a developer we use the values of the properties for writing some logic for satisfying the business needs. Whenever I used to write a OM code to use these properties, the first question which flashes in my mind - "What values are returned by these properties?". I immediately create a console application, and check the values returned by these properties and continue with the actual work. I have seen many other developers doing this. So, for a quick reference I prepared the below table which has the url values returned by these properties.
Some people may find this easy, but some (like me ;)) get confused when the sites have managed paths. These properties return the managed path if the site has one. Here goes the list
SCENARIO 1: A Site Collection (SPSite) without any managed path.
URL : 'http://rams' | |
---|---|
Property | Value |
SPSite.ServerRelativeUrl | / |
SPSite.Url | http://rams |
SPWeb.ServerRelativeUrl | / |
SPWeb.Url | http://rams |
Url - http://rams/about ('about' is a sub site) | |
SPSite.ServerRelativeUrl | / |
SPSite.Url | http://rams |
SPWeb.ServerRelativeUrl | /about |
SPWeb.Url | http://rams/about |
This looks pretty simple. We get confused when sites are created using managed paths. Below are the samples values for site created with managed paths
SCENARIO 2: A Site Collection with a managed path (of type Explicit inclusion). For the below URL '/my' is the managed path
URL : 'http://rams/my' | |
---|---|
Property | Value |
SPSite.ServerRelativeUrl | /my |
SPSite.Url | http://rams/my |
SPWeb.ServerRelativeUrl | /my |
SPWeb.Url | http://rams/my |
Url - http://rams/my/about ('about' is a sub site) | |
SPSite.ServerRelativeUrl | /my |
SPSite.Url | http://rams/my |
SPWeb.ServerRelativeUrl | /my/about |
SPWeb.Url | http://rams/my/about |
SCENARIO 3: A Site Collection with a managed path (of type Wildard inclusion). For the below URL '/sites' is the managed path, and a site collection is created at '/blog'
URL : 'http://rams/sites/blog' | |
---|---|
Property | Value |
SPSite.ServerRelativeUrl | /sites/blog |
SPSite.Url | http://rams/sites/blog |
SPWeb.ServerRelativeUrl | /sites/blog |
SPWeb.Url | http://rams/sites/blog |
Url - http://rams/sites/blog/about ('about' is a sub site) | |
SPSite.ServerRelativeUrl | /sites/blog |
SPSite.Url | http://rams/sites/blog |
SPWeb.ServerRelativeUrl | /sites/blog/about |
SPWeb.Url | http://rams/sites/blog/about |