【发布时间】: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