내 nginx 별칭이 작동하지 않는 이유는 무엇입니까? 별칭을 설정하려고 합니다. 그러나 URL을 가져올

누군가가에 액세스 할 때 /phpmyadmin/nginx가 /home/phpmyadmin/일반적인 문서 루트가 아닌 별칭 을 가져 오도록 별칭을 설정하려고 합니다. 그러나 URL을 가져올 때마다 fastcgi를 통해 가져 오지 않은 모든 항목에 대해 404가 표시됩니다. 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가 작동하지 않습니다. 해결책은 kervin의 대답과 같으며 PHP 정규 표현식이 별칭 지시문으로 위치 안에 중첩됩니다.

그러나 URL과 별칭 디렉토리에 대문자가 다르기 때문에 그의 SCRIPT_FILENAME 설정이 작동하지 않을 수 있습니다.


답변