英语不是我的母语,请接受我对任何语言问题的道歉。
我想要一个具有自动根的configuration,不pipe域如何,看起来像这样(使用nginx):
root /var/www/${http_host}/public
但是我想让根域和“www”指向同一个目录,但没有“www”:
“ www.mysite.com ”和“ mysite.com ”
root / var / www / mysite.com / public
但是“ blog.mysite.com ”
root / var / www / blog.mysite.com / public
也就是说,只有“www”应该指向名称中没有“www”的目录。
是的,我看到还有其他类似的问题( 比如这个 ),但我很难删除“www”。 打扰一下!
我不会使用这样的通用server_name ,但是这应该工作,即使:
server_name ~.+$;
但也如此:
listen 443 ssl http2; server_name ~ ^((www|blog|account|bbs)\.)?mysite.com$; root /var/www/${http_host}/public ssl_certificate /ssl/${http_host}/{http_host}.pem ssl_certificate_key /ss/${http_host}/{http_host}.key
注意:它应该从ssl证书path中使用。
你可以像这样在http
块中使用map
:
map $http_host $rootdir { "~^(?:www\.)?(<domain>.+)$ $domain; }
然后在server
块中使用以下内容:
root /var/www/$rootdir/public;
在map
指令中,我们使用正则expression式将包含HTTP请求Host
头的$http_host
variables转换$http_host
$rootdir
。
在正则expression式中,我们通过排除www.
来将实际域名从Host
头部提取到$domain
variableswww.
前缀如果存在。 然后我们使用$domain
variables来构build$rootdir
variables。
但是,由于评论中提到的原因,此方法可能无法在SSL中使用。 在这种情况下,您需要实现一个configurationpipe理系统,该系统从模板生成域的configuration文件。