找回密码
 立即注册
CeraNetworksBGVM服务器主机交流IP归属甄别会员请立即修改密码
查看: 81|回复: 9

有懂.htaccess转nginx伪静态规则的大佬吗?

[复制链接]

68

主题

250

回帖

1066

积分

金牌会员

积分
1066
发表于 2024-3-23 17:50:08 | 显示全部楼层 |阅读模式
本帖最后由 拼命二郎 于 2024-3-23 17:56 编辑

求助各位大佬,网上那种转化工具无效,让chatgpt写也无效,请教各位专业的大佬

国外的cms,它自带多语言系统(访问www.abc.com自动跳转到www.abc.com/fr),但是它是基于apache开发的,所以伪静态规则是.htaccess的(如下),我用的是宝塔+Nginx,想将这个伪静态规则转化为适合nginx的,求各位大佬帮助

[ol]
  • RewriteCond %{ENV:REDIRECT_REWRITTEN} !=1
  • RewriteCond %{ENV:REDIRECT_REDIRECT_REWRITTEN} !=1
  • RewriteRule ^([a-z]{2})/(.*) /$2 [L,QSA,E=REWRITTEN:1,E=LOCALE:$1][/ol]复制代码

    官方人员给的建议是:So you need to either find a way to set this (the rule is setting environmental variables REDIRECT_LOCALE= that is used later by script to switch to a specific locale), or to switch to using subdomains.

    chatgpt写的代码如下,不能用
    [ol]
  • location ~ ^/([a-z]{2})/(.*) {
  •     if ($redirect_rewritten != "1") {
  •         rewrite ^/([a-z]{2})/(.*) /$2 last;
  •         set $locale $1;
  •     }
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    120

    主题

    578

    回帖

    2561

    积分

    金牌会员

    积分
    2561
    发表于 2024-3-23 17:51:50 | 显示全部楼层
    辱骂嘲笑gpt直到它写对了为止
    回复

    使用道具 举报

    68

    主题

    250

    回帖

    1066

    积分

    金牌会员

    积分
    1066
     楼主| 发表于 2024-3-23 17:54:36 | 显示全部楼层

    总有刁民想害朕 发表于 2024-3-23 17:51

    辱骂嘲笑gpt直到它写对了为止

    用gp4跟它反复拉扯了100条,都没写对,血亏。主要是我不懂代码,不知道让它从哪里开始修正
    回复

    使用道具 举报

    18

    主题

    660

    回帖

    1742

    积分

    金牌会员

    积分
    1742
    发表于 2024-3-23 17:51:00 | 显示全部楼层
    [ol]
  • location / {
  •   rewrite "^/([a-z]{2})/(.*)" /$2;
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    68

    主题

    250

    回帖

    1066

    积分

    金牌会员

    积分
    1066
     楼主| 发表于 2024-3-23 17:58:15 | 显示全部楼层

    1tv 发表于 2024-3-23 17:58

    代码能正常保存,但是陷入了死循环,请大佬再次指导

    该网页无**常运作www.abc.com 将您重定向的次数过多。
    回复

    使用道具 举报

    18

    主题

    660

    回帖

    1742

    积分

    金牌会员

    积分
    1742
    发表于 2024-3-23 18:01:25 | 显示全部楼层
    本帖最后由 1tv 于 2024-3-23 18:27 编辑
    [ol]
  • location / {
  •     if ($arg_REDIRECT_REWRITTEN != 1) {
  •         set $REWRITTEN 1;
  •         set $LOCALE $arg_LOCALE;
  •     }
  •     if ($arg_REDIRECT_REDIRECT_REWRITTEN != 1) {
  •         rewrite ^/([a-z]{2})/(.*) /$2 last;
  •     }
  • }
  • [/ol]复制代码
  • 回复

    使用道具 举报

    68

    主题

    250

    回帖

    1066

    积分

    金牌会员

    积分
    1066
     楼主| 发表于 2024-3-23 17:58:00 | 显示全部楼层

    1tv 发表于 2024-3-23 18:18

    ERROR:
    nginx: [emerg] directive "rewrite" is not terminated by ";" in /www/server/panel/vhost/rewrite/abc.com.conf:7
    nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

    rewrite这行有问题不能保存,可以请大哥再帮帮弟弟吗?万分感谢
    回复

    使用道具 举报

    18

    主题

    660

    回帖

    1742

    积分

    金牌会员

    积分
    1742
    发表于 2024-3-23 18:18:48 | 显示全部楼层
    [ol]
  • location / {
  •     if ($http_accept_language ~* "^(.+)$") {
  •         set $locale $1;
  •     }
  •     rewrite "^/([a-z]{2})/(.*)" /$2 last;
  • }[/ol]复制代码

    没辙了
  • 回复

    使用道具 举报

    68

    主题

    250

    回帖

    1066

    积分

    金牌会员

    积分
    1066
     楼主| 发表于 2024-3-23 18:38:40 | 显示全部楼层

    1tv 发表于 2024-3-23 19:04

    没辙了

    还是不行,害,谢谢大佬,有空一起洗脚

    我再问问gpt4,要还是不行估计要换为apache了

    万分感谢
    回复

    使用道具 举报

    300

    主题

    1572

    回帖

    5398

    积分

    论坛元老

    积分
    5398
    发表于 2024-3-23 18:18:00 | 显示全部楼层
    以下是用nginx配置实现.htaccess文件功能的示例:

    ```conf
    location / {
      # 防止重复重定向
      if ($env{REDIRECT_REWRITTEN} != 1) {
        set $env{REDIRECT_REWRITTEN} 1;
        if ($env{REDIRECT_REDIRECT_REWRITTEN} != 1) {
          set $env{REDIRECT_REDIRECT_REWRITTEN} 1;
          rewrite ^([a-z]{2})/(.*) /$2 break;
        }
      }
      # 设置语言环境变量
      set $locale $1;
      # 其他配置
    }
    ```

    **解释:**

    * `if ($env{REDIRECT_REWRITTEN} != 1)`: 检查环境变量 `REDIRECT_REWRITTEN` 是否为 1,如果不是则执行以下重写规则。
    * `set $env{REDIRECT_REWRITTEN} 1;`: 将 `REDIRECT_REWRITTEN` 环境变量设置为 1,防止重复重定向。
    * `if ($env{REDIRECT_REDIRECT_REWRITTEN} != 1)`: 检查环境变量 `REDIRECT_REDIRECT_REWRITTEN` 是否为 1,如果不是则执行以下重写规则。
    * `set $env{REDIRECT_REDIRECT_REWRITTEN} 1;`: 将 `REDIRECT_REDIRECT_REWRITTEN` 环境变量设置为 1,防止重复重定向。
    * `rewrite ^([a-z]{2})/(.*) /$2 break;`: 使用正则表达式匹配 URL,并重写为 /$2。`break` 指令阻止 дальнейшее处理。
    * `set $locale $1;`: 将捕获的第一个子组 (语言代码) 赋值给环境变量 `locale`。

    **注意:**

    * 此示例仅供参考,您需要根据实际情况进行调整。
    * nginx 配置语法可能与 Apache 的 .htaccess 语法有所不同,请仔细阅读 nginx 文档。

    **参考资料:**

    * Nginx Rewrite Module: [https://nginx.org/en/docs/http/ngx_http_rewrite_module.html](https://nginx.org/en/docs/http/ngx_http_rewrite_module.html)
    * Apache .htaccess Tutorial: [https://httpd.apache.org/docs/current/howto/htaccess.html](https://httpd.apache.org/docs/current/howto/htaccess.html)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|HS2V主机综合交流论坛

    GMT+8, 2024-5-11 05:57 , Processed in 0.086872 second(s), 3 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表