nginx 静态索引重定向

2024-01-19

这看起来很荒谬,但我在一个多小时的搜索中没有找到有效的答案。

我有一个运行 nginx 的静态网站(恰好位于 Varnish 后面)。索引文件称为index.html。我想重定向实际访问该 URL 的任何人mydomain.com/index.html回到mydomain.com.

这是我的站点的 nginx 配置:

server {
  listen  8080;
  server_name  www.mydomain.com;
  port_in_redirect  off;

  location / {
    root   /usr/share/nginx/www.mydomain.com/public;
    index index.html;
  }

  rewrite /index.html http://www.mydomain.com/ permanent;
}

http://www.mydomain.com/index.html按预期响应301与位置http://www.mydomain.com/但不幸的是http://www.mydomain.com/还提供一个返回自身的 301,这样我们就得到了一个重定向循环。

如果index.html确实在请求中,我如何告诉nginx只提供301?


添加一个新的位置块来处理您的主页,并使用 try_files 指令(而不是“index index.html;”)直接查找 index.html 文件。请注意,try_files 要求您至少输入 2 个选择。所以我把同一个文件放了两次。

location = / {
  root   /usr/share/nginx/www.mydomain.com/public;
  try_files /index.html /index.html;
}

根据我的实验看起来不错:

curl -iL http://www.mydomain.com/index.html
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: http://www.mydomain.com/

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Sat, 16 Mar 2013 08:05:47 GMT
Connection: keep-alive
Accept-Ranges: bytes

[UPDATE] 重定向循环的根本原因是“index”指令,它触发nginx再次进行另一轮位置匹配。这就是位置块之外的重写规则再次执行的方式,从而导致循环。所以“index”指令就像“rewrite...last;”指示。在你的情况下你不希望这样。

诀窍是不再触发另一个位置匹配。 try_files 可以有效地做到这一点。这就是为什么我在原来的答案中选择了它。但是,如果您愿意,另一个简单的修复方法是替换

  index index.html;

by

  rewrite ^/$ /index.html break;

在原来的“location /”块内。这个“重写...中断”;指令将使 nginx 保持在同一位置块内,有效地停止循环。然而,这种方法的副作用是您失去了“index”指令提供的功能。

[UPDATE 2]

实际上,index指令在rewrite指令之后执行。所以下面的方法也有效。请注意,我刚刚添加了重写...break;线。如果请求uri为“/”,nginx首先从重写规则中查找现有文件/index.html。因此,该请求永远不会触发索引指令。因此,这两个指令可以一起工作。

  location / {
    root   /usr/share/nginx/www.mydomain.com/public;
    index index.html;
    rewrite ^/$ /index.html break;
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx 静态索引重定向 的相关文章

  • IE 302 重定向无缓存标头问题

    发布信息后返回 302 重定向 此重定向旨在重新加载当前页面 这一切都工作正常 但 IE 在标头中添加了 No Cache Cache Control no cache 我们使用 Squid 来缓存我们的内容 并将其放在标头中绕过了鱿鱼 由
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Nginx - 自定义 404 页面

    Nginx PHP 在 fastCGI 上 对我来说非常有用 当我输入不存在的 PHP 文件的路径时 我不会得到默认的 404 错误页面 任何无效的 html 文件都会出现该错误页面 而只会得到 未指定输入文件 如何自定义此 404 错误页
  • 使用 div 作为链接 - 打开新选项卡的选项?

    目前 我在我的网站中使用这一小段 js 来允许我的 div 充当按钮 div Google div 但当我浏览网页时 我经常做的事情是打开大量标签 有什么方法可以修改我的代码以实现此目的吗 这应该可以做到
  • 当用户的角色没有足够的权限时,将用户从 web.config 重定向到另一个页面

    我正在使用 ASP NET 我希望能够将用户从 Web 配置重定向到另一个页面 我有很多限制 例如
  • nginx docker 容器:502 错误网关响应

    我有一个服务监听 8080 端口 这不是一个容器 然后 我使用官方镜像创建了一个 nginx 容器 docker run name nginx d v root nginx conf etc nginx conf d p 443 443 p
  • 防止刷新时提交双重表单

    我有一个简单的问题 我知道当用户使用 Post Redirect Get 模式重新加载页面时 我可以防止表单重新提交自身 但我的问题是 如果我将用户重定向回提交表单的同一页面 这种模式是否有效 我的意思是 我不想将用户重定向到另一个页面 请
  • 为什么要打开重定向 URL?

    我一直在浏览 OWASP 前 10 个漏洞 以更深入地了解每种特定类型的漏洞 我已完成最后一项 未经验证的 URL 重定向 我了解这次攻击 我在 OWASP 中读到了有关此类网络钓鱼计划的内容 现在看来这一点是显而易见的 我很难理解为什么这
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • django管理员登录后重定向到另一个页面

    我正在 Django 中制作一个自定义管理页面 我不想重新发明轮子 因此想使用 Django 管理登录表单让员工登录并随后将他们重定向到 my url 但是 我无法找到在 admin 成功登录后将用户重定向到自定义网址的方法 因为我偶然发现
  • 如何使用 Nuxt ServerMiddleware 和 Apollo GraphQL 处理 301 重定向

    我目前正在构建一个 Vue Nuxt 应用程序 并结合修改后的 Saleor 安装来在线销售产品 当我们从现有系统迁移时 我们需要能够处理从旧网站 URL 到新网站 URL 的 301 重定向 我修改了 API 以响应以下 GraphQL
  • nginx server_name 在流块内可能吗?

    目前设置如下 stream server listen 9987 udp server name subdomain EXAMPLE com this line is resulting in an error proxy pass loc
  • nginx 和 uwsgi 非常大的文件上传(>3Gb)

    也许有人知道该怎么做 我正在尝试上传大于 3Gb 的文件 没问题 如果我使用以下配置上传高达 2Gb 的文件 Nginx client max body size 5g client body in file only clean clie
  • 常规请求期间 Django AJAX 请求未通过

    我有一个带有登录网页的 Django 站点 当提交页面上的登录表单时 它会执行登录视图 该视图会在其中运行一个需要很长时间处理 30秒左右 的函数 因此 为了在登录期间向客户端显示进度 一旦提交表单 登录页面上的 JS 函数就会开始向服务器
  • 将 .php URL 重定向到不带扩展名的 URL [重复]

    这个问题在这里已经有答案了 可能的重复 使用 htaccess 删除 php 扩展名 https stackoverflow com questions 4026021 remove php extension with htaccess
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • Logrotate - nginx 日志不在 docker 容器内旋转

    我有一个运行 nginx 的 docker 容器 它正在将日志写入 var log nginxLogrotate 安装在 docker 容器中 并且 nginx 的 logrotate 配置文件已正确设置 尽管如此 logrotate 仍不
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了

随机推荐