子目录中TYPO3网站的Nginx配置

问题描述

我需要在 Nginx 上的域子目录中运行一个 TYPO3 网站:example.com/subdir

对于普通页面,该网站运行良好,但对于带有 tx_news-records 的页面却运行良好。一旦我调用新闻详细信息页面 (example.com/subdir/detailpages/slug-of-news-record.html),我就会收到以下错误

#1537633463 超出范围异常

无法解析哈希

这是我的 Nginx 配置:

location ^~/subdir {
    alias /var/www/html/subdirectory;
    disable_symlinks off;
    index index.PHP index.html index.htm;

    try_files $uri $uri/ @subdir;

    location ~ \.PHP$ {
        include /etc/Nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/PHP/PHP7.4-fpm.sock;
    }

    location ~* ^/subdir/fileadmin/(.*/)?_recycler_/ {
        deny all;
    }

    location ~* ^/subdir/typo3conf/ext/[^/]+/Resources/Private/ {
        deny all;
    }
    
    location ~* ^/subdir/(fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) {
    }
}

location @subdir {
    rewrite /subdir/(.*)$ /subdir/index.PHP?/$1$is_args$args last;
}


location ~* ^/subdir/(.*$) {
    return 301 /subdir/$1;
}

我的 Nginx 配置中缺少什么,是否有一些一般需要我批准的内容

解决方法

经过反复试验,我自己找到了解决方案。以下配置对我有用:

location ^~/subdir {
    alias /var/www/html/subdirectory;
    disable_symlinks off;
    index index.php index.html index.htm;

    try_files $uri $uri/ @subdir;

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }

    location ~* ^/subdir/fileadmin/(.*/)?_recycler_/ {
        deny all;
    }

    location ~* ^/subdir/typo3conf/ext/[^/]+/Resources/Private/ {
        deny all;
    }
    
    location ~* ^/subdir/(fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) {
    }
}

location @subdir {
    rewrite /subdir/(.*)$ /subdir/index.php?$args last;
}


location ~* ^/subdir/(.*$) {
    return 301 /subdir/$1;
}

和往常一样,这只是一个小小的变化。

location @subdir {
    rewrite /subdir/(.*)$ /subdir/index.php?/$1$is_args$args last;
}

改为

location @subdir {
    rewrite /subdir/(.*)$ /subdir/index.php?$args last;
}