我们在网站上使用嵌入式电子商务商店,其工作方式是将所需的 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>
答案1
break
重定向循环的一个可能原因是重写规则中缺少参数。因此,您的rewrite
行应如下所示:
rewrite ^/shop/.+$ /shop break;
答案2
我能够让它在框架级别工作。我所做的就是将匹配的任何 URL 发送/shop/anything
到处理 的相同控制器函数/shop
。我不确定为什么 Nginx 重写不起作用。我接受这个作为关闭此线程的答案。