我正在尝试网站切换。我们想通过使用 301 重定向来保留我们的外部链接。我在一个命名位置有一个冗长的重定向列表,类似于:
location @redirects {
rewrite ^/path/one.html$ http://www.ourdomain.tld/one-but-different permanent;
rewrite ^/path/two.html$ http://www.ourdomain.tld/two-but-different permanent;
rewrite ^/path/three.html$ http://www.ourdomain.tld/three-but-different permanent;
rewrite ^/path/four.html$ http://www.ourdomain.tld/four-but-different permanent;
}
(请注意,尽管我的示例显示了一种模式,但实际上并不存在这种模式。换句话说,它们是一对一的重定向。)
我有一个 CMS Web 应用程序,我目前正在使用以下 try_files 语句(它一直在工作以回退到 index.php 脚本):
location / {
try_files $uri $uri/ /index.php;
}
现在我正在尝试使用 try_files 来“查看”重定向命名位置并在回退到 index.php 之前处理重写。像这样:
location / {
try_files @redirects $uri $uri/ /index.php;
}
但是,每次 CMS 处理 404 时都会触发回退。换句话说,如果我尝试http://www.ourdomain.tld/path/one.html,我会得到 CMS 的 404 页面而不是重定向!是否可以先“尝试”命名位置,或者命名位置是否必须作为后备位置?
我确定我做错了。但是,有人可以指出我正确的方向吗?
nginx/1.2.4
谢谢!
正确的方法是:
请尽可能避免使用重写。Nginx 不是 Apache。URL 重写是配置 Web 服务器的一种低效且棘手的方法。Nginx 更喜欢 URL 映射。
location
前缀匹配非常快速和高效。https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
--
在大量(500+)重定向的情况下:
重定向.map:
另一种方法是使用地图。
一个例子; 离开我的头顶,所以首先检查语法错误......: