【问题标题】:trying to redirect ONLY the site root, 404 re-routed as well尝试仅重定向站点根目录,404 也重新路由
【发布时间】:2022-01-19 11:28:08
【问题描述】:

我正在尝试将www.oldsite.com 重定向到www.newsite.com,但仅限于根目录。

oldsite.com/real/thing 仍将存在,并且在其原始位置应该是全世界可读的,但直接访问 oldsite.com 或 www.oldsite.com 应该重定向到 www.newsite.com

我试着用一个简单的方法来做到这一点

Redirect / https://www.newsite.com

httpd.conf 中,但这太激进了,不会正确显示 oldsite.com/real/thing

我可以在站点根目录的index.html 中进行元刷新,但这显然是不受欢迎的。这似乎是最合乎逻辑的选择,因为我想我的真正意思是,如果你能以某种方式进入常规索引页面,那就去新的地方吧。

最终似乎起作用的是此代码,位于站点根目录的 .htaccess 文件中:

RewriteEngine On
RewriteRule ^$ https://www.newsite.com [R=301,L]

它完全符合我的要求,但我确实有一个问题。

oldsite.com/real/thing 可以完美导航,但 oldsite.com/foo/oops/not/here 不存在,我希望弹出标准 404 也会重定向到 www.newsite.com

这不一定是坏事,可能是我真正想要发生的事情,但我的印象是 RewriteRule 中的 ^$ 只会匹配根目的地。那么,发生了什么?

如果我愿意,我将如何将 404 重新路由到其他地方?

而且,我想,我的解决方案看起来合理吗?使其更安全/更好/更智能的建议?

谢谢!

编辑:这是httpd.config 文件中的ErrorDocument 行...没什么特别的!

ErrorDocument 404 "Page not found."

【问题讨论】:

  • 该规则应该有效。大概 oldsite 和 newsite 驻留在不同的服务器上?您还有哪些其他指令?你可能有冲突。还要确保您的浏览器缓存是清晰的。因为如果您尝试过(错误的)301,那么它们将被浏览器缓存。
  • 是的,旧站点和新站点位于不同的服务器上。我确实有一些规则强制 URL 使用 https 并将 oldsite.com 推送到 www.oldsite.com,但是如果没有 .htaccess 文件,oldsite.com/foo 会导致 ErrorDocument 行拾取标准 404 错误http.conf,正如预期的那样。服务器上有几个虚拟主机,所以这可能是一个复杂的因素。关于寻找什么的任何提示?另外,是的,浏览器问题一直是个问题,所以我启动了 Edge 并将其配置为每次关闭程序时都忘记所有内容。
  • .htaccess 中没有其他重写?所以您的 URL 直接映射到实际文件?在没有看到您的服务器配置的情况下,尚不清楚其他 vHost 会如何影响这一点。
  • 你的ErrorDocument 线路是什么?
  • .htaccess 文件中没有其他内容。 httpd.config 有一些别名等,但关键似乎是 .htaccess 文件被完全删除时 404 正常响应。也许我应该取出L 以允许进一步处理继续?我将在原帖中添加ErrorDocument 队列,但这没什么特别的。

标签: .htaccess redirect http-status-code-404 httpd.conf


【解决方案1】:

我想我已经找到了自己问题的答案。

如果我将ErrorDocument 行添加到.htaccess 文件的顶部,它似乎在重写之前拦截了错误的URL。

因此,与其依赖httpd.config 中的行并且不知道将按什么顺序处理事情,我将进行一些代码重复。

这似乎是一个合理的价格。

同时,原来的ErrorDocument 行在服务器上的其他虚拟主机上运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2014-12-16
    相关资源
    最近更新 更多