404在codeigniter和nginx中的现有文件上

时间:2016-12-16 05:24:25

标签: php codeigniter nginx

我在nginx服务器的子文件夹中设置了codeigniter。

我在nginx中安装了多个codeigniter,例如:

www.example.com/test

www.example.com/test1

我在测试目录sitemap中有一个文件夹。当我访问www.example.com/test/sitemap/sitemap.xml.gz时,它给我404错误。

我的nginx文件是

server {
  listen 80;
  listen[::]: 80;

  root / usr / share / nginx / html;
  index index.php index.html index.htm;

  server_name www.example.com;

  access_log /
    var / log / nginx / access.log;
  error_log /
    var / log / nginx / error.log error;

  location / {
    try_files $uri $uri / = 404;
  }

  location / test {
    root / usr / share / nginx / html / test;
    index index.html index.htm index.php;
    try_files $uri $uri / /test/index.php;
    location~ * ^ /(assets|files|robots\.txt) { }
  }

  location / test2 {
    root / usr / share / nginx / html / test2;
    index index.html index.htm index.php;
    try_files $uri $uri / /test2/index.php;

  }
  error_page 404 / 404. html;
  error_page 500 502 503 504 / 50 x.html;
  location = /50x.html {
  root / usr / share / nginx / html;
}

location~ * \.(ico | css | js | gif | jpe ? g | png | svg | woff2 | woff | ttf) $ {
  expires max;
  add_header Pragma public;
  add_header Cache - Control "public, must-revalidate, proxy-revalidate";
}

location~ * ^ /(assets|files|robots\.txt) { }
location~/\.ht {
deny all;
}

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

1 个答案:

答案 0 :(得分:0)

您的每位置root指令可能不必要且不正确。

文档根目录通常是从周围的server块继承的,只有在location块中为该上下文发生更改时才需要指定。

如果您的URI /test/index.php位于/usr/share/nginx/html/test/index.php,那么root的正确值为/usr/share/nginx/html,无论它是否出现在server块中或location阻止。

您当前正在指定路径,例如:/usr/share/nginx/html/test/test/index.php/usr/share/nginx/html/test/test/sitemap/sitemap.xml.gz

您应该从root块中删除location个句子,因为上面已经在server块中指定了正确的值。

有关详细信息,请参阅this document