Do you want to achieve friendly URL means remove .aspx extension or want to change .aspx extension to .asp, .php, etc. then this blog is for you!
Suppose we have original URL like this:
http://mysite.com/aboutme.aspx
We can achieve Friendly URL / Remove URL extension:
http://mysite.com/aboutme/
We can change URL Extension too:
http://mysite.com/aboutme.php
OR
http://mysite.com/aboutme.asp
We can achieve any of below URLs with few changes in Sitecore. We are going to achieve
Let's see how.
In Web.config, find below line and set addaspxextension="false", which simply removes aspx extension from generated URLs:
Doing these change, Sitecore will respond to any friendly URL, also will generate all friendly URLs only. See below snap how we achieved.
See how to configure in web.config:
Now you can request any Sitecore page using asp, php or yogesh extension.
For this, we have to set addaspxextension="true" means Sitecore will now generate URLs with .aspx extension. When the page is generating links of page output, we will replace the .aspx extension with .asp extension.
For that, we will change existing Link Provider with our customized one. See Web.config change.
Our customized class will look like:
Hope, it's working for you, Enjoy!!
Suppose we have original URL like this:
http://mysite.com/aboutme.aspx
We can achieve Friendly URL / Remove URL extension:
http://mysite.com/aboutme/
We can change URL Extension too:
http://mysite.com/aboutme.php
OR
http://mysite.com/aboutme.asp
We can achieve any of below URLs with few changes in Sitecore. We are going to achieve
- How the above URL requests will be served
- How all URLs generated by that request will follow same URL format.
Let's see how.
How to achieve friendly url?
Sitecore architecture has inbuilt facility to achieve friendly URLs.In Web.config, find below line and set addaspxextension="false", which simply removes aspx extension from generated URLs:
<add addaspxextension="false" alwaysincludeserverurl="false" encodenames="true" languageembedding="never" languagelocation="filePath" name="sitecore" shortenurls="true" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" usedisplayname="false" />
Doing these change, Sitecore will respond to any friendly URL, also will generate all friendly URLs only. See below snap how we achieved.
How to change URL extension from .aspx to .asp, .html, etc.?
First thing is, Sitecore will support all the extensions which are Allowed from IIS. Second thing is, Sitecore itself has Allowed and Blocked extension list. So, all allowed extensions are by default accepted by Sitecore.Any customized extension should work
You might be knowing all Sitecore processors in HttpRequestBegin pipeline. Using ItemResolver, Sitecore determines context item by the actual path from the URL without considering the extension. Means, whether extension is .aspx, .asp, .php, or even your name say .yogesh, not an issue, Sitecore will allow it and render page. :) Just thing to note, that extension should be allowed from Sitecore configurations.See how to configure in web.config:
<preprocessRequest help="Processors should derive from Sitecore.Pipelines.PreprocessRequest.PreprocessRequestProcessor"> <!-- Few processors might be there --> <processor type="Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel"> <param desc="Allowed extensions (comma separated)">aspx, ashx, asmx, asp, php, yogesh</param> <param desc="Blocked extensions (comma separated)">*</param> <param desc="Blocked extensions that stream files (comma separated)">*</param> <param desc="Blocked extensions that do not stream files (comma separated)"></param> </processor> </preprocessRequest>
Now you can request any Sitecore page using asp, php or yogesh extension.
Page should generate all link by replacing the .aspx extension
Suppose we want to generate page urls with .asp extension.For this, we have to set addaspxextension="true" means Sitecore will now generate URLs with .aspx extension. When the page is generating links of page output, we will replace the .aspx extension with .asp extension.
For that, we will change existing Link Provider with our customized one. See Web.config change.
<linkManager defaultProvider="sitecore"> <providers> <!-- Comment below line which is default setting in Sitecore --> <!-- <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" lowercaseUrls="false" shortenUrls="true" useDisplayName="false" /> --> <!-- Add our customized link provider --> <add name="sitecore" type="SitecoreTactics.MyLinkProvider, Sitecore.Kernel" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" lowercaseUrls="false" shortenUrls="true" useDisplayName="false" /> </providers> </linkManager>
Our customized class will look like:
namespace SitecoreTactics { public class MyLinkProvider : Sitecore.Links.LinkProvider { protected static new LinkBuilder CreateLinkBuilder(Sitecore.Links.UrlOptions options) { return new LinkBuilder(options); } public override string GetItemUrl(Item item, UrlOptions options) { string itemUrl = base.CreateLinkBuilder(options).GetItemUrl(item); if (this.LowercaseUrls) { itemUrl = itemUrl.ToLowerInvariant(); } // Replace .aspx with .asp return itemUrl.Replace(".aspx", ".asp"); } } }See below snap how it will look like:
Hope, it's working for you, Enjoy!!