Назад | Перейти на главную страницу

Почему мой псевдоним nginx не работает?

Я пытаюсь настроить псевдоним, чтобы при доступе к /phpmyadmin/, nginx извлечет его из /home/phpmyadmin/ а не из обычного корня документа. Однако каждый раз, когда я открываю URL-адрес, я получаю 404 по всем элементам, не прошедшим через fastcgi. fastcgi вроде работает нормально, а все остальное - нет. strace сообщает мне, что пытается вытащить все остальное из обычного корня документа, но я не могу понять, почему. Может ли кто-нибудь дать представление?

Вот соответствующая часть моей конфигурации:

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

Выяснили способ. Я не уверен, что это САМОЕ ЛУЧШЕЕ, но сейчас он определенно работает.

Вот что я сделал:

        location ~ ^/phpmyadmin/(.*)$
        {
                alias /home/phpmyadmin/$1;
        }

Я не уверен, но пробовали ли вы написать это так:

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

Кроме того, по какому URI вы пытаетесь получить к нему доступ?

Насколько я понимаю, вы должны использовать URI

/home/phpmyadmin/

и не только

/phpmyadmin/

Вы можете прочитать больше об этом здесь: http://wiki.nginx.org/HttpCoreModule

Пытаться

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

Причина, по которой это не работает, заключается в том, что сервер выбирает местоположение на основе регулярного выражения, а не местоположение на основе префикса, в котором есть псевдоним.

Он выберет только одного. Есть оператор, который вы можете использовать, чтобы получить местоположение на основе префикса, чтобы превзойти по рейтингу регулярное выражение, но тогда вы обнаружите, что php не будет работать. Решение будет похоже на ответ Кервина, где регулярное выражение PHP вложено в местоположение с директивой псевдонима.

Однако я подозреваю, что его параметр SCRIPT_FILENAME может там не работать, поскольку в URL-адресе и в каталоге с псевдонимами используются разные заглавные буквы.