全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 891|回复: 16

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

[复制链接]
发表于 2024-3-23 17:50:08 | 显示全部楼层 |阅读模式
本帖最后由 拼命二郎 于 2024-3-23 17:56 编辑

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

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

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


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

chatgpt写的代码如下,不能用
  1. location ~ ^/([a-z]{2})/(.*) {
  2.     if ($redirect_rewritten != "1") {
  3.         rewrite ^/([a-z]{2})/(.*) /$2 last;
  4.         set $locale $1;
  5.     }
  6. }
复制代码
发表于 2024-3-23 17:51:50 来自手机 | 显示全部楼层
辱骂嘲笑gpt直到它写对了为止
 楼主| 发表于 2024-3-23 17:54:36 | 显示全部楼层
总有刁民想害朕 发表于 2024-3-23 17:51
辱骂嘲笑gpt直到它写对了为止

用gp4跟它反复拉扯了100条,都没写对,血亏。主要是我不懂代码,不知道让它从哪里开始修正
发表于 2024-3-23 17:58:15 | 显示全部楼层
  1. location / {
  2.   rewrite "^/([a-z]{2})/(.*)" /$2;
  3. }
复制代码
 楼主| 发表于 2024-3-23 18:01:25 | 显示全部楼层

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

该网页无**常运作www.abc.com 将您重定向的次数过多。
发表于 2024-3-23 18:18:48 | 显示全部楼层
本帖最后由 1tv 于 2024-3-23 18:27 编辑

  1. location / {
  2.     if ($arg_REDIRECT_REWRITTEN != 1) {
  3.         set $REWRITTEN 1;
  4.         set $LOCALE $arg_LOCALE;
  5.     }
  6.     if ($arg_REDIRECT_REDIRECT_REWRITTEN != 1) {
  7.         rewrite ^/([a-z]{2})/(.*) /$2 last;
  8.     }
  9. }
复制代码
 楼主| 发表于 2024-3-23 18:38:40 | 显示全部楼层

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这行有问题不能保存,可以请大哥再帮帮弟弟吗?万分感谢
发表于 2024-3-23 19:04:24 | 显示全部楼层
  1. location / {
  2.     if ($http_accept_language ~* "^(.+)$") {
  3.         set $locale $1;
  4.     }
  5.     rewrite "^/([a-z]{2})/(.*)" /$2 last;
  6. }
复制代码


没辙了
 楼主| 发表于 2024-3-23 19:10:20 | 显示全部楼层

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

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

万分感谢
发表于 2024-3-23 19:11:35 | 显示全部楼层
以下是用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|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-28 06:22 , Processed in 0.076044 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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