放弃了,我会保留它以防将来有人为其他人提供解决方案。删除了 vbox,所以我无法再测试它们。我将改用 apache2。
我想在我的开发机器上配置我的 nginx 服务器,使其适用于所有匹配文件名的路径。
例如,一个项目有以下分支,因此我检查它们:
/var/www/版本1.1/html
/var/www/版本1.2/html
/var/www/版本2.1/html
以下是配置文件的重要部分:
root /var/www;
# Add index.php to the list if you are using PHP
index home.php index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
autoindex on;
try_files $uri $uri/ =404;
}
location ~ version(.+)/html/\.php$ {
alias $1/html;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index home.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
编辑2 还尝试过:
location / {
autoindex on;
try_files $uri $uri/ $uri.php =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index home.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
问题:
如果我location ~ \.php$
仅加载,服务器会正确返回 php 文件。但是,它不会在正确的路径中加载 css 和 js 包含,它会尝试从 var/www 而不是基本目录(例如 /var/www/version1.1/html)加载它们,因此显然这是行不通的,因为他们永远找不到这些文件。
编辑:
我想
localhost/version1.1/html/register
加载/var/www/version1.1/html/register.php
localhost/version1.1/html/css/main.css
加载/var/www/version1.1/html/css/main.css
localhost/version1.2/html/register
加载/var/www/version1.2/html/register.php
localhost/version1.2/html/css/main.css
加载/var/www/version1.2/html/css/main.css
我还希望能够检出版本 1.6 并使其像其他版本一样工作,而不必每次都去编辑配置文件。
答案1
您应该使其与这个位置块一起工作:
location / {
autoindex on;
try_files $uri $uri/ $uri.php =404;
}
location ~ \.php$
然后除此之外您还需要使用正常 nginx 配置中的标准 PHP块。
try_files
$uri
首先尝试使用和变量来提供物理文件$uri/
。如果找不到这样的文件,则尝试加载在.php
末尾添加的文件名,最后如果仍未找到这样的文件,则返回 404。
您还需要确保您有一个正确的root
声明。 就您而言,它应该是:
root /var/www;
可以是server
同级,也可以是location /
平级。