How can I create a location in nginx that works with AND without a trailing slash?
It might be in the regular expression that you're using --
location ~ ^/phpmyadmin/(.*)$
The above will match /phpmyadmin/, /phpmyadmin/anything/else/here, but it won't match /phpmyadmin because the regular expression includes the trailing slash.
You probably want something like this:
location ~ /phpmyadmin/?(.*)$ {
alias /home/phpmyadmin/$1;
}
The question mark is a regular expression quantifier and should tell nginx to match zero or one of the previous character (the slash).
Warning: The community seen this solution, as is, as a possible security risk
The better solution:
location ~ ^/phpmyadmin(?:/(.*))?$ {
alias /home/phpmyadmin/$1;
}
Ensure that server has permissions to /home/phpmyadmin
first.
Explanation of difference with accepted answer:
It's all about regular expressions.
First of all, the ^
char means that you want to match from beginning of string and not somewhere in the middle. The $
at the end means matching to the end of the string.
The (?:)
means non-capturing group - we don't want it in the capturing results, but we want to simple group some chars. We group it like this, because we want the /
char to be a nonsignificant part of the child path, and not a significant part of the parent path.