Php

Nginx 子目錄 Drupal + 其他應用

  • November 24, 2014

我有一個 drupal 應用程序和另外 2 個用 php 編寫的應用程序,我想為 drupal 使用重寫 uri,並將 drupal 放在虛擬根目錄 / 中,另一個按他們的名字……並將伺服器記憶體用於每個應用程序的 img。

前任 :

  • xxx.com 或 xxx.com/ –> /var/www/xxx.com/drupal/
  • xxx.com/app1 或 xxx.com/app1/ —-> /var/www/xxx.com/app1/
  • xxx.com/app2 或 xxx.com/app2/ —-> /var/www/xxx.com/app2/

我已經測試過:別名,每個位置的根目錄,有條件的 $request_uri,單獨的配置……並且總是一個錯誤:img 路徑,php 路徑,404 用於所有應用程序或 drupal 之一

所以我真的迷路了……

這是一個測試(也許是一些好東西):

   # enforce www
if ($host !~* ^(www)) {
   rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
}

location / {
   root   /var/www/gplaza.cl/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 /app1/ {
   alias /var/www/gplaza.cl/app1/;   
   index index.php;
}

location /app2/ {
   alias /var/www/gplaza.cl/app2/;   
   index index.php;
}

location ~ \.php$ {
   fastcgi_pass   127.0.0.1:9000;
   include /etc/nginx/fastcgi_params;
   fastcgi_param SCRIPT_FILENAME /var/www/xxx.com$fastcgi_script_name;
}

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {

   set $static_content /var/www/xxx.com/Drupal;

   if ($request_uri ~ ^/app1) {
       set $static_content /var/www/xxx.com/app1;
   }
   if ($request_uri ~ ^/app2) {
       set $static_content /var/www/gplaza.cl/app2;
   }

   expires     30d;
   access_log  off;
   root $static_content;
}
thank a lot if anybody can help me :)

位置指令以預定義的順序檢查(http://wiki.nginx.org/HttpCoreModule#location)。在您的情況下,PHP文件的正則表達式是首先考慮anc記憶體管理,然後是/位置和(如果/不應該匹配)/app1/和/app2/指令。由於 root 將始終匹配,因此永遠不會檢查 /app1/。

解決方案很簡單:將 /app1/ 和 /app2/ 放在 /-location 指令之前並重新載入 nginx 配置。

BurninLeo

引用自:https://serverfault.com/questions/402552