Адаптировать mod rewrite .htaccess в nginx

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем ZM2007, 27 май 2013.

  1. ZM2007

    ZM2007

    Регистр.:
    16 окт 2007
    Сообщения:
    189
    Симпатии:
    82
    Есть вот такенный бред в .htaccess его нужно переделать так, чтобы nginx это понимал и обрабатывал, онлайн конвертилка не помогает а разбираться некогда ибо нужно срочно.

    RewriteCond %{REQUEST_FILENAME} \.(js|ico|gif|jpg|png|css|pdf)$ [OR]
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

    Хелп плз.
     
  2. ne4to

    ne4to Постоялец

    Регистр.:
    16 ноя 2012
    Сообщения:
    107
    Симпатии:
    50
    ну гдето так
    можно конечно еще явно задать статик файлы (js|ico|gif|jpg|png|css|pdf)
    чтобы при их отсутствии нжинкс отдавал 404, но это уже как вам больше нравится

    Код:
    server {
        listen 80;
        server_name example.com
     
        root /var/www
     
        location / {
            index index.php;
            try_files $uri $uri/ @handler;
        }
        location @handler {
            rewrite / /index.php;
        }
        location ~ .php$ {
            if (!-e $request_filename) { rewrite / /index.php last; }
            ... обработчик пхп
        }
    }
    
     
    ZM2007 нравится это.
  3. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    Дабы не плодить... помогите, плз, вот такое переделать в конфигурацию nginx

    Код:
    RewriteRule ^(.*)$  index.php?where=$1&%{QUERY_STRING} [L]
    то, что дали генераторы не помогло, одно, чего смог добиться - серв предлагает открыть или сохранить файл

    для обработки пхп панелька пишет вот такие вот вещи
    Код:
            location ~ \.php$ {
                try_files /c29ebf3cb148a92af9241c1581490c93.htm @php;
            }
     
            location @php {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_pass 127.0.0.1:9012;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                #fastcgi_param PATH_INFO $fastcgi_script_name;
                fastcgi_intercept_errors on;
            }
    
     
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    SkiLLer, попробуй в эту сторону посмотреть (первую строчку заменить и добавить отдельный location, в котором QUERY_STRING переопределить:(
    Код:
    location @php {
      try_files $uri @addwhere;
      ... остальное оставляем
    }
     
    location @addwhere {
      fastcgi_param SCRIPT_FILENAME $document_root/index.php;
      fastcgi_param QUERY_STRING where=$uri&$query_string;
      fastcgi_param REQUEST_METHOD $request_method;
      ... 
    }
    
     
    SkiLLer нравится это.
  5. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    все равно пытается сохранить файл, вот полный конфиг, который сгенерила панель плюс ваш код


    server {
    listen *:80;


    server_name site.ru www.site.ru;

    root /var/www/site.ru/web;



    index index.html index.htm index.php index.cgi index.pl index.xhtml;



    error_log /var/log/ispconfig/httpd/site.ru/error.log;
    access_log /var/log/ispconfig/httpd/site.ru/access.log combined;

    ## Disable .htaccess and other hidden files
    location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
    }


    location / {
    rewrite ^(.*)$ /index.php?where=$1&$query_string break;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    location /stats {

    index index.html index.php;
    auth_basic "Members Only";
    auth_basic_user_file /var/www/clients/client2/web3/web/stats/.htpasswd_stats;
    }

    location ^~ /awstats-icon {
    alias /usr/share/awstats/icon;
    }

    location ~ \.php$ {
    try_files /c29ebf3cb148a92af9241c1581490c93.htm @php;
    }

    location @php {
    # try_files $uri =404;
    try_files $uri @addwhere;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9012;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_intercept_errors on;
    }


    location @addwhere {
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param QUERY_STRING where=$uri&$query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    }

    location ~ .php$ {
    rewrite / /index.php last;
    }

    }
     
  6. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Не уверен, что это панель сгенерировала.
    Часть правил "пересекаются"
    К тому же не совсем понимаю назначение отдельных правил - это, например: c29ebf3cb148a92af9241c1581490c93

    А "плюсовать" простым дописыванием - не очень удачная идея.

    файл-то хоть нужный?
    В @addwhere добавить
    Код:
    fastcgi_pass 127.0.0.1:9012;
     
  7. tchibo

    tchibo Создатель

    Регистр.:
    2 апр 2010
    Сообщения:
    32
    Симпатии:
    3
    Помогите плиз адаптировать mod_rewrite в nginx
    Код:
    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
    RewriteRule . %1/%2 [R=301,L]
    
    RewriteRule ^(.*),(.*)$ $2.php?rewrite_params=$1&page_url=$2
    
    RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
    RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})
    RewriteRule ^(.*)$ index.php [F,L]
    Все генераторы выдают разный код, который не работает
     
  8. ****Ice_Man****

    ****Ice_Man**** ТипоАдмин гыг ;)

    Регистр.:
    17 апр 2006
    Сообщения:
    78
    Симпатии:
    15
    Вот и я под утро уже с не соображающей башкой сюда загляну =)

    Имеем следующей .htaccess
    Код:
     
    cat .htaccess
    # redirect www to non-www
    #RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    RewriteEngine On
    #RewriteRule . - [E=no-gzip:1]
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^(.+)\~s$
    RewriteRule ^(.*) stats.php?u=$1 [L]
    RewriteCond %{REQUEST_URI} ^(.+)\~d$
    RewriteRule ^(.*) delete_file.php?u=$1 [QSA,L]
    RewriteCond %{REQUEST_URI} ^(.+)\~i$
    RewriteRule ^(.*) share_file.php?u=$1 [QSA,L]
    RewriteCond %{REQUEST_URI} ^(.+)\~f$
    RewriteRule ^(.*) view_folder.php?f=$1 [QSA,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !\.html$
    RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]
    
    RewriteRule ^(.*).html$ $1.php [QSA,L]
    Вот что наваял:

    Код:
    cat test.domain.lo.conf
    server {
            listen      80;
            server_name  test.domain.lo www.test.domain.lo;
            access_log  /var/log/nginx/test-access.log;
            error_log  /var/log/nginx/test-error.log;
    
            root /var/www/vhosts/test.domain.lo;
            index index.php index.html index.htm;
    
            client_max_body_size 5G;
            client_header_timeout  3m;
            client_body_timeout 3m;
            send_timeout    3m;
    
            location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass    unix:/var/run/php/fcgi;
                fastcgi_index  index.php;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
            }
    location / {
    
      #Statistics Url
      if ($request_uri ~ "^(.+)\~s$"){
        rewrite ^/(.*) /stats.php?u=$1;
      }
    
      #Delete File Url
      if ($request_uri ~ "^(.+)\~d$"){
        rewrite ^/(.*) /delete_file.php?u=$1;
      }
    
      #Public Info Page
      if ($request_uri ~ "^(.+)\~i$"){
        rewrite ^/(.*) /share_file.php?u=$1;
      }
    
      #Share Folder
      if ($request_uri ~ "^(.+)\~f$"){
        rewrite ^/(.*) /view_folder.php?f=$1;
      }
    
      #Download File
      if (!-e $request_filename){
        rewrite ^/(.*) /file_download.php?u=$1;
      }
      rewrite ^/(.*).html$ /$1.php;
    }
    
    }
    
    Обращении на любую html качает php код =(

    Установлен Nginx версии:
    Код:
    Installed Packages
    nginx.x86_64                       1.0.15-5.el6                        @epel
     
  9. ****Ice_Man****

    ****Ice_Man**** ТипоАдмин гыг ;)

    Регистр.:
    17 апр 2006
    Сообщения:
    78
    Симпатии:
    15
    Всем спасибо разобрался на свежую голову, все процедуры в разные локейшены взял и все заработало как надо.