На нашем веб-сайте мы используем встроенный магазин электронной коммерции, который работает путем добавления необходимого 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;