Yes, umbracoUrlName only works a the same level. But doesn't umbracoUrlAlias do what you need? I mean if you write "hello" in the field for umbracoUrlAlias then Http://www.example.com/hello will work.
Alias works, but it will still have 2 url's.. since this is an alias bothe the longer one and alias one will work, my requirement to have a single url.. the longer one shortened
There is an IContentFinder, in this pipeline that will look for matches in the umbracoUrlAlias field; and a separate IContentFinder that looks for matches based on the node name / default Url.
So when you use umbracoUrlAlias - the content can still be found by it's original Url.
In your initial question, you wanted both to work :-)
Is the aim now to avoid duplicate entries in search engine indexes ?
If so you can use a canonical URL to identify the preferred Url to be indexed by the search engine for the content:
The other option would be to create your content node at the level you require in your site, eg create level6 as a node under the homepage, and the single url to it will be http://www.example.com/level6.
Other than that I'm thinking you could create your own IContentFinder, based on Umbraco's ContentFinderByNiceUrl
that would have a additional check on the 'found node' to see if the umbracoUrlAlias property existed, and had been set: if it has been set then your Custom ContentFinderbyNiceUrl would return false; with the result that your node will only be matched by the IContentFinder that looks on umbracoUrlAlias, - but should work normally for other nodes that do not have umbracoUrlAlias set.
You would have to remove the default Umbraco ContentFinderbyNiceUrl from the umbraco request pipeline, and replace it with your custom version.
public class RegisterCustomContentFinder : ApplicationEventHandler
{
protected override void ApplicationStarting(…)
{
// Insert my finder before ContentFinderByNiceUrl
ContentFinderResolver.Current
.InsertTypeBefore<ContentFinderByNiceUrl, MyCustomContentFinderByNiceUrl>();
// Remove ContentFinderByNiceUrl
ContentFinderResolver.Current.RemoveType<ContentFinderByNiceUrl>();
}
}
It's difficult to tell from your example but If it's a whole MVC application you are trying to have route via Urls in the root of the site, with content defined deeper in the tree, then an alternative approach might be to define a custom route and implement an UmbracoVirtualNodeRouteHandler, more details here:
Alternative URL
Hi,
I have a requirement where in my current URL that takes content structure has a 6 level length:
Example: Http://www.example.com/level2/level3/level4/level5/level6
Not i need this to remain but i also want
Http://www.example.com/level6
to open the same page as earlier. (Both should work) Can one Url have an alternate url?
Thanks in advance, Swati
Hi Swathi
If you add a new property to your document type with alias:
umbracoUrlAlias
as a textbox
then magically you can enter here a comma delimited string of alternative urls
eg.
"level6,levels/6"
would add two new alternative urls for your content:
/level6
and
/levels/6
see https://our.umbraco.org/wiki/reference/umbraco-best-practices/umbracourlalias/
regards
Marc
Hi Marc,
Tried it, didnt work..
Should i remove http:// ? is there any specific pattern?
The link doesnt open
Swati
Are you sure you didn't use a leading slash or perhaps an unintentional space? And did you "save and publish"?
For example just add level6 in the text field and hit Save and publish. Then http://www.example.com/level6 should work fine.
And double check that umbracoUrlAlias is spelled correct with capital U and A.
Good luck!
Hi Swathi
Yes, you should not have 'http' in the umbracoUrlAlias field
just try having
level6
typed into the field.
For example on my blog, I have an umbracoUrlAlias field:
If I enter 'level6' into this field for my 'about me' page then that content is available under that url:
http://tooorangey.co.uk/level6
as well as the existing about-me url
http://tooorangey.co.uk/about-me/
I can have multiple urls, by using a comma in between each alias:
and now the page is additionally available under
http://tooorangey.co.uk/levels/6
notice there isn't a slash at the beginning of levels/6, but I'm able to create a url not just in the root of the site.
Hi guys,
It worked! thanks a lot for your help :)
Swati
Hi again,
Can you tell me how to use the url name property too. Just to be sure, it doesnt give any alternate url but changes the correct one right?
I want to know how the new one must be added in the teststring.. i tried the same way with /level6 but it didnt work.
Requirement: Example: Http://www.example.com/level2/level3/level4/level5/level6
Should not change to
Http://www.example.com/level6
Only 1 url must be available, the new one
Swati
Just use umbracoUrlName instead of umbracoUrlAlias .
And yes, it should override the page's default url.
Hi martin,
I already did that, but it is changing the url only at level 6
The url is not shortening..
Example: Http://www.example.com/level2/level3/level4/level5/level6 if i type in "hello" its changing to
Http://www.example.com/level2/level3/level4/level5/hello
But i need it to be
Http://www.example.com/hello
swati
Perhaps you should look into https://our.umbraco.org/wiki/reference/umbraco-best-practices/umbracointernalredirectid but it need a page to select so perhaps not a best option.
Yes, umbracoUrlName only works a the same level. But doesn't umbracoUrlAlias do what you need? I mean if you write "hello" in the field for umbracoUrlAlias then Http://www.example.com/hello will work.
Remember that you have to use lowercase!
Hi Martin,
Alias works, but it will still have 2 url's.. since this is an alias bothe the longer one and alias one will work, my requirement to have a single url.. the longer one shortened
Swati
Hi Swathi
Yes the way the Umbraco request pipeline works, a series of 'IContentFinders' are executed in a queue, until a match for the requesting url is found.
https://our.umbraco.org/documentation/reference/routing/request-pipeline/icontentfinder
There is an IContentFinder, in this pipeline that will look for matches in the umbracoUrlAlias field; and a separate IContentFinder that looks for matches based on the node name / default Url.
So when you use umbracoUrlAlias - the content can still be found by it's original Url.
In your initial question, you wanted both to work :-)
Is the aim now to avoid duplicate entries in search engine indexes ?
If so you can use a canonical URL to identify the preferred Url to be indexed by the search engine for the content:
https://support.google.com/webmasters/answer/139066?hl=en
The other option would be to create your content node at the level you require in your site, eg create level6 as a node under the homepage, and the single url to it will be http://www.example.com/level6.
Other than that I'm thinking you could create your own IContentFinder, based on Umbraco's ContentFinderByNiceUrl
https://github.com/umbraco/Umbraco-CMS/blob/d50e49ad37fd5ca7bad2fd6e8fc994f3408ae70c/src/Umbraco.Web/Routing/ContentFinderByNiceUrl.cs
that would have a additional check on the 'found node' to see if the umbracoUrlAlias property existed, and had been set: if it has been set then your Custom ContentFinderbyNiceUrl would return false; with the result that your node will only be matched by the IContentFinder that looks on umbracoUrlAlias, - but should work normally for other nodes that do not have umbracoUrlAlias set.
You would have to remove the default Umbraco ContentFinderbyNiceUrl from the umbraco request pipeline, and replace it with your custom version.
It's difficult to tell from your example but If it's a whole MVC application you are trying to have route via Urls in the root of the site, with content defined deeper in the tree, then an alternative approach might be to define a custom route and implement an UmbracoVirtualNodeRouteHandler, more details here:
http://shazwazza.com/post/custom-mvc-routes-within-the-umbraco-pipeline/
Hi Marc,
Yes my requirement is to avoid duplicates on search engine.
I will try the approach you suggested
Thanks :)
swati
is working on a reply...