Próbuję skonfigurować alias, więc gdy ktoś uzyska dostęp /phpmyadmin/
, nginx pobierze go /home/phpmyadmin/
raczej niż ze zwykłego katalogu głównego dokumentu. Jednak za każdym razem, gdy ściągam URL, daje mi 404 na wszystkie przedmioty, które nie zostały przeciągnięte przez fastcgi. fastcgi wydaje się działać dobrze, podczas gdy reszta nie. strace
mówi mi, że próbuje wyciągnąć wszystko inne ze zwykłego katalogu głównego dokumentu, ale nie mogę zrozumieć, dlaczego. Czy ktoś może zapewnić wgląd?
Oto odpowiednia część mojej konfiguracji:
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/;
}
/
w aliasu oraz zlocation
dyrektywy, żądając/phpmyadminfile
rzeczywiście cię/home/phpmyadminfile
. Jeśli chodzi o to, dlaczego konfiguracja w pytaniu nie działa, wydaje mi się, że jest poprawna, więc podejrzewam, żelocation
nie pokazano innej dyrektywy, która pasuje, gdy nie jest zamierzona. W takim przypadku, jakoalias
kończące sięlocation
prefiksem, dokumenty nginx sugerują użycieroot /home;
zamiast tego .Odpowiedzi:
Wymyśliłem sposób. Nie jestem pewien, czy to jest NAJLEPSZE, ale na pewno działa teraz.
Oto co zrobiłem:
źródło
Nie jestem pewien, ale czy próbowałeś napisać to w ten sposób:
Ponadto, z jakiego identyfikatora URI próbujesz uzyskać do niego dostęp?
O ile rozumiem, musisz użyć URI
i nie tylko
Możesz przeczytać więcej na ten temat tutaj: http://wiki.nginx.org/HttpCoreModule
źródło
Próbować
źródło
Przyczyną tego nie jest to, że serwer wybiera lokalizację opartą na wyrażeniach regularnych, a nie lokalizację opartą na prefiksie, w której znajduje się alias.
Wybierze tylko jeden. Istnieje operator, za pomocą którego można uzyskać lokalizację opartą na prefiksie, aby przewyższać pozycję wyrażenia regularnego, ale wtedy okaże się, że php nie będzie działać. Rozwiązaniem będzie taka jak odpowiedź Kervina, w której wyrażenie regularne PHP jest zagnieżdżone w lokalizacji z dyrektywą aliasową.
Podejrzewam jednak, że jego ustawienie SCRIPT_FILENAME może tam nie działać, ponieważ w adresie URL i katalogu aliasu występuje inna wielkość liter.
źródło