我试图设置一个别名,所以当有人访问/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和别名目录上有大小写不同的大小写。