Object Storage Service (OSS) permite alojar sitios web estáticos en buckets y configurar reglas de back-to-origin basadas en espejo. Cuando se habilita el hosting de sitios web estáticos, los visitantes del bucket se redirigen automáticamente a la página principal predeterminada o a la página 404 predeterminada que se especifique. Las reglas de back-to-origin basadas en espejo facilitan una migración de datos transparente hacia OSS.
Notas de uso
El código de ejemplo de este tema utiliza el ID de región
cn-hangzhou, correspondiente a la región China (Hangzhou). De forma predeterminada, se usa el endpoint público para acceder a los recursos de un bucket. Si necesita acceder a los recursos del bucket mediante otros servicios de Alibaba Cloud ubicados en la misma región donde se encuentra el bucket, utilice un endpoint interno. Para obtener más información sobre las regiones y los endpoints de OSS, consulte Regions and endpoints.Para configurar el hosting de sitios web estáticos o las reglas de back-to-origin basadas en espejo, es obligatorio contar con el permiso
oss:PutBucketWebsite. Para consultar las configuraciones de hosting de sitios web estáticos o las reglas de back-to-origin basadas en espejo, requiere el permisooss:GetBucketWebsite. Para eliminar estas configuraciones o reglas, debe tener el permisooss:DeleteBucketWebsite. Para obtener más información, consulte Grant a custom policy.
Gestión del hosting de sitios web estáticos
Los sitios web estáticos se componen exclusivamente de contenido estático, incluidos scripts del lado del cliente como JavaScript. Puede alojar un sitio web estático en un bucket de OSS y acceder a él mediante el nombre de dominio del bucket.
Configurar el hosting de sitios web estáticos
A continuación se muestra un ejemplo de código para configurar el hosting de sitios web estáticos:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Create a PutBucketWebsiteRequest object to configure static website hosting for the bucket.
$request = new Oss\Models\PutBucketWebsiteRequest(bucket: $bucket,
websiteConfiguration: new Oss\Models\WebsiteConfiguration(
indexDocument: new Oss\Models\IndexDocument(
suffix: 'index.html', // Specify the name of the file that is used as the default homepage.
supportSubDir: true, // Enable the subdirectory homepage feature for the bucket.
type: 0 // The type of the index page.
),
errorDocument: new Oss\Models\ErrorDocument(
key: 'error.html', // The name of the file that is used as the default 404 page.
httpStatus: 404 // The HTTP status code returned on the default 404 page.
)
)
);
// Use the putBucketWebsite method to configure static website hosting for the bucket.
$result = $client->putBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId // The request ID of the request, which is the unique identifier of the request.
);
Consultar las configuraciones de hosting de sitios web estáticos de un bucket
A continuación se muestra un ejemplo de código para consultar las configuraciones de hosting de sitios web estáticos de un bucket:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Create a GetBucketWebsiteRequest object to query the static website hosting configurations of the bucket.
$request = new Oss\Models\GetBucketWebsiteRequest(bucket: $bucket);
// Use the getBucketWebsite method to query the static website hosting configurations of the bucket.
$result = $client->getBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId . PHP_EOL . // The request ID of the request, which is the unique identifier of the request.
'website config:' . var_export($result->websiteConfiguration, true) . PHP_EOL // The static website hosting configurations.
);
Eliminar las configuraciones de hosting de sitios web estáticos de un bucket
A continuación se muestra un ejemplo de código para eliminar las configuraciones de hosting de sitios web estáticos de un bucket:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Create a DeleteBucketWebsiteRequest object to delete the static website hosting configurations of the bucket.
$request = new Oss\Models\DeleteBucketWebsiteRequest(bucket: $bucket);
// Use the deleteBucketWebsite method to delete the static website hosting configurations of the bucket.
$result = $client->deleteBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId // The request ID of the request, which is the unique identifier of the request.
);
Gestión del back-to-origin basado en espejo
El back-to-origin basado en espejo permite migrar datos a OSS desde un origen autogestionado u otro servicio en la nube sin interrumpir el servicio. Durante la migración, cualquier dato que aún no se haya transferido a OSS se recupera de forma transparente desde el origen, lo que garantiza la continuidad del negocio.
Configurar reglas de back-to-origin basadas en espejo para un bucket
Si un solicitante accede a un objeto que no existe en el bucket especificado, puede indicar la URL del objeto en el origen y definir las condiciones de back-to-origin para recuperarlo desde dicho origen. Por ejemplo, si un bucket llamado examplebucket se encuentra en la región China (Hangzhou) y un solicitante intenta acceder a un objeto inexistente dentro del directorio examplefolder, ubicado en el directorio raíz del bucket, el solicitante se redirige a www.example.com para acceder al objeto almacenado en el directorio examplefolder del origen.
A continuación se muestra un ejemplo de código para configurar reglas de back-to-origin basadas en espejo en este escenario:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Specify mirroring-based back-to-origin rules.
$ruleOk = new Oss\Models\RoutingRule(
ruleNumber: 1, // The rule number.
condition: new Oss\Models\RoutingRuleCondition(
keyPrefixEquals: 'myobject', // Specify the prefix contained in the names of the objects that you want to retrieve.
httpErrorCodeReturnedEquals: 404 // Set the back-to-origin condition to HTTP status code 404.
),
redirect: new Oss\Models\RoutingRuleRedirect(
redirectType: 'Mirror', // Set the redirection type to Mirror.
mirrorURL: 'http://www.test.com/', // Specify the origin URL.
mirrorHeaders: new Oss\Models\MirrorHeaders(
passAll: false, // Specify whether to transmit all HTTP headers.
passs: ['myheader-key1', 'myheader-key2'], // Specify the HTTP headers that can be transmitted.
removes: ['myheader-key3', 'myheader-key4'], // Specify the HTTP headers that cannot be transmitted.
sets: [
new Oss\Models\MirrorHeadersSet(
key: 'myheader-key5', // Specify the names of the specified HTTP headers.
value: 'myheader-value' // Specify the values of the specified HTTP headers.
),
]
)
)
);
// Create a PutBucketWebsite request.
$request = new Oss\Models\PutBucketWebsiteRequest(
bucket: $bucketName, // The name of the bucket.
websiteConfiguration: new Oss\Models\WebsiteConfiguration(
indexDocument: new Oss\Models\IndexDocument(
suffix: 'index.html', // The default homepage for the mirroring-based back-to-origin request.
supportSubDir: true,
type: 0
),
errorDocument: new Oss\Models\ErrorDocument(
key: 'error.html', // The default 404 page for the mirroring-based back-to-origin request.
httpStatus: 404
),
routingRules: new Oss\Models\RoutingRules(
routingRules: [$ruleOk] // The mirroring-based back-to-origin rules.
)
)
);
// Execute the PutBucketWebsite request.
$result = $client->putBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId . PHP_EOL . // The request ID of the request, which is the unique identifier of the request.
'website config:' . var_export($result->websiteConfiguration, true) . PHP_EOL // The static website hosting configurations.
);
Consultar las reglas de back-to-origin basadas en espejo de un bucket
A continuación se muestra un ejemplo de código para consultar las reglas de back-to-origin basadas en espejo de un bucket:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Create a GetBucketWebsite request.
$request = new Oss\Models\GetBucketWebsiteRequest(
bucket: $bucketName, // The name of the bucket.
);
// Execute the GetBucketWebsite request.
$result = $client->getBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId . PHP_EOL . // The request ID of the request, which is the unique identifier of the request.
'website config:' . var_export($result->websiteConfiguration, true) . PHP_EOL // The static website hosting configurations.
);
Eliminar las reglas de back-to-origin basadas en espejo de un bucket
A continuación se muestra un ejemplo de código para eliminar las reglas de back-to-origin basadas en espejo de un bucket:
<?php
// Introduce autoload files to load dependent libraries.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Specify descriptions for command line parameters.
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
"endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint that can be used by other services to access OSS.
"bucket" => ['help' => The name of the bucket, 'required' => True], // (Required) Specify the name of the bucket.
];
// Generate a long options list to parse the command line parameters.
$longopts = \array_map(function ($key) {
return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));
// Parse the command line parameters.
$options = getopt("", $longopts);
// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // Indicate that the required parameters are not configured.
exit(1);
}
}
// Obtain the values of the command line parameters.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.
// Use environment variables to load the AccessKey ID and AccessKey secret.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Use the default configurations of the SDK.
$cfg = Oss\Config::loadDefault();
// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);
// Specify the region.
$cfg->setRegion($region);
// Specify the endpoint if an endpoint is provided.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// Create an OSSClient instance.
$client = new Oss\Client($cfg);
// Create a DeleteBucketWebsite request.
$request = new Oss\Models\DeleteBucketWebsiteRequest(
bucket: $bucketName, // The name of the bucket.
);
// Use the deleteBucketWebsite method to delete the static website hosting configurations of the bucket.
$result = $client->deleteBucketWebsite($request);
// Display the returned result.
printf(
'status code:' . $result->statusCode . PHP_EOL . // The returned HTTP status code.
'request id:' . $result->requestId // The request ID of the request, which is the unique identifier of the request.
);
Referencias
Para consultar el código de ejemplo completo sobre cómo gestionar el hosting de sitios web estáticos y el back-to-origin basado en espejo, visite put_bucket_website, get_bucket_website y delete_bucket_website.
Para obtener más información sobre la operación de API que permite configurar el hosting de sitios web estáticos o el back-to-origin basado en espejo, consulte PutBucketWebsite.
Para obtener más información sobre la operación de API que permite consultar las configuraciones de hosting de sitios web estáticos o las reglas de back-to-origin basadas en espejo, consulte GetBucketWebsite.
Para obtener más información sobre la operación de API que permite eliminar las configuraciones de hosting de sitios web estáticos o las reglas de back-to-origin basadas en espejo, consulte DeleteBucketWebsite.