nginx переписать - файлы существуют, но переписаны - PullRequest
0 голосов
/ 04 мая 2011

У меня есть приложение php под /path/

все, что не существует (файлы / каталоги), должно быть перенаправлено на /path/index.php

if (!-e $request_filename)
{
  rewrite ^/path/(.+)$ /path/index.php last;
}

и все работает отдельно от реальных файлов, по некоторым причинам .css-файлы, которые существуют, все еще перенаправляются в индекс ... например, /path/CSS/style.css

UPDATE

исправлено с помощью rewrite ^/path/(.+)/$ /path/index.php last;, потому что все мои URL, которые нужно переписать, заканчиваются косой чертой, но все еще сбивают с толку

nginx.conf

http {
 include       /etc/nginx/mime.types;  
 access_log  /var/log/nginx/access.log;

 sendfile        on;

 keepalive_timeout  65;
 tcp_nodelay        on;

 gzip  on;
 gzip_disable "MSIE [1-6]\.(?!.*SV1)";

 include /etc/nginx/conf.d/*.conf;
 include /etc/nginx/sites-enabled/*;
}

полный сайт включен / файл

server {
  listen  valueyourvote.org.nz:80;
  server_name  valueyourvote.org.nz valueyourvote.co.nz;

  if ($http_host != www.valueyourvote.org.nz) {
      rewrite  (.*)  http://www.valueyourvote.org.nz$1;
  }
  access_log  /var/log/nginx/valueyourvote.org.nz.access.log;
  error_log   /var/log/nginx/valueyourvote.org.nz.error.log;
  location / {
    root   /var/www/vote.incode.co.nz/;
    index  index.php index.html index.htm;
  }

  if (!-e $request_filename)
  {
    rewrite ^/supercity-2010/(.+)/$ /supercity-2010/index.php last;
  }


  # Pass all .php files onto a php-fpm/php-fcgi server.
  location ~ \.php$ {
    fastcgi_pass   localhost:9000;
    fastcgi_index  index.php;

    include fastcgi_params;
  }

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  location ~ /\.ht {
     deny  all;
  }
}   

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

Вы должны избегать использования "if" в nginx, когда это возможно - см. "If is evil" в вики nginx. Для вашего использования лучше использовать директиву try_files .

Что касается неработающих директив, то вы тестируете файлы, выходящие за рамки вашей "корневой" директивы - то есть nginx не знает, где искать, являются ли эти URI файлами!

Поместите директиву try_files внутри вашего блока местоположения, и это должно сработать.

0 голосов
/ 15 октября 2015

Вы можете сделать это

location [your_location]{
   try_files $uri $uri/ @w;
 }
location @w {
rewrite ^/path/(.+)$ /path/index.php last;
}
...