14

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/; }

ajmeese7
  • 119
Rob
  • 2,513

5 Answers5

16

Figured out a way. I'm not sure if it's the BEST, but it's certainly working right now.

Here's what I did:

location ~ ^/phpmyadmin/(.*)$
{
        alias /home/phpmyadmin/$1;
}
ajmeese7
  • 119
Rob
  • 2,513
3

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://nginx.org/en/docs/http/ngx_http_core_module.html

cmbuckley
  • 105
  • 4
1

Try

location ^~ /phpMyAdmin/
{
    alias /home/phpmyadmin/;

    location ~ \.php$
    {
        include fcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_param SCRIPT_FILENAME /home$fastcgi_script_name;
    }
}
kervin
  • 211
1

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.

thomasrutter
  • 2,656
0

in my case: comment this

#     location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|svg)$ {
#       try_files $uri $uri/ @router;
#     }

is work

 location /realpath {
         alias /Users/hhh/Desktop/work/xxx/public;

return 200 '$request_filename:$document_root:$realpath_root\n';

   }