gwy15:我想实现一个 “根据不同的 header 中的 Accept-Language
返回不同的文件” 功能,我写的配置文件如下:
map $http_accept_language $locale {
default "en-US";
~*en "en-US";
~*zh "zh-CN";
}
server {
listen 80;
server_name _;
location / {
rewrite_log on;
rewrite ^/(.*)$ /prerendered/$locale/$1;
}
location /prerendered/en-US {
root /usr/share/nginx/html;
# try_files $uri $uri/ $uri.html /prerendered/en-US/index.html =404;
}
location /prerendered/zh-CN {
root /usr/share/nginx/html;
# try_files $uri $uri/ $uri.html /prerendered/zh-CN/index.html =404;
}
}
大体思路就是利用 map 定义一个 $locale
变量,然后 rewrite 到对应目录。
文件结构:
/usr/share/nginx/html/prerendered
├── en-US content:
│ ├── a.html a en-US
│ └── index.html index en-US
└── zh-CN
├── a.html a zh-CN
└── index.html index zh-CN
curl 命令和结果:
$ curl http://127.0.0.1/a.html
a en-US
$ curl http://127.0.0.1/a.html -H 'Accept-Language: en'
index en-US
$ curl http://127.0.0.1/a.html -H 'Accept-Language:zh'
index zh-CN
从第二个命令开始,路径就被错误地重定向到了 /prerendered/en-US/
,后面的 a.html
消失了。
nginx 对第二个命令的日志:
2020/09/09 09:45:16 [notice] 29#29: *4 "^/(.*)$" matches "/a.html", client: 172.17.0.1, server: _, request: "GET /a.html HTTP/1.1", host: "127.0.0.1"
2020/09/09 09:45:16 [notice] 29#29: *4 rewritten data: "/prerendered/en-US/", args: "", client: 172.17.0.1, server: _, request: "GET /a.html HTTP/1.1", host: "127.0.0.1"
可以看到,这个 rewrite 规则是命中了的,但是替换的时候后面的 $1
却没有替换上;而且只有 Accept-Language
包含 zh/en
才会出现,如果是 空 或者es
(默认 map 到 en ),a.html
还是正常替换的。
求助各位这是哪里出现的问题?
不是说 nginx 创始人被俄罗斯警方抓了吗? 也没看到保释或者释放的消息,为啥他还在提交代码呢?xiaoyanbot:https://github.com/nginx/unit 如题zy8848:水深火热警告
Nginx连接限制 - nginx在3个具有TCP连接的php5-fpm服务器之前,我们有2个nginx服务器以1000reqs /秒的速度完美运行。我们认为一台nginx服务器就足够了,并将所有流量重定向到该服务器。但是,服务器的服务速度不能超过750reqs / sec。它具有千兆以太网,总流量不超过100mbits(Debian 6.0)我们找不到任何原因,经过谷歌搜索发现它可能与TC…
mod_rewrite:控制器的子域 - php所以我有mydomain.tld,www.mydomain.tld和res.mydomain.tld都指向同一目录:/var/www/mydomain。在该目录中,有我的codeigniter应用程序。因此,我想做的是将通过res.mydomain.tld发出的所有请求转发到称为resources的特定控制器。我有的:RewriteCond %{HTTP_H…
开发了一个自动识别 HTML 列表的算法,感觉离智能爬虫又近了一步tikazyq:话不多说,下面给几个主流网站列表页的识别效果。 可以看到,列表基本都识别出来了,一些列表子项( List Item )的字段也标注出来了。这个算法还支持分页的识别。如果进一步优化,甚至可以做到网络爬虫中的自动驾驶,输入一个坐标(网站 URL )就可以自动抓数据,不需要写 XPath 各种抓取配置规则。做到这一步,说明离智能爬虫就不远啦。 算法…
检查HTML表单复选框等是否已设置为POST的正确和最安全的方法是什么? - html自从早期以来,这使我感到困惑。也许这只是在我脑海中,但在我看来,这似乎随着时间的推移而变化,在不同的浏览器之间,甚至可能取决于本地语言/地区。基本上,每当我需要检查是否已设置“ radio”或“ checkbox”类型的HTML输入时,我总是这样做:if (isset($_POST['the_name']) && trim…