Nginx with phpmyadmin wrong redirect after login

2020-05-24 04:29发布

问题:

I'm setting up phpMyAdmin with nginx. I can visit phpMyAdmin at http://localhost/phpmyadmin. However, when I logged in, the URL is redirected to http://localhost/sql.php instead of http://localhost/phpmyadmin/sql.php.

I have phpMyAdmin symlinked in my /var/www/html/ folder.

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Note: You should disable gzip for SSL traffic.
    # See: https://bugs.debian.org/773332
    #
    # Read up on ssl_ciphers to ensure a secure configuration.
    # See: https://bugs.debian.org/765782
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;

    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        include /etc/nginx/snippets/fastcgi-php.conf;
        # With php7.0-fpm:
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

回答1:

I have actually been through so many solutions on StackOverflow today and sadly none of which work and some even given some horrid recommendations. What's scary is how many I came across that were marked as answers.

I just did a brand new Ubuntu 16.04 LEMP server, everything cleanly installed this morning Nginx, mySQL, PHP7.0 and PhpMyAdmin.

This problem of redirecting to

h**p://my.server.ip/

after logging into phpymadmin instead of

h**p://my.server.ip/phpmyadmin

is nothing actually to do with the cgi.fix_pathinfo being set to 0 as recommended by all those guides you read. Read up a little more on why it should be set to 0 in your php.ini file and don't just go and disable it as above.

So in other words leave (as recommended to you) cgi.fix_pathinfo = 0 in your config file for PHP.

THE FIX from this web site (the only one with the correct answer) is to add the following to your /etc/nginx/sites-available/default configuration file. Then restart Nginx ... works immediately, no more re-directing back to root after login.

# Phpmyadmin Configurations
    location /phpmyadmin {
       root /usr/share/;
       index index.php index.html index.htm;
       location ~ ^/phpmyadmin/(.+\.php)$ {
               try_files $uri =404;
               root /usr/share/;
               fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
       }
       location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
               root /usr/share/;
       }
   }

   location /phpMyAdmin {
       rewrite ^/* /phpmyadmin last;
   }


回答2:

You can do as simple as editing phpmyadmin config file without overheading NGINX

  • Open config.inc.php file sudo nano /etc/phpmyadmin/config.inc.php
  • Add the following code to it

    $cfg['PmaAbsoluteUri'] = $_SERVER[HTTP_HOST].dirname($_SERVER[SCRIPT_NAME]);

  • Done

Credits : xaz0r



回答3:

Changing cgi.fix_pathinfo back to 1 fixed the issue for me as well. However, I'm not certain that this is a good solution since guides tell:

"This is an extremely insecure setting because it tells PHP to attempt to execute the closest file it can find if the requested PHP file cannot be found. This basically would allow users to craft PHP requests in a way that would allow them to execute scripts that they shouldn't be allowed to execute."

So it seems there should be a better fix to this so I wouldn't have to compromise on security.

The first post in this topic doesn't work for me. It just disables phpmyadmin... So at the moment I'm left only with cgi.fix_pathinfo workaround.



回答4:

Some of the guides teach you that you have to enable cgi.fix_pathinfo param in the php.ini and set its value to 0 (so effectively disabling it ;)). I did make this change aswel on my php.ini files. After this installed phpmyadmin and the error of redirecting occurs.

After loads of searching, and none of the answers i found were working, it suddenly crossed my mind i'd changed the value of cgi.fix_pathinfo, i put it back to its default value and voila no weird redirection.



回答5:

I also ran into this problem and all the solutions I found looked a lot like workarounds which might break once you update phpmyadmin or nginx. I therefore decided to use a subdomain for phpmyadmin.

My phpmyadmin is now available at https://phpmyadmin.your-domain.com. This might be a bit of an overhead, since you need to add the subdomain and get a certificate for this subdomain but at least it won't break in case there is an update for phpymadmin, nginx, etc.



回答6:

After google for some time, just open config.inc.php and add:

$cfg['PmaAbsoluteUri'] = 'your based uri'; 

and everything works perfectly!