如何在 Bluehost Cloud 上添加自定义重定向
使用 Bluehost Cloud 托管的自定义重定向文件,您可以修改某些站点请求的行为。该文件在访问站点上的任何 PHP 脚本之前执行,是实现自定义重定向、安全增强和访问控制的强大工具。但需要注意的是,custom-redirects.php 应尽量少用。解决方案应始终充分测试,尤其要考虑页面缓存和边缘缓存的影响。
- 推荐事项
- 入门指南
- 最佳实践与注意事项
- 添加自定义重定向
- 基本页面重定向
- 添加安全头部
- 站点重定向
- 按国家代码地理封锁
- 基本访问阻止
- 按 IP 限制访问
- 总结
推荐事项
在通过 custom-redirects.php 实施更改之前,请考虑替代方案。如果使用此文件,请确保:
- 彻底测试您的实现,尤其是在启用页面缓存和边缘缓存的情况下。
- 避免过度使用此文件,以防止不必要的复杂性或性能问题。
入门指南
- 创建
custom-redirects.php文件:
- 找到您站点的
htdocs目录。 - 创建名为
custom-redirects.php的文件。 - 确保文件以 PHP 开始标签
<?php开头。
- 修改请求行为:
- 现在您可以添加自定义 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-FPM 和 CLI 请求的检查。
// 允许的国家代码数组
$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 站点的请求行为,但应有限度地使用。务必确保所实施的任何解决方案都经过充分测试,并且不会与缓存机制或其他服务器设置冲突。如有疑问,请探索替代方案或咨询我们的支持团队。