我已经做了所有的search,但没有运气。 我试图找出如何为用户创build一个名称空间,说user.mysite.com,并有redirect到他/她的文件夹(mysite.com/user)。 有没有办法使nginx转发所有子域到他们各自的文件夹? 我这样做的原因是因为我希望能够使这样的子域名,而不必重新启动nginx。
我的nginx.conf文件看起来像这个FYI。
server { # add www. if ($host ~ ^(?!www)) { rewrite ^/(.*)$ http://www.$host/$1 permanent; } server_name www.mydomain.com; access_log /var/log/nginx/mydomain.com.access.log; error_log /var/log/nginx/mydomain.com.error.log; root /usr/share/nginx/mydomain.com/; index index.php index.html index.htm; # use fastcgi for all php files location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to apache .htaccess files location ~ /\.ht { deny all; } }
这是我发现将所有子域名redirect到www.mydomain.com的一小段代码。 如果它可以redirect到各自的目录,而不是我所需要的。
# remove subdomain if ($host ~ "^www\.(.*?)\.(.{3,}\.([az]{2}\.[az]{2}|[az]{2,4}))$") { set $host_without_sub $2; rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent; }
再过了一整天的search结果,我发现这个gem:
####################### Magic RewriteRules ####################### uninitialized_variable_warn off; ##### Rewrite rules for domain.tld => www.domain.tld ##### if ($host ~* ^([^.]+\.[^.]+)$) { set $host_without_www $1; rewrite ^(.*) $scheme://www.$host_without_www$1 permanent; } ##### Rewrite rules for subdomains with automatic SSL support ##### set $redirect_ssl 'no'; if ($host ~* ^(.*)\.([^.]+\.[^.]+)$) { set $ssl_subdomain $1; set $host_without_www $1.$2; } if (-e $document_root/config/ssl/$ssl_subdomain) { set $redirect_ssl 'yes'; } if ($scheme = 'https') { set $redirect_ssl 'no'; } if ($redirect_ssl = 'yes') { rewrite ^(.*) https://$ssl_subdomain.$host_without_www$1 permanent; } ##### Rewrite rules for automatic authentication ##### if ($host ~* ^([^.]+)\.[^.]+\.[^.]+$) { set $auth_subdomain $1; } if (-e $document_root/config/auth/$auth_subdomain) { rewrite ^(.*)$ /auth$1; break; } ##### Rewrite rules for automatic subdirectory rewriting ##### set $redirect_subdir 'yes'; if ($redirect_subdir_done = 'yes') { set $redirect_subdir 'no'; } if ($host ~* 'www\.[^.]+\.[^.]+$') { set $redirect_subdir 'no'; } if ($host ~* ^([^.]+)\.[^.]+\.[^.]+$) { set $subdir_domain '$1'; } if ($redirect_subdir = 'yes') { set $redirect_subdir_done 'yes'; rewrite ^(.*)$ /$subdir_domain$1 break; } #################### End Of Magic RewriteRule ####################