# FindPublishedContentAndTemplate()

The followed method is called on the "PublishedContentRequest.PrepareRequest()" method: `FindPublishedContentAndTemplate()`. We discuss shortly what this method is doing:

1. FindPublishedContent ()
2. Handles redirects
3. HandlePublishedContent()
4. FindTemplate()
5. FollowExternalRedirect()
6. HandleWildcardDomains()

#### HandlePublishedContent

* No content?
* Run the LastChanceFinder
* Is an IContentFinder, resolved by ContentLastChanceFinderResolver
* By default, is null (= ugly 404)
* Follow internal redirects
* Take care of infinite loops
* Ensure user has access to published content
* Else redirect to login or access denied published content
* Loop while there is no content
* Take care of infinite loops

#### FindTemplate

* Use altTemplate if
* Initial content
* Internal redirect content, and InternalRedirectPreservesTemplate is true
* No alternate template?
* Use the current template if one has already been selected
* Else use the template specified for the content, if any
* Alternate template?
  * Use the alternate template, if any
  * Else use what’s already there: a template, else none
* Alternate template is used only if displaying the intended content
  * Except for internal redirects
  * If you enable InternalRedirectPreservesTemplate
  * Which is false by default
* Alternate template replaces whatever template the finder might have set
  * ContentFinderByNiceUrlAndTemplate
  * /path/to/page/template1?altTemplate=template2  template2
* Alternate template does not falls back to the specified template for the content
  * /path/to/page?altTemplate=missing  no template
  * Even if the page has a template
* But preserves whatever template the finder might have set
  * /path/to/page/template1?altTemplate=missing  template1

#### FollowExternalRedirect()

* Content.GetPropertyValue("umbracoRedirect")
* If it’s there, sets the published content request to redirect to the content
* Will trigger an external (browser) redirect

#### HandleWildcardDomains()

![](https://3872888104-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgEH4FChbCn7eDDqREvdE%2Fuploads%2Fgit-blob-5c2570a56a656dda924659f4d71affb0793040b4%2Fculture-and-hostnames.png?alt=media)

* Finds the deepest wildcard domain between
* Domain root (or top)
* Request’s published content
* If found, updates the request’s culture accordingly

This implements separation between hostnames and cultures
