跳到主要内容

如何在 Bluehost Cloud 上添加自定义重定向

使用 Bluehost Cloud 托管的自定义重定向文件,您可以修改某些站点请求的行为。该文件在访问站点上的任何 PHP 脚本之前执行,是实现自定义重定向、安全增强和访问控制的强大工具。但需要注意的是,custom-redirects.php 应尽量少用。解决方案应始终充分测试,尤其要考虑页面缓存和边缘缓存的影响。

  • 推荐事项
  • 入门指南
  • 最佳实践与注意事项
  • 添加自定义重定向
  • 基本页面重定向
  • 添加安全头部
  • 站点重定向
  • 按国家代码地理封锁
  • 基本访问阻止
  • 按 IP 限制访问
  • 总结

推荐事项

在通过 custom-redirects.php 实施更改之前,请考虑替代方案。如果使用此文件,请确保:

  • 彻底测试您的实现,尤其是在启用页面缓存和边缘缓存的情况下。
  • 避免过度使用此文件,以防止不必要的复杂性或性能问题。

入门指南

  1. 创建 custom-redirects.php 文件:
  • 找到您站点的 htdocs 目录。
  • 创建名为 custom-redirects.php 的文件。
  • 确保文件以 PHP 开始标签 <?php 开头。
  1. 修改请求行为:
  • 现在您可以添加自定义 PHP 代码来修改进入站点的请求行为。

最佳实践与注意事项

  • 测试: 请务必仔细测试通过 custom-redirects.php 所做的任何更改,特别是在使用页面缓存和边缘缓存等缓存系统时。不正确的配置可能导致意外结果或性能问题。
  • 性能影响: 由于 custom-redirects.php 会在每个请求时执行,过度使用复杂脚本或多重重定向可能会对站点性能产生负面影响。使用此文件时请始终考虑性能因素。

添加自定义重定向

以下是几个常见用例及示例,展示如何在您的 Bluehost Cloud 站点上实现 custom-redirects.php

基本页面重定向

此简单重定向将在用户访问特定页面时将其发送到新位置。 注意: 设置重定向时,subdir 指的是特定子目录。例如,如果 /subdir 是默认目录,您可以将其重定向到 /subdir-new

  • /subdir: 原始子目录。
  • /subdir-new: 重定向目标子目录。
if ( $_SERVER['REQUEST_URI'] == '/subdir' ) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: /subdir-new');
exit;
}

添加安全头部

为了增强安全性,您可以添加各种 HTTP 头部信息。 注意: Bluehost Cloud 会自动设置严格传输安全(strict-transport-security)头,且无法修改。

header('X-XSS-Protection: 1; mode=block');
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
header('Referrer-Policy: no-referrer-when-downgrade');

站点重定向

您可以基于特定条件执行全站重定向,例如将主页重定向到不同的 URL。

if ( $_SERVER['HTTP_HOST'] == 'https://your-domain.site.com' && 
$_SERVER['REQUEST_URI'] == '/' ) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://external-url.com/news');
exit;
}

按国家代码地理封锁

地理封锁通过国家代码限制访问。此示例仅允许来自美国(US)和加拿大(CA)的请求,并绕过对 PHP-FPMCLI 请求的检查。

// 允许的国家代码数组
$allowedCountries = ['US', 'CA'];

// 获取当前服务器 API
$api = php_sapi_name();
// 对非 Web 服务器 API 绕过地理检查
if ($api == 'fpm-fcgi' || $api == 'cli') {
return; // 对 CLI 或 FPM 环境提前退出
}
// 获取国家代码,默认阻止访问
$countryCode = $_SERVER['GEOIP_COUNTRY_CODE'] ?? 'Unknown'; // 使用空合并操作符以增强可读性

// 如果国家代码不在允许列表中,则阻止访问
if (!in_array($countryCode, $allowedCountries)) {
header('HTTP/1.1 404 Not Found', true, 404);
exit;
}

基本访问阻止

要阻止对特定文件或文件夹的访问,可以使用以下代码段,返回 410 Gone HTTP 状态。

if ( strpos($_SERVER['REQUEST_URI'],'{file or folder name here, no curly braces}') !== false ) {
http_response_code( 410 );
exit;
}

按 IP 限制访问

您可以使用如下脚本,根据访问者的 IP 地址限制对站点某些页面或区域的访问。此脚本仅允许特定代理 IP 访问。

/**
* 以下代码阻止除 COMPANY_EXAMPLE_1 和 COMPANY_EXAMPLE_2 代理外的所有访问 /sandbox URI
* 123.456.789.101 是 COMPANY_EXAMPLE_1 的代理
* 987.654.321.000 是 COMPANY_EXAMPLE_2 的代理
*/
$ips = array('123.456.789.101','987.654.321.000');

if ( strpos($_SERVER['REQUEST_URI'],'/sandbox') !== false ) {
if ( !in_array($_SERVER['REMOTE_ADDR'],$ips) ) {
header('HTTP/1.0 403 Forbidden');
echo '403 Forbidden';
exit;
}
}

总结

虽然 custom-redirects.php 提供了一种灵活的方式来修改 Bluehost Cloud 站点的请求行为,但应有限度地使用。务必确保所实施的任何解决方案都经过充分测试,并且不会与缓存机制或其他服务器设置冲突。如有疑问,请探索替代方案或咨询我们的支持团队。