# Application routes using HTTP matching conditions
Type of document: How-to guide
Product: NGINX Gateway Fabric
---
Learn how to deploy multiple applications and HTTPRoutes with request conditions such as paths, methods, headers, and query parameters
## Overview
In this guide we will configure advanced routing rules for multiple applications. These rules will showcase request matching by path (including prefix, exact, and regex patterns), headers, query parameters, and method. For an introduction to exposing your application, we recommend that you follow the [basic guide](/ngf/traffic-management/basic-routing.md) first.
The following image shows the traffic flow that we will be creating with these rules.
```mermaid
graph LR
users[Users]
ngfSvc["Public Endpoint
for
cafe.example.com"]
subgraph cluster [Kubernetes Cluster]
subgraph appNs [Namespace
default]
subgraph nsPadding [" "]
nginxPod[Pod
NGINX]
coffeeV1Pod[Pod
coffee v1]
coffeeV2Pod[Pod
coffee v2]
teaPod[Pod
tea]
teaPostPod[Pod
tea-post]
end
end
end
ngfSvc --> nginxPod
nginxPod --/coffee--> coffeeV1Pod
nginxPod --/coffee
header: version=v2
OR
/coffee?TEST=v2--> coffeeV2Pod
nginxPod --GET /tea--> teaPod
nginxPod --POST /tea--> teaPostPod
users --> ngfSvc
class clusterPadding,nsPadding,clusterPadding2 noBorder
class gwNS,appNs namespace
class ngfSvc,nginxPod nginxNode
class coffeeV1Pod,coffeeV2Pod coffeeNode
class teaPod,teaPostPod teaNode
classDef noBorder stroke:none,fill:none
classDef default fill:#FFFFFF,stroke:#000000
classDef namespace fill:#FFFFFF,stroke:#036ffc,stroke-dasharray: 5 5,text-align:center
classDef nginxNode fill:#b4e0ad,stroke:#2AA317
classDef coffeeNode fill:#edbd8c,stroke:#D9822B
classDef teaNode fill:#ff8f6a,stroke:#e5805f
```
The goal is to create a set of rules that will result in client requests being sent to specific backends based on the request attributes. In this diagram, we have two versions of the `coffee` service. Traffic for v1 needs to be directed to the old application, while traffic for v2 needs to be directed towards the new application. We also have two `tea` services, one that handles GET operations and one that handles POST operations. Both the `tea` and `coffee` applications share the same Gateway.
## Before you begin
- [Install](/ngf/install/) NGINX Gateway Fabric.
## Coffee applications
### Deploy the Coffee applications
Begin by deploying the `coffee-v1`, `coffee-v2` and `coffee-v3` applications:
```shell
kubectl apply -f https://raw.githubusercontent.com/nginx/nginx-gateway-fabric/v/examples/advanced-routing/coffee.yaml
```
### Deploy the Gateway API Resources for the Coffee applications
The [gateway](https://gateway-api.sigs.k8s.io/api-types/gateway/) resource is typically deployed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/#roles-and-personas_1). To deploy the gateway:
```yaml
kubectl apply -f - <
```
**Note:**
In a production environment, you should have a DNS record for the external IP address that is exposed, and it should refer to the hostname that the gateway will forward for.
The [HTTPRoute](https://gateway-api.sigs.k8s.io/api-types/httproute/) is typically deployed by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/#roles-and-personas_1). To deploy the `coffee` HTTPRoute:
```yaml
kubectl apply -f - <