为什么我的nginx别名不工作?

我试图设置一个别名,所以当有人访问/phpmyadmin/nginx会从/home/phpmyadmin/而不是从通常的文档根目录中取出它。 但是,每次我拉起URL,它都会给我一个没有通过fastcgi拉的所有项目的404。 fastcgi似乎工作正常,而其余的不是。 strace告诉我,它试图从通常的文件根目录中拉出所有的东西,但我不明白为什么。 谁能提供一些见解?

这是我的configuration的相关部分:

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

这不起作用的原因是服务器正在select基于正则expression式的位置,而不是基于前缀的位置,其中有别名。

它只会select一个。 有一个操作符,你可以用来获得一个基于前缀的位置,以超过一个正则expression式,但你会发现PHP将无法正常工作。 解决scheme将是一个像kervin的答案PHP正则expression式嵌套在与alias指令位置内。

我怀疑他的SCRIPT_FILENAME设置可能不工作,因为在URL和别名目录上有大小写不同的大小写。