全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1468|回复: 16
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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直到它写对了为止
17#
 楼主| 发表于 2024-3-24 23:58:24 | 只看该作者
电脑 发表于 2024-3-24 22:20
完整的伪静态规则就这3条?
你确定/fr这个是真实存在的目录/文件吗
语言是php吗?

开发者说.htaccess里面就是靠这三条生效的
/fr是语言网址,目录是不存在的,应该是通过语言包的形式调用的,然后透过伪静态虚拟出来的

They translate https://domain.com/fr/someurl/ into https://domain.com/someurl/ and add ENV variable REDIRECT_LOCALE = fr
16#
发表于 2024-3-24 22:32:39 来自手机 | 只看该作者
我感觉gemini还挺好用的
15#
发表于 2024-3-24 22:20:39 | 只看该作者
完整的伪静态规则就这3条?
你确定/fr这个是真实存在的目录/文件吗
语言是php吗?

这个规则需要连带fastcgi部分一块修改
14#
发表于 2024-3-24 11:04:23 | 只看该作者
为什么一定要nginx呢 实在不行就换到apache呗
13#
发表于 2024-3-24 10:33:47 来自手机 | 只看该作者
本帖最后由 jsdv 于 2024-3-24 10:35 编辑

docker跑个ap.ng反代出来
什么cms,也在找多语版
12#
发表于 2024-3-24 04:33:02 来自手机 | 只看该作者
gpt垃圾copilot准确多了…我也不知道为什么 我现在基础的翻译都丢给copilot可以试试看
11#
发表于 2024-3-23 20:55:45 | 只看该作者
话说啥CMS,免费收费的?
10#
发表于 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)
9#
 楼主| 发表于 2024-3-23 19:10:20 | 只看该作者

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

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

万分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-10-27 18:37 , Processed in 0.065260 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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