nginx try_files 重定向尾部斜杠和 403 禁止

nginx try_files 重定向尾部斜杠和 403 禁止

我正在尝试使用 try_files 创建一个组合的“超级缓存”->文件->模块模式(“超级缓存”术语取自 wordpress 超级缓存,因为它是一种类似的方法)。

适用于缓存的文件位于“缓存”文件夹内。

如果文件存在于其中一个位置,则应该提供该文件。

  1. /$缓存$uri
  2. /$缓存$uri/
  3. $uri
  4. $uri/

1.缓存 -> 2.文件 -> 3.模式

    location / {
        try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
    }

地址为“domain.com/css/style588.css”的示例

  1. 查找 /srv/www/domain.com/public_html/cache/css/style588.css
  2. 查找 /srv/www/domain.com/public_html/cache /css/style588.css/index.html 和 .php
  3. 查找 /srv/www/domain.com/public_html/css/style588.css
  4. 查找 /srv/www/domain.com/public_html /css/style588.css/index.html 和 .php
  5. 如果未找到:/srv/www/domain.com/public_html/index.php

我尝试使用以下配置使其工作。我做错了什么?

从 nginx.conf 中包含 domain.conf

server {
    ## index index.html index.php (defined in http block, works)

    server_name domain.com;
    root        /srv/www/domain.com/public_html;

    ## cache directory ##
    set $cache_dir 'cache';

    ## no cache if post ##
    if ($request_method = POST) {
        set $cache_dir 'null dir';
    }

    ## 1.cache -> 2.file -> 3.pattern ##
    location / {
        try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
    }

    ## .php (set cgi.fix_pathinfo=0 in php.ini, especially if php is on another machine) ##
    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

我尝试使用上述配置的示例

域名.com:(403 禁止访问)

public_html/index.php 沒有送達。

-

domain.com/non_existing_folder:(好的)

public_html/index.php 已送达。

-

domain.com/folder_exists_in_cache/:(好的)

public_html/cache/folder_exists_in_cache/index.html 已送达。

-

domain.com/folder_exists_in_cache:(重定向)(无尾部斜杠)

重定向标头 301 永久生效。 public_html/cache/folder_exists_in_cache/index.html 已送达。

但网址显示为domain.com/cache/folder_exists_in_cache/

-

uri domain.com/cache/existing_empty_folder:(403 禁止访问)

public_html/index.php 沒有送達。

-

我如何避免 403 禁止(以及当没有尾随斜杠但文件夹存在于缓存中时的重定向?)

已尝试设置文件夹权限,结果相同。

感谢您的帮助!

答案1

这应该有效:

    location ~ \.php$ {
        try_files $uri =404;
        ...
    }
    location = / {
        try_files /nonexistent /index.php?q=$uri&$args;
    }
    location / {
        try_files $cache_dir$uri $cache_dir$uri/index.html $uri $uri/index.html /index.php?q=$uri&$args;
    }

相关内容