title: nginx + php + owncloud index.php/apps/files rewritten
body: <p>Currently I mess up with nginx a lot.</p>
  
  <p>I do move an ownCloud from an Hosting Solution to an own VPS, based on nginx.</p>
  
  <p>After some problems now it's running well, but there is one thing I can't dive in.</p>
  
  <blockquote>
    <p>calling: owncloud.domain.tld :: OK clicking the "files-icon", wich
    actually redirects to the current view, but URL should change to:
    owncloud.domain.tld/index.php/apps/files :: FAILS</p>
  </blockquote>
  
  <p>Becaus nginx (or something between) converts "<code>index.php/apps/files</code>" to "<code>index.php/apps/index.php</code>"... whats up there? How can I fix this?
  Calling "<code>index.php/apps/gallery</code>" and others even works fine!</p>
  
  <p>The nginx file:</p>
  
  <pre><code># cloud.xyz.de
  
  server {
      listen *:80;
      server_name cloud.xyz.de;
  
      server_tokens off;
      root /nowhere;
  
      rewrite ^ https://$server_name$request_uri permanent;
  }
  
  server {
    listen *:443;
    server_name cloud.xyz.de;
  
    access_log /var/log/nginx/cloud_access.log;
    error_log /var/log/nginx/cloud_error.log;
  
    client_max_body_size 10G; # set max upload size
    fastcgi_buffers 64 4K;
  
    rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
    rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
    rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
    rewrite ^/apps/calendar/caldav.php /remote.php/caldav/ last; # this was injected after some reading in the WWW
    rewrite ^/apps/contacts/carddav.php /remote.php/carddav/ last; # this was injected after some reading in the WWW
    rewrite ^/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&amp;getfile=$2 last; # this was injected after some reading in the WWW
    rewrite ^/remote/(.*) /remote.php last; # this was injected after some reading in the WWW
  
    root /var/www/cloud.xyz.de;
    index index.php index.html index.htm;
  
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
  
    ssl on;
    ssl_certificate /etc/ssl/certs/xyz_de.crt;
    ssl_certificate_key /etc/ssl/private/xyz_de.key;
    ssl_protocols  SSLv3 TLSv1 TLSv1.2;
    ssl_ciphers AES:HIGH:!ADH:!MD5;
    ssl_prefer_server_ciphers   on;
  
    location = /robots.txt {
      allow all;
      log_not_found off;
      access_log off;
    }
  
    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
      deny all;
    }
  
    location / {
      # The following 2 rules are only needed with webfinger
      rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
      rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
  
      rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
      rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
  
      rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
  
      try_files $uri $uri/ index.php;
    }
  
    location ~ ^(.+?\.php)(/.*)?$ {
      try_files $1 = 404;
  
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$1;
  #    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $2;
      fastcgi_param HTTPS on;
      fastcgi_intercept_errors on; # this was injected after some reading in the WWW
      fastcgi_index index.php; # this was injected after some reading in the WWW
      fastcgi_pass 127.0.0.1:9000;
    }
  
    # Optional: set long EXPIRES header on static assets
    location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
      expires 30d;
      # Optional: Don't log access to assets
      access_log off;
    }
  }
  </code></pre>
  
  <p>This isn't such an big thing. But I'm searching now for hours and don't know where to search anymore.</p>