Flarum 与 Laravel(Nginx)一起放在子目录中

Flarum 与 Laravel(Nginx)一起放在子目录中

我一直试图将 Flarum 放在子目录中,而将 Laravel 放在根目录中。我尝试了很多方法,但从服务器得到的唯一响应要么是 404,要么是下载的 laravel index.php(当我访问 /forum 时)。

据我所记得,我曾尝试过:

  • location ~\.php每个子目录都有一个单独的。
  • 将 php 位置放在子目录位置。
  • 在该位置尝试 root 和别名。

我的设置如下:

  • /var/www/laravel/public/ 上的 Laravel 文件
  • /var/www/forum/ 上的 Flarum 文件
  • /var/run/php5-fpm.sock 上的 PHP5-FPM

Laravel 一直在执行整个过程,但我无法让 flarum 正常工作。

server {
    listen       80;
    server_name  website.web
    return         301 https://website.web$request_uri;
}

server {
    listen         443 ssl;
    server_name    website.web
    access_log /var/www/logs/access.log;
    error_log /var/www/logs/error.log warn;
    ssl_certificate /var/www/ssl/website.chained.crt;
    ssl_certificate_key /var/www/ssl/website.key;
    root /var/www/laravel/public/;
    index index.php;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /forum/ {
            root /var/www/;
            try_files $uri $uri/ /index.php?$query_string;
    }

    location /forum/admin/ {
            root /var/www/;
            try_files $uri $uri/ /admin.php?$query_string;
    }

    location /forum/api/ {
            root /var/www/;
            try_files $uri $uri/ /api.php?$query_string;
    }

    location /flarum {
        deny all;
        return 404;
    }

    location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME     $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

如果配置由于某种原因无法工作,那么这是它的 pastebin 链接。

答案1

您有两个具有不同文档根的应用程序,它们都需要 PHP 支持。如果您保持 Laravel 配置不变,则可以使用嵌套位置块来实现 Flarum 配置。

类似这样的方法可能会有效:

location ^~ /forum {
    root /var/www;
    try_files $uri $uri/ /forum/index.php?$query_string;

    location ~ \.php$ {
        try_files $uri /forum/index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location /forum/admin {
        try_files $uri $uri/ /forum/admin.php?$query_string;
    }

    location /forum/api {
        try_files $uri $uri/ /forum/api.php?$query_string;
    }
}

请注意以下几点:

location ^~ /forum是一个优先于顶层的前缀位置location ~ \.php$,允许嵌套位置处理 Flarum 的 PHP 脚本。

/forum/index.phpURI,/forum/前缀是获取正确index.php文件所必需的。您不需要=404try_files指令上使用默认 URI 和(请只使用其中一个)。我删除了fastcgi不执行任何操作的行。include fastcgi_params在其他fastcgi_param指令之前使用 和 以避免意外的副作用。

这是一个通用的解决方案,我还没有用 Laravel 或 Flarum 实际上测试过它。

查看文档这里了解更多信息。

相关内容