![Nginx 子目录 Drupal + 其他应用程序](https://linux22.com/image/588376/Nginx%20%E5%AD%90%E7%9B%AE%E5%BD%95%20Drupal%20%2B%20%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我有一个 drupal 应用程序和另外两个用 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 路径、所有应用程序或 drupal 之一的 404
所以我真的迷路了......
这里有一个测试(可能有一些好事):
# 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 :)
答案1
按照预定义的顺序检查位置指令(http://wiki.nginx.org/HttpCoreModule#location)。对于您的情况,PHP 文件的正则表达式是 anc 缓存管理,首先考虑,然后是 / 位置和(如果 / 不匹配)/app1/ 和 /app2/ 指令。由于 root 始终匹配,因此永远不会检查 /app1/。
解决方案很简单:将 /app1/ 和 /app2/ 放在 /-location 指令之前,然后重新加载 nginx 配置。
燃烧的利奥