Question: I'm trying to set up an alias so when someone accesses `/phpmyadmin/`, nginx will pull it from `/home/phpmyadmin/` rather than from the usual document root. However, everytime I pull up the URL, it gives me a 404 on all items not pulled through fastcgi. fastcgi seems to be working fine, whereas the rest is not. `strace` is telling me it's trying to pull everything else from the usual document root, yet I can't figure out why. Can anyone provide some insight?

Here is the relevant part of my config:

```
location ~ ^/phpmyadmin/(.+\.php)$
{
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
}

location /phpmyadmin
{
        alias /home/phpmyadmin/;
}

```

Answer: 
I'm not sure but have you tried writing it this way:

```
location /phpmyadmin/
{
        alias /home/phpmyadmin/;
}

```

Also, what's the URI from which you are trying to access it?

As far as I understand it, you have to use the URI

```
/home/phpmyadmin/

```

and not just

```
/phpmyadmin/

```

You can read more about it here: <http://wiki.nginx.org/HttpCoreModule>
The reason this doesn't work is the server is choosing the regex based location and not the prefix based location that has the alias in it.

It will only choose one. There is an operator you can use to get a prefix based location to outrank a regex one, but then you'll find php won't work. The solution will be one like kervin's answer where the PHP regex is nested inside the location with the alias directive.

I suspect however his SCRIPT\_FILENAME setting may not work there since there is different capitalisation on the URL and the aliased directory.