---
title: std.dirname
summary: null
url: >-
  https://www.fastly.com/documentation/reference/vcl/functions/strings/std-dirname
---

```
STRING std.dirname(STRING s)
```

**Available in:** all subroutines

Breaks a pathname into the directory component and returns it. A pathname is a
forward slash-separated list of directory names followed by either a directory
name or a filename. Trailing `/` characters are not counted as part of the
pathname. Both relative and absolute pathnames are allowed. Relative pathnames
may use a single dot (.) or double dots (..) to represent the current directory
or the parent directory respectively.

In the usual case, `std.dirname` returns the string up to, but not including,
the final `/`: for example, `std.dirname("/foo/bar/foobar")` is `"/foo/bar"`.

If the pathname does not contain a forward slash, then `std.dirname` returns
the string `"."`: for example, `std.dirname("foo")` is `"."`.

If the pathname only contains one or more forward slashes, then `std.dirname`
returns the string `"/"`: for example, `std.dirname("/")` is `"/"`.

If the pathname is an empty string `""`, then `std.dirname` returns the string
`"."`. The same behavior applies if `std.dirname` is invoked with a _not-set_
header for the pathname: for example, `std.dirname(req.http.Not-Set)` is `"."`.

See `std.basename()` for breaking a pathname
into the filename component. The documentation also includes an example of how
to use `std.dirname` and `std.basename()`
together to concatenate a complete pathname.

This function conforms to
[POSIX.1-2001](https://en.wikipedia.org/wiki/POSIX#POSIX.1-2001).

## Examples

```vcl
std.dirname("") # returns "."
std.dirname("/usr/lib") # returns "/usr"
std.dirname("/usr/") # returns "/"
std.dirname("usr") # returns "."
std.dirname("/") # returns "/"
std.dirname(".") # returns "."
std.dirname("..") # returns "."
```
