【问题标题】:multisite environment in drupal using subdirectories on nginxdrupal中的多站点环境使用nginx上的子目录
【发布时间】:2011-10-27 03:01:34
【问题描述】:

我正在尝试使用子目录在 drupal 中设置多站点环境。这里有一组非常好的说明:http://www.drupalcoder.com/blog/drupal-multisite-in-subfolders,但它特定于 apache,我正在使用 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]

【问题讨论】:

  • 我已经尝试了下面提到的两种解决方案,但没有一个对我有用。我正在努力解决同样的问题!

标签: drupal nginx


【解决方案1】:

这应该对别名有效(未检查):

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;
}

【讨论】:

    【解决方案2】:

    我会使用映射来捕获 /subdir 之后的所有内容作为 http 级别的变量。然后你可以避免引入位置依赖的正则表达式位置。

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多