2011-10-27 50 views
1

我试图在drupal中使用子目录设置多站点环境。这里有一组非常好的说明:http://www.drupalcoder.com/blog/drupal-multisite-in-subfolders,但它是特定于apache,我正在与Nginx合作。Drupal中的多站点环境使用nginx上的子目录

我怎么在Nginx的做这些两两件事:

从链接引用上面:

添加别名Apache配置文件

我们要为3个子目录请求去到相同的Drupal 实例。我们可以使用Apache的别名功能来做到这一点。

Alias /subdir1 /var/www 
Alias /subdir2 /var/www 
Alias /subdir3 /var/www 

我假设这里Drupal的代码库托管在/ var/WWW的 机器上。

重定向所有请求到index.php

现在,我们的服务从一个代码库中的所有要求,我们必须 重定向所有请求到index.php。这需要完成,因为所有的 Drupal请求都来自一个叫做index.php的端点。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/subdir1/(.*)$ 
RewriteRule ^(.*)$ /subdir1/index.php?q=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/subdir2/(.*)$ 
RewriteRule ^(.*)$ /subdir2/index.php?q=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/subdir3/(.*)$ 
RewriteRule ^(.*)$ /subdir3/index.php?q=$1 [L,QSA] 
+0

我已经尝试了下面提到的解决方案,但都没有为我工作。我正在努力解决同一问题! –

回答

0

这应该工作(没有检查)别名:

location ~ ^/subdir\d+/(.*)$ { 
    alias /var/www; 
} 

和像这样的重写&的FastCGI-PHP:

location/{ 
    root /var/www; 
    index index.php index.html; 

    if (!-f $request_filename) { 
     rewrite ^(.*)$ /index.php?q=$1 last; 
     break; 
    } 

    if (!-d $request_filename) { 
     rewrite ^(.*)$ /index.php?q=$1 last; 
     break; 
    } 
} 

location ~ .php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 

    fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; 
    fastcgi_param QUERY_STRING  $query_string; 
    fastcgi_param REQUEST_METHOD $request_method; 
    fastcgi_param CONTENT_TYPE  $content_type; 
    fastcgi_param CONTENT_LENGTH $content_length; 
} 
0

我会用一个地图在http级别将/ subdir作为变量捕获所有内容。然后你可以避免引入位置依赖的正则表达式位置。

map $uri $params { 
    ~^/[^/]+/(?<subpath>.*) $subpath; 
} 

server { 
    root /var/www; 

    location /subdir1/ { 
     try_files $uri $uri/ /subdir1/index.php?q=$params 
    } 

    location /subdir2/ { 
     try_files $uri $uri/ /subdir2/index.php?q=$params 
    } 

    location /subdir3/ { 
     try_files $uri $uri/ /subdir3/index.php?q=$params 
    } 
} 
相关问题