# Configure the finishLocation Attribute in a Flow

If `finishLocation` isn’t specified, users who click **Finish** start a new interview and see the first screen of the flow. You can shape what happens when a user clicks **Finish** on the final screen by using the `URLFOR` function, the `$Page` variable, or a controller.

The following sections show the ways that you can configure the `<flow:interview>` component’s `finishLocation` attribute.

## Set `finishLocation` with the `URLFOR` Function

:::note
- You can't redirect flow users to a URL that’s external to your Salesforce org.
- Don’t call the `Auth.SessionManagement.finishLoginFlow` method and the `finishLocation` attribute in the same flow. `Auth.SessionManagement.finishLoginFlow` indicates the end of a Visualforce page login flow. If `finishLocation` is in the same flow, `finishLocation` executes when the flow starts, giving users full access to the session.
:::

To route users to a relative URL or a specific record or detail page, using its ID, use the `URLFOR` function.

This example routes users to the Salesforce home page.

```visualforce
<apex:page>
    <flow:interview name="MyUniqueFlow" finishLocation="{!URLFOR('/home/home.jsp')}"/>
</apex:page>
```

This example routes users to a detail page with an ID of 001D000000IpE9X.

```visualforce
<apex:page>
    <flow:interview name="MyUniqueFlow" finishLocation="{!URLFOR('/001D000000IpE9X')}"/>
</apex:page>
```

For more information about `URLFOR`, see [Functions](/docs/platform/salesforce-pages-developers-guide/guide/pages-variables-functions.md).

## Set `finishLocation` with the `$Page` Variable

To route users to another Visualforce page without using `URLFOR`, set `finishLocation` to the name of the destination page with the format `{!$Page.pageName}`.

```visualforce
<apex:page>
    <flow:interview name="MyUniqueFlow" finishLocation="{!$Page.MyUniquePage}"/>
</apex:page>
```

For more information about `$Page`, see [Global Variables](/docs/platform/salesforce-pages-developers-guide/guide/pages-variables-global.md).

## Set `finishLocation` with a Controller

You can set `finishLocation` in a few ways with a custom controller.

This sample controller configures a flow's finish behavior in three different ways.

```visualforce
public class myFlowController {
    
    public PageReference getPageA() {
        return new PageReference('/300');
    }
    
    public String getPageB() {
        return '/300';
    }
    
    public String getPageC() {
        return '/apex/my_finish_page';
    }
}

```

Here’s a sample Visualforce page that references the controller and sets the flow finish behavior to the first option.

```visualforce
<apex:page controller="myFlowController">
    <h1>Congratulations!</h1> This is your new page.
    <flow:interview name="flowname" finishLocation="{!pageA}"/>
</apex:page>

```

If you use a standard controller to display a record on the same page as the flow, users who click **Finish** start a new flow interview. They see the first screen of the flow, without the record, because the `id` query string parameter isn't preserved in the page URL. If needed, configure the `finishLocation` to route users back to the record.
