Я сделал все, что мог, но не повезло. Я пытаюсь понять, как создать пространство имен для пользователя, скажем, user.mysite.com, и перенаправить его в его / ее папку (mysite.com/user). Есть ли способ заставить nginx перенаправлять все поддомены в соответствующие папки? Причина, по которой я делаю это так, заключается в том, что я хотел бы иметь возможность создавать подобные поддомены на лету без перезапуска nginx.
Мой файл nginx.conf сейчас выглядит так, к вашему сведению.
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;
}
}
Это небольшой фрагмент кода, который я нашел, который перенаправляет все поддомены на www.mydomain.com. Если бы вместо этого он мог перенаправить в их соответствующие каталоги, это было бы именно то, что мне нужно.
# remove subdomain
if ($host ~ "^www\.(.*?)\.(.{3,}\.([a-z]{2}\.[a-z]{2}|[a-z]{2,4}))$") {
set $host_without_sub $2;
rewrite ^/(.*)$ http://www.$host_without_sub/$1 permanent;
}
Еще целый день поисков в Google я нашел этот жемчуг:
####################### 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 ####################