nginx 别名和动态目录名
nginx aliases and dynamic directory names
我在这上面花了很多时间,但我找不到解决方案。
我需要一种方法来将相同的 url 但不同的根目录指向同一个应用程序。我不想使用重写,因为根目录名称必须由应用程序处理并重写丢弃它。
http://www.host.com/a/ --> /var/www/html/project/
http://www.host.com/b/ --> /var/www/html/project/
http://www.host.com/c/ --> /var/www/html/project/
我已经设法在 nginx 中配置了一个别名目录,其名称为 fixed vdirectory
并使 nginx 将请求转发给 fastcgi。
location /vdirectory {
alias /var/www/html/project/;
try_files $uri $uri/ /vdirectory/index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
以上工作正常。
因为我不想使用固定的根目录名称而是任意的,所以这是我到目前为止所管理的:
location ~ ^/(.?)$ {
alias /var/www/html/project/;
try_files $uri $uri/ //index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
不用说,returns 404。这是一个好兆头,因为这意味着正则表达式已识别路径,但请求未正确转发。
工作配置与错误配置之间的唯一区别是 /vdirectory
与 ~ ^/(.?)$
alias
在正则表达式 location
块中的工作方式不同。有关详细信息,请参阅 this document。您将需要捕获 URI 的其余部分并将其附加到 alias
值。例如:
location ~ ^/(?<prefix>[^/]+)/(?<name>.*)$ {
alias /var/www/html/project/$name;
if (!-e $request_filename) { rewrite ^ /$prefix/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
我避免在同一块中使用 try_files
和 alias
,因为 long term issues. See this caution 使用 if
。
我在这上面花了很多时间,但我找不到解决方案。 我需要一种方法来将相同的 url 但不同的根目录指向同一个应用程序。我不想使用重写,因为根目录名称必须由应用程序处理并重写丢弃它。
http://www.host.com/a/ --> /var/www/html/project/
http://www.host.com/b/ --> /var/www/html/project/
http://www.host.com/c/ --> /var/www/html/project/
我已经设法在 nginx 中配置了一个别名目录,其名称为 fixed vdirectory
并使 nginx 将请求转发给 fastcgi。
location /vdirectory {
alias /var/www/html/project/;
try_files $uri $uri/ /vdirectory/index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
以上工作正常。
因为我不想使用固定的根目录名称而是任意的,所以这是我到目前为止所管理的:
location ~ ^/(.?)$ {
alias /var/www/html/project/;
try_files $uri $uri/ //index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
不用说,returns 404。这是一个好兆头,因为这意味着正则表达式已识别路径,但请求未正确转发。
工作配置与错误配置之间的唯一区别是 /vdirectory
与 ~ ^/(.?)$
alias
在正则表达式 location
块中的工作方式不同。有关详细信息,请参阅 this document。您将需要捕获 URI 的其余部分并将其附加到 alias
值。例如:
location ~ ^/(?<prefix>[^/]+)/(?<name>.*)$ {
alias /var/www/html/project/$name;
if (!-e $request_filename) { rewrite ^ /$prefix/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
我避免在同一块中使用 try_files
和 alias
,因为 long term issues. See this caution 使用 if
。