我一直试图将 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.php
URI,/forum/
前缀是获取正确index.php
文件所必需的。您不需要=404
在try_files
指令上使用默认 URI 和(请只使用其中一个)。我删除了fastcgi
不执行任何操作的行。include fastcgi_params
在其他fastcgi_param
指令之前使用 和 以避免意外的副作用。
这是一个通用的解决方案,我还没有用 Laravel 或 Flarum 实际上测试过它。
查看文档这里了解更多信息。