【问题标题】:location subdirectory nginx with rewrite drupal位置子目录 nginx 与重写 drupal
【发布时间】:2014-05-17 00:19:45
【问题描述】:

我有这个nginx的配置:

server {
    listen       80;
    server_name  example.com www.example.com;

    location = / {
            root /var/www/example.com;
            index index.php;
    }

    location / {
            root   /var/www/example.com/Drupal;
            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$ {

            set $php_root /var/www/example.com/Drupal;

            if ($request_uri ~ ^/MassMail) {
                    set $php_root /var/www/example.com/MassMail;
            }

            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;

    }

我在 php 中有 2 个应用程序:

  • /var/www/example.com/MassMail 中的第一个
  • /var/www/example.com/Drupal(Drupal 博客)中的第二个

我的服务器提供正确的两个 URL

example.com/ --> drupal 博客

example.com/MassMail --> 其他应用

但它不提供图像或 JavaScript ...(错误 404)

对于 serve img 等,我已经测试了很多这样的东西(例如...):

    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
           expires         30d;
            access_log      off;
    }

可能缺少根目录,但是哪个?

【问题讨论】:

    标签: nginx drupal-7


    【解决方案1】:

    你的 php 认为 MassMail 安装在 /(根目录),尝试为 staitc 文件添加第二个位置:

    location ~* ^/MassMail.+.(jpg|jpeg|gif|css|png|js|ico)$ {
               expires         30d;
                access_log      off;
               root /var/www/xxx.com/MassMail;
    }
    

    配置#2

    location ~* ^/(.*)/.+.(jpg|jpeg|gif|css|png|js|ico)$ {
      expires         30d;
         access_log      off;
       root /var/www/xxx.com/$1;
    }
    

    配置#3

    将每个应用程序配置放在特殊文件中(MassMail 的示例):

    applications/massmail.conf

      location ~ \.php$ {
    
                set $php_root /var/www/xxx.com/Drupal;
    
                if ($request_uri ~ ^/MassMail) {
                        set $php_root /var/www/xxx.com/MassMail;
                }
    
       location ~* ^/MassMail.+.(jpg|jpeg|gif|css|png|js|ico)$ {
               expires         30d;
                access_log      off;
               root /var/www/xxx.com/MassMail;
       }
    

    nginx.conf

    .....
    include applications/massmail.conf;
    

    【讨论】:

    • 谢谢谢尔盖!实际上是的,它可以工作...但是我有 2 个位置的静态内容用于 2 个应用程序...如果我有 75 个应用程序?静态内容的 75 个位置 ??这东西没有通用的方法??
    • 其实你可以实现第二个配置,但这不是一个好习惯。更好的方法是使用带有配置的每个应用程序特殊文件(参见示例 #3)
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多