Назад | Перейти на главную страницу

Nginx переписывает / магазин / что-нибудь в / магазин

На нашем веб-сайте мы используем встроенный магазин электронной коммерции, который работает путем добавления необходимого JS-скрипта в /shop страница. На стороне сервера теперь требуется, чтобы все URL-адреса схемы /shop/anything быть переписан на /shop для сервера, потому что остальная часть предназначена для обработки встроенным хранилищем JS.

Я не могу это написать и получаю rewrite or internal redirection cycle while processing "/shop. Я думаю, это связано только с регулярными выражениями, но я, кажется, невежественен.

Мои настройки следующие:

server {
    listen 8002 default_server;
    listen [::]:8002 default_server;

    location / { 
        root /home/mysite;
        rewrite ^/shop/.+$ /shop;
        index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        try_files $uri $uri/ /index.php?$query_string;
        set $path_info $fastcgi_path_info;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    } 
}

Я также пробовал rewrite ^/shop/.*$ /shop; но результат тот же. : |

Обычно все URL-адреса обрабатываются index.php файл в /home/mysite (который на самом деле является сценарием входа для фреймворка), но мне нужны URL-адреса после /shop обрабатываться не фреймворком PHP, а JS, встроенным в /shop.

Как правильно это сделать?

== Обновление ==

Мне довелось поговорить с одним из разработчиков поддержки из ECWID. Хотя у них нет примеров Nginx, они смогли предоставить фрагмент Apache. Я надеюсь, что это помогает:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /~makfruit/shop/
    RewriteRule ^([^\.]+)$ .
</IfModule>

Мне удалось заставить его работать на уровне фреймворка. Все, что я сделал, это отправил любые URL-адреса, соответствующие /shop/anything к той же функции контроллера, которая обрабатывает /shop. Я не уверен, почему перезапись Nginx не сработала. Я принимаю это как ответ, чтобы закрыть эту тему.

Одна из возможных причин цикла перенаправления заключается в том, что вам не хватает break аргумент в вашем правиле перезаписи. Так что ваши rewrite строка должна выглядеть так:

rewrite ^/shop/.+$ /shop break;