За последние 24 часа нас посетили 15756 программистов и 1664 робота. Сейчас ищут 811 программистов ...

Помогите переписать простой htaccess в nginx

Тема в разделе "Прочее", создана пользователем rambap, 5 апр 2013.

  1. rambap

    rambap Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    25
    Симпатии:
    0
    Есть два небольших файла .htaccess нужно переписать их в правила nginx
    Пользовался сервисами winginx.ru/htaccess и www.anilcetin.com/convert-apache-htaccess-to-nginx/ - не помогло, в одном случае выскакивала ошибка при попытке перезагрузить nginx:
    service nginx reload
    nginx: [emerg] pcre_compile() failed: nothing to repeat in "^/(.*)?*$" at "*$" in /etc/nginx/nginx.conf:537
    nginx: configuration file /etc/nginx/nginx.conf test failed

    В другом случае просто ничего не работало. Помогите пожалуйста, вот содержимое файлов htaccess:

    1. Находится в корне сайта

    AddDefaultCharset UTF-8

    Options +FollowSymlinks

    RewriteEngine On
    RewriteBase /


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ index.php?_route_=$1 [L,QSA]



    2. Находится в папке /image/cache/

    Options +FollowSymlinks

    RewriteEngine On

    RewriteBase /image/cache/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ image_gate.php?image=$1 [L,QSA]

    Помогите пожалуйста
     
  2. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Первый случай
    Код (PHP):
    1. location /  {
    2.              index  index.php;
    3.              if (!-$request_filename)
    4.              {
    5.                rewrite ^/(.*)/index.php?_route_=$1 last;
    6.              }
    7.     }
    Второй случай
    Код (PHP):
    1. location /image/cache/  {
    2.              root /;
    3.              if (!-$request_filename)
    4.              {
    5.                rewrite ^/(.*)$ image_gate.php?image=$1 last;
    6.              }
    7.     }
    Во втором случае если ошибку покажет -- закоментить root /;

    Добавлено спустя 5 минут 53 секунды:
    Код (Text):
    1. location ~ /\.htaccess {deny all;}
    Тож можно добавить xDD
     
  3. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    root /image/cache/;
    даже так, а не закомментить. Короч смотря где image_gate.php
     
  4. rambap

    rambap Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    25
    Симпатии:
    0
    image_gate.php находится в папке /image/cache/
    К сожалению вторая часть не заработала... :(

    Вариант
    location /image/cache/ {
    root /image/cache/;
    if (!-e $request_filename)
    {
    rewrite ^/(.*)$ image_gate.php?image=$1 last;
    }
    }

    дает такие ошибки в nginx:

    63.125.36.40 - - [06/Apr/2013:15:44:42 +0200] "GET /image/cache/data/p/182000/182848-120x120.jpg HTTP/1.1" 404 3652 "http://domen.co.uk/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31 AlexaToolbar/alxg-3.1" "-"
     
  5. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Код (PHP):
    1. location /image/cache/ {
    2.   if (!-$request_filename){
    3.     rewrite ^/image/cache/(.*)\?*/image/cache/image_gate.php?image=$1 break;
    4.   }
    5. }} 
     
  6. rambap

    rambap Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    25
    Симпатии:
    0
    Нет, к сожалению. так тоже не заработало.
    Там в конце скобка лишняя...
    Какие-нибудь ещё варианты будут?
    Кстати, может поможет, полный конфиг для домена у меня выглядит примерно таким образом:
    Код (Text):
    1.  
    2. server {
    3.     listen       65.211.183.18:80;
    4.     server_name  .domen.co.uk;
    5.  
    6. location /  {
    7.         root   /home/domen.co.uk;
    8.         index  index.php index.html index.htm;
    9.              if (!-e $request_filename)
    10.              {
    11.                rewrite ^/(.*)$ /index.php?_route_=$1 last;
    12.              }
    13.     }
    14.  
    15. location /image/cache/ {
    16.   if (!-e $request_filename){
    17.     rewrite ^/image/cache/(.*)\?*$ /image/cache/image_gate.php?image=$1 break;
    18.   }
    19. }
    20.  
    21.     error_page  404              /404.html;
    22.     location = /404.html {
    23.         root   /usr/share/nginx/html;
    24.     }
    25.  
    26.     error_page   500 502 503 504  /50x.html;
    27.     location = /50x.html {
    28.         root   /usr/share/nginx/html;
    29.     }
    30.  
    31.     location ~ \.php$ {
    32.         root           /home/domen.co.uk;
    33.         try_files $uri =404;
    34.         fastcgi_pass   unix:/tmp/php5-fpm.sock;
    35.         fastcgi_index  index.php;
    36.         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    37.         include /etc/nginx/fastcgi_params;
    38.     }
    39.  
    40.     location ~ /\.ht {
    41.         deny  all;
    42.     }
    43.  
    44. }
    Добавлено спустя 32 минуты 27 секунд:
    заглянул в /var/log/nginx/error.log а там вот такие интересные ошибки:

    Код (Text):
    1.  
    2. 2013/04/06 19:58:11 [error] 12711#0: *3673 open() "/usr/share/nginx/html/image/cache/image_gate.php" failed (2: No such file or directory), client: 93.125.37.2, server: domen.co.uk, request: "GET /image/cache/data/p/22000/22778-120x120.jpg HTTP/1.1", host: "domen.co.uk", referrer: "http://domen.co.uk/"
    Очевидно проблема с путями, ведь по адресу /usr/share/nginx/html/image/cache/image_gate.php файла image_gate.php нет, он расположен:
    Код (Text):
    1. /home/domen.co.uk/image/cache/image_gate.php
    Помогите конфиг допилить, сталось совсем немного))
     
  7. r3l0c

    r3l0c Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    453
    Симпатии:
    4
    Код (PHP):
    1. location /image/cache/ {
    2. root   /home/domen.co.uk;
    3.   if (!-$request_filename){
    4.     rewrite ^/image/cache/(.*)\?*/image/cache/image_gate.php?image=$1 break;
    5.   }
    6. } 
     
  8. rambap

    rambap Активный пользователь

    С нами с:
    22 мар 2013
    Сообщения:
    25
    Симпатии:
    0
    Чесно говоря даже последний код не дал никакого результата. А ошибки в /var/log/nginx/error.log касательно картинок исчезли.
    Перепробовав ещё несколько вариантов я уже был готов идти покупать хостинг с апачем... Просмотрев конфиг ещё раз, конфиги других сайтов, я поменял break на last и вуаля, все заработало!!!
    Спасибо r3l0c! :) На нескольких форумах эту тему создал, а ответили только тут! Спасибо!