如何将 index.html 重定向到 index.php

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

就在上周,我完成了一个客户的重新设计项目,并上线了该项目。在发布当天,下午晚些时候,客户给我打了电话

客户我刚刚点击了我们的网站,它无法打开!!
:真的吗?这很奇怪。对我来说,网站似乎一切正常。让我们看看是否可以找到问题所在。
客户我刚刚点击了我们的网站,它无法打开!!
:好的,我明白了。你说的“点击了我们的网站”是什么意思?
客户我在桌面上有一个按钮,我点击它可以访问我们的网站,但当我点击它时,出现了一个错误页面,而不是我们的网站。
:嗯……你能告诉我你的网页浏览器中显示的完整网址是什么吗?
客户http://clients-website.com/index.html
:啊哈!我明白了,你的书签无法工作,因为它专门指向一个不再存在的 HTML 文件,新首页实际上是 index.php 而不是 index.html。不过不要修复你的书签,你的一些访客可能会遇到同样的问题,所以我将修复它,以便你的书签可以正常工作。
客户我刚刚点击了我们的网站,它无法打开!!
:好的。说真的,深呼吸几次,给我 10 分钟。

将 index.html 重定向到 index.php

如果用户将其浏览器设置为**默认显示完整 URL**,则其书签将反映此完整 URL。这意味着,如果您更改其文件扩展名(例如,在本例中从 html 移动到 php),则会破坏其书签。这不好。幸运的是,我们可以解决这个问题。

我最初的想法是“可惜这不是 PHP”,因为 PHP 中的重定向非常容易

<?php
  header( 'Location: http://www.redirect-location.com' );
  exit();
?>

这实际上是您需要放在 PHP 文件中才能使重定向生效的所有内容。不过没关系,使用 HTML 进行重定向也同样简单,但您确实需要创建一个常规的 HTML 结构化文件,然后将此元语句放入头部

<meta http-equiv="refresh" content="1;url=http://www.redirect-location.com">

“1” 代表“延迟一秒”,您可以将其设置为任何整数。这是一个可接受的解决方案,并且可以正常工作,但我认为它不是**最佳**解决方案。首先,您需要保留该 HTML 文件,这会使您的目录变得杂乱,并且每次您通过 FTP 登录时都会看到它。有一种更好的方法……

.htaccess 重写

只需将此规则添加到 .htaccess 文件中,重定向就会在服务器端快速轻松地发生。

RewriteEngine on
RewriteRule index\.html index.php [NC,R]

更新:来自 Malcolm New - 显然以上内容将匹配任何类似 whateverindex.html 的文件名,以下代码可以防止这种情况。

RewriteRule ^index\.htm$ index.php [NC,R]

另一个更新:来自 Jessi Hance -

我必须添加 L 标志以告诉服务器停止处理重写规则。我还发现我需要将规则放在 .htaccess 文件的顶部,位于 WordPress 生成的规则之上。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html?$ / [NC,R,L]

 

:好的,现在一切都已修复,您的书签应该可以正常工作了。
客户太好了。现在,请给我一两天时间,让我再找些东西来让你感到害怕,然后我会再次歇斯底里地给你打电话。
:听起来不错。