Quick Tip – Site Collection Relative URLs in MOSS 2007

This is a nice quick one…


If you try to use normal relative URL paths, then you may run into a spot of bother when trying to call a URL path that is relative to the Site Collection, especially when you have multiple Site Collections in your web application:




How do you make an URL that is relative to the "ThisSite" site collection?


Well, you could hard-code the URL prefix, but that doesn’t really sit very well for most implementations, especially when using multiple-access mappings, you might have multiple URLs for the same site collection!


Alternatively, you can use the SPUrl function:


Code Sample:

This example code will take you to the Site Settings page for the current Site Collection.


<a runat="server" href="<% SPUrl:~SiteCollection\_layouts\settings.aspx %>">Go to Top Level Site Settings</a>


Note – You must use the runat="server" attribute, otherwise it will send the literal text of <% SPUrl …%> instead of the desired relative URL!

Also, you will need to add a reference to the Microsoft Publishing Assembly in the header tags; for that, see this blog


Publishing Header Tags

Thanks go to Hannah Scott (and her subsequent source) for this blog post.


<%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="PublishingVariations" TagName="VariationsLabelMenu" src="~/_controltemplates/VariationsLabelMenu.ascx" %>
<%@ Register Tagprefix="PublishingConsole" TagName="Console" src="~/_controltemplates/PublishingConsole.ascx" %>
<%@ Register TagPrefix="PublishingSiteAction" TagName="SiteActionMenu" src="~/_controltemplates/PublishingActionMenu.ascx" %>