Перевод htaccess под nginx

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем eMASTER, 8 апр 2008.

Статус темы:
Закрыта.
  1. eMASTER

    eMASTER Прохожие

    В общем сам htaccess
    Код:
    AddDefaultCharset UTF-8
    DirectoryIndex index.php
    
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
    <FilesMatch "^cron.php$">
    Order allow,deny
    Deny from all
    </FilesMatch>
    Это конфиг nginx
    Код:
    location / {
        root   /var/www/proxy;
        index  index.php;
    		
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php last;
        }
    }
    Не работает редирект - "The page isn't redirecting properly"
    У кого-нибудь есть идеи?
     
  2. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Если не ошибаюсь, там нужно добавить $query_string

    Код:
    if (!-e $request_filename) {
      rewrite  ^(.*)$  /index.php?$query_string   last;
    }
     
  3. eMASTER

    eMASTER Прохожие

    "Redirect Loop" получается :(
     
  4. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Точно. Стормозил. В конце вместо last надо поставить break
     
  5. eMASTER

    eMASTER Прохожие

    break еще раньше пробовал, тоже не работает
     
  6. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Странно. Должно работать.
    Разве что можно поробовать вот так

    Код:
    if (!-e $request_filename) {
      rewrite  ^/(.*)$  /index.php?$query_string   break;
    }
    Со слешами у меня помню были с ним замомрочки.


    Ещё в простых случаях сам разработчик рекомендует использовать такую комбинацию

    Код:
        location / {
            error_page  404  = /index.php?$query_string;
            log_not_found   off;
        }
    т.к. она быстрее выполняется чем реврайт

    Также возможно не стоит передавать ему $query_string

    Кроме этого посмотри в исходник скрипта. Может он тащит инфу о запросе из глобального массива $_SERVER
    если да, проверь
    описан ли этот элемент в fastcgi_params

    вот такое содержимое в нём у меня

    Код:
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_param X_HTTP_IF_MODIFIED_SINCE $HTTP_IF_MODIFIED_SINCE;
    fastcgi_param  REDIRECT_STATUS    200;
     
  7. epifan

    epifan Создатель

    Регистр.:
    22 апр 2007
    Сообщения:
    31
    Симпатии:
    31
    Пишу в этой теме, чтобы новых не плодить.

    Не могу понять, как записать в конфиг nginx:

    Код:
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^index.php$ / [R=301]
    
     
  8. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    Опиши пожалуйста на словах, как работает это правило
    просто я по памяти не помню, а в доках апатча сейчас нет времени искать
     
  9. epifan

    epifan Создатель

    Регистр.:
    22 апр 2007
    Сообщения:
    31
    Симпатии:
    31
    301 редирект:
    http://site.ru/index.php -> http://site.ru/
     
  10. sasha181

    sasha181 Постоялец

    Регистр.:
    18 апр 2007
    Сообщения:
    100
    Симпатии:
    25
    тогда должно быть вот так
    Код:
    rewrite  ^/index\.php$  /   permanent;
     
Статус темы:
Закрыта.