Nginx 将 /shop/anything 重写为 /shop

Nginx 将 /shop/anything 重写为 /shop

我们在网站上使用嵌入式电子商务商店,其工作方式是将所需的 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 重写不起作用。我接受这个作为关闭此线程的答案。

相关内容