AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1035459
Accepted
Jim Miller
Jim Miller
Asked: 2020-09-27 13:42:42 +0800 CST2020-09-27 13:42:42 +0800 CST 2020-09-27 13:42:42 +0800 CST

如何将整个网站重定向到单个页面?

  • 772

我正在关闭一个站点,并在站点的根级别用一个“无人主页”页面替换了旧站点。现在我需要设置一些重定向,以便对站点任何部分的任何请求,无论多么复杂,都以根页面结束。

我已经尝试过(我认为)应该起作用的方法:创建一个.htaccess包含:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://www.example.com/ [L,R=301,NE]

但它大多失败:请求http://www.example.com仍然通过,但https://www.example.com/doesnotexist.html抛出 404。(如果没有重定向,这是正确的,因为该页面在网站上不存在,但这就是重定向的重点:我希望将此请求发送到https://www.example.com。)

啊。除了我之外,这个问题的答案可能对所有人来说都是显而易见的;任何人都可以帮忙吗?

PS:我处于共享托管情况,所以我必须使用.htaccess文件而不是破解完整的 Apache 配置文件。

apache-2.2 .htaccess mod-rewrite redirection
  • 3 3 个回答
  • 4838 Views

3 个回答

  • Voted
  1. Best Answer
    MrWhite
    2020-09-27T18:28:53+08:002020-09-27T18:28:53+08:00

    如果您正在“关闭站点”,那么您可能不应该将旧站点页面“重定向”到单个页面。HTTP 重定向发送 301 响应代码,通知用户和搜索引擎页面已移动。(尽管对单个页面的大规模重定向很可能被 Google 视为软 404。)

    相反,您应该提供自定义的“410 Gone”响应。410 通知搜索引擎页面已消失且不再返回。您的“单页”是自定义错误文档。

    例如:

    ErrorDocument 410 /single-page.html
    
    RewriteEngine On
    
    # Trigger a 410 Gone for all user requests
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^ - [G]
    

    检查环境变量的附加条件(在初始请求时为空,但在触发并设置 HTTP 响应状态REDIRECT_STATUS后设置为“410” )是为了确保两件事:RewriteRule

    1. 错误文档本身的内部子请求(即/single-page.html在此示例中)不会触发另一个 410(本质上导致无限循环),从而阻止提供自定义错误文档(在这种情况下将发送默认服务器响应)。

    2. 并且还允许对其自身的直接请求/single-page.html也触发 410 而无需创建重写循环。

    (旁白:不幸的是,使用这种方式检测已触发的“错误状态”的技术似乎不适用于 LiteSpeed 服务器,因为在 4xx 响应的情况下,在请求期间未更新 env var 。但是,它已更新对于内部重写,即 200 个 OK 响应,因此它仍然是防止一般内部重写循环的好解决方案。奇怪的是为什么会有这种差异。似乎是一个错误。)REDIRECT_STATUS

    如果您有需要在错误文档中显示的图像(和/或其他外部资源),请参阅我对以下相关问题的回答:

    • 为 410(已消失的页面)使用 htaccess 文件可防止使用图像
    • 45
  2. Jose Fernando Lopez Fernandez
    2020-09-27T15:34:37+08:002020-09-27T15:34:37+08:00

    原因http://www.example.com/是有效的,https://www.example.com/doesnotexist.html而不是因为如果客户端通过 HTTPS 访问站点,您的重写条件会显式禁用重写(我相信现在有几个主要浏览器默认这样做,但我没有这方面的来源我的头顶)。

    我假设您这样做是为了防止无限循环,否则它将无限地重写并将每个请求重定向到(我假设是)规范 url,而客户端永远无法实际查看页面。

    我相信以下配置是您正在寻找的。请注意,我在本地服务器上对此进行了测试,但我运行的是 2.4.46 版。就我所知,从对2.2 版 mod_rewrite 文档的半看半看中可以看出,升级到2.4 版没有任何重大变化,至少在mod_rewrite具体情况下是这样。

    RewriteEngine On
    RewriteCond expr "! %{REQUEST_URI} -strmatch '/'"
    RewriteRule (.*) https://www.example.com/ [L,R=301,NE]
    

    显然,此配置启用了重写引擎,之后它会检查请求的 URI。如果它不等于“/”,它会将整个内容重写为仅文档根目录,301像您在原始文件中所做的那样发出重定向,并停止处理任何进一步的规则。您可能需要也可能不需要RewriteBase "/"在RewriteEngine On. 当我测试这个时似乎并不重要,因为我能够毫无问题地重写嵌套目录 URI(即../a/b/c成功重定向到/),但文档确实指出了这一点,所以我在这里将警告传递下去。

    同样,我确实对此进行了测试,但是服务器版本不同,因此希望您不会遇到任何问题。请注意,为了使其正常工作(除非技术限制或由上述版本差异引起的差异),您的托管服务提供商需要启用该AllowOverride指令,可能带有All选项,尽管我无法确定究竟是什么重写指令工作的最低要求是。

    • 2
  3. Hagen von Eitzen
    2020-09-28T11:35:24+08:002020-09-28T11:35:24+08:00

    这不应该工作吗?

    RewriteEngine On
    RewriteRule ^ index.html
    
    • 2

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve