Помощь Правила Rewrite AS4 для ngnix

Тема в разделе "PrestaShop", создана пользователем Nirealto, 31 мар 2016.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. Nirealto

    Nirealto Постоялец

    Регистр.:
    10 июл 2015
    Сообщения:
    121
    Симпатии:
    86
    Есть такой конфиг Ngnix:
    Код:
    server {
    listen *:80;
    server_name site.ru;
    
      root /home/user/www;
    
      access_log /home/user/logs/nginx.access.log; #расположение логов доступа
      error_log /home/user/logs/nginx.error.log; #расположение логов ошибок
    
    index index.php index.html;
    
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }
    
    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }
    
    # Deny all for .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
    }
    
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
    rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last;
    rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
    try_files $uri $uri/ /index.php$is_args$args;
    error_page 404 /index.php?controller=404;
    
    location ~ \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    }
    
    
    gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_comp_level 6;
    gzip_vary on;
    
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|css|js|jsonp)$ { expires 30d; }
    
    }
    

    Нужно добавить в него правила AdvancedSearch 4 для работы SEO фишек, в .htacess они выглядят вот так:
    Код:
    #START AS4 RULES (Do not remove)
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^as4_seositemap.xml$ modules/pm_advancedsearch4/seositemap.xml [L]
    RewriteCond %{QUERY_STRING} !^controller=products-comparison [NC]
    RewriteRule ^([a-z]{2})?/?s/([0-9]+)/([a-zA-Z0-9/_-]*) index.php?fc=module&module=pm_advancedsearch4&controller=advancedsearch4&isolang=$1&id_seo=$2&seo_url=$3 [QSA,L]
    RewriteCond %{QUERY_STRING} ^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$
    RewriteRule ^advancedsearch4.php /%1/s/%2/%3?p=%4 [R=301,L]
    RewriteCond %{QUERY_STRING} ^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)
    RewriteRule ^advancedsearch4.php /%1/s/%2/%3? [R=301,L]
    RewriteCond %{QUERY_STRING} ^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$
    RewriteRule ^advancedsearch4.php /s/%1/%2?p=%3 [R=301,L]
    RewriteCond %{QUERY_STRING} ^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)
    RewriteRule ^advancedsearch4.php /s/%1/%2? [R=301,L]
    </IfModule>
    #END AS4 RULES
    

    Простым конвертером решить проблему не удалось, поделитесь ,пожалуйста, своим конфигом от ngnix у кого AS4 работает нормально.
     
  2. ZiX

    ZiX Коддинг, Парсинг

    Регистр.:
    9 июл 2011
    Сообщения:
    1.377
    Симпатии:
    584
    Что не получилось конвертером? Какие-то ошибки? что nginx -t показывает с конфигом из конвертера?
     
  3. Nirealto

    Nirealto Постоялец

    Регистр.:
    10 июл 2015
    Сообщения:
    121
    Симпатии:
    86
    Конвертирую через http://winginx.com/ru/htaccess
    Вставляю конвертированные правила в конфиг, в итоге получается вот так:
    Код:
    server {
    listen *:80;
    server_name site.ru;
    
      root /home/user/www;
    
      access_log /home/user/logs/nginx.access.log; #расположение логов доступа
      error_log /home/user/logs/nginx.error.log; #расположение логов ошибок
    
    index index.php index.html;
    
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }
    
    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }
    
    # Deny all for .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
    }
    
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
    rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last;
    rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
    try_files $uri $uri/ /index.php$is_args$args;
    error_page 404 /index.php?controller=404;
    
    location = /as4_seositemap.xml {
    rewrite ^(.*)$ /modules/pm_advancedsearch4/seositemap.xml break;
    }
    location / {
    if ($query_string !~ "^controller=products-comparison"){
    rewrite "^/([a-z]{2})?/?s/([0-9]+)/([a-zA-Z0-9/_-]*)" /index.php?fc=module&module=pm_advancedsearch4&controller=advancedsearch4&isolang=$1&id_seo=$2&seo_url=$3 break;
    }
    if ($query_string ~ "^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$"){
    rewrite ^/advancedsearch4.php /%1/%2/%3?p=%4 redirect;
    }
    if ($query_string ~ "^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)"){
    rewrite ^/advancedsearch4.php /%1/%2/%3? redirect;
    }
    if ($query_string ~ "^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$"){
    rewrite ^/advancedsearch4.php /%1/%2?p=%3 redirect;
    }
    if ($query_string ~ "^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)"){
    rewrite ^/advancedsearch4.php /%1/%2? redirect;
    }
    }
    
    location ~ \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    }
    
    
    gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_comp_level 6;
    gzip_vary on;
    
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|css|js|jsonp)$ { expires 30d; }
    
    }
    
    В итоге не работают категории и товары(может ещё что-то не работает, приходится делать на рабочем магазине, по этом сразу делаю откат к рабочему конфигу) выдаёт 404, при попытке перейти по seo ссылки as4 вида http://site.ru/s/1/-baxi скачивается файл -baxi c таким содержимым:
    Код:
    <?php
    /*
    * 2007-2015 PrestaShop
    *
    * NOTICE OF LICENSE
    *
    * This source file is subject to the Open Software License (OSL 3.0)
    * that is bundled with this package in the file LICENSE.txt.
    * It is also available through the world-wide-web at this URL:
    * http://opensource.org/licenses/osl-3.0.php
    * If you did not receive a copy of the license and are unable to
    * obtain it through the world-wide-web, please send an email
    * to license@prestashop.com so we can send you a copy immediately.
    *
    * DISCLAIMER
    *
    * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
    * versions in the future. If you wish to customize PrestaShop for your
    * needs please refer to http://www.prestashop.com for more information.
    *
    *  @author PrestaShop SA <contact@prestashop.com>
    *  @copyright  2007-2015 PrestaShop SA
    *  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
    *  International Registered Trademark & Property of PrestaShop SA
    */
    
    require(dirname(__FILE__).'/config/config.inc.php');
    Dispatcher::getInstance()->dispatch();
    
     
  4. Nirealto

    Nirealto Постоялец

    Регистр.:
    10 июл 2015
    Сообщения:
    121
    Симпатии:
    86
    Сам и отвечаю, нашёл некий немецкий конвертер https://timmehosting.de/htaccess-converter и с его помощью сконвертировал правила, получился вот такой конфиг:
    Код:
    server {
    listen *:80;
    server_name site.ru;
    
      root /home/user/www;
    
      access_log /home/user/logs/nginx.access.log; #расположение логов доступа
      error_log /home/user/logs/nginx.error.log; #расположение логов ошибок
    
    index index.php index.html;
    
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }
    
    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }
    
    # Deny all for .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
    }
    
    
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
    rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last;
    rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
    try_files $uri $uri/ /index.php$is_args$args;
    error_page 404 /index.php?controller=404;
    
    rewrite ^/as4_seositemap.xml$ /modules/pm_advancedsearch4/seositemap.xml last;
    if ($args !~* "^controller=products-comparison"){
            set $rule_1 1;
    }
    if ($rule_1 = "1"){
            rewrite ^/([a-z]{2})?/?s/([0-9]+)/([a-zA-Z0-9/_-]*) /index.php?fc=module&module=pm_advancedsearch4&controller=advancedsearch4&isolang=$1&id_seo=$2&seo_url=$3 last;
    }
    if ($args ~ "^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$"){
            set $rule_2 1;
            set $bref_2_0 $1;
            set $bref_2_1 $2;
            set $bref_2_2 $3;
            set $bref_2_3 $4;
    }
    if ($rule_2 = "1"){
            rewrite ^/advancedsearch4.php /${bref_2_0}/s/${bref_2_1}/${bref_2_2}?p=${bref_2_3} permanent;
    }
    if ($args ~ "^isolang=([a-z]{2})&id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)"){
            set $rule_3 1;
            set $bref_3_0 $1;
            set $bref_3_1 $2;
            set $bref_3_2 $3;
    }
    if ($rule_3 = "1"){
            rewrite ^/advancedsearch4.php /${bref_3_0}/s/${bref_3_1}/${bref_3_2}? permanent;
    }
    if ($args ~ "^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*).*p=([0-9]+)$"){
            set $rule_4 1;
            set $bref_4_0 $1;
            set $bref_4_1 $2;
            set $bref_4_2 $3;
    }
    if ($rule_4 = "1"){
            rewrite ^/advancedsearch4.php /s/${bref_4_0}/${bref_4_1}?p=${bref_4_2} permanent;
    }
    if ($args ~ "^id_seo=([0-9]+)&seo_url=([a-zA-Z0-9/_-]*)"){
            set $rule_5 1;
            set $bref_5_0 $1;
            set $bref_5_1 $2;
    }
    if ($rule_5 = "1"){
            rewrite ^/advancedsearch4.php /s/${bref_5_0}/${bref_5_1}? permanent;
    }
    
    location ~ \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors on;
    }
    
    
    gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_comp_level 6;
    gzip_vary on;
    
    location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|css|js|jsonp)$ { expires 30d; }
    
    }

    С виду жесть полная, но оно работает.
     
    Последнее редактирование: 1 апр 2016
    alpi нравится это.
  5. alpi

    alpi human being

    Регистр.:
    29 июл 2014
    Сообщения:
    243
    Симпатии:
    232
    У меня вот так работает:


    Код:
            #Advanced Search block options
            location = /as4_seositemap.xml {
                rewrite ^(.*)$ /modules/pm_advancedsearch4/sitemap/seositemap.xml break;
            }
    
            location /as4_seositemap {
                rewrite ^/as4_seositemap-([0-9]+).xml$ /modules/pm_advancedsearch4/sitemap/seositemap-$1.xml break;
            }
    
            rewrite "^/([a-z]{2})?/?s/([0-9]+)/([a-zA-Z0-9/_-]*)" /index.php?fc=module&module=pm_advancedsearch4&controller=advancedsearch4&isolang=$1&id_seo=$2&seo_url=$3 break;
    
     
    Nirealto нравится это.