L'opération PutBucketWebsite configure un bucket pour l'hébergement de sites web statiques et définit des règles de redirection (RoutingRule).
Notes d'utilisation
Les sites web statiques se composent de contenu statique, y compris des scripts côté client tels que JavaScript. OSS ne prend pas en charge le traitement côté serveur tel que PHP, JSP ou ASP.NET.
L'opération PutBucketWebsite nécessite l'autorisation
oss:PutBucketWebsite. Accorder une stratégie d'accès personnalisée à un utilisateur RAM.-
Fonctionnalités
Configure la page d'accueil par défaut, la page d'erreur 404 par défaut et les règles de redirection (RoutingRule). Les règles de redirection prennent en charge les redirections 3xx et le retour à la source par miroir.
-
Accéder aux sites web statiques à l'aide de noms de domaine personnalisés
Pour accéder à un site web statique via un nom de domaine personnalisé, ajoutez un enregistrement CNAME. Lier un nom de domaine personnalisé.
-
Pages d'index et pages d'erreur
Spécifiez une page d'index et une page d'erreur. Ces deux éléments doivent être des objets présents dans le bucket.
-
Accès anonyme au domaine racine
Une fois l'hébergement de site web statique configuré, OSS renvoie la page d'index pour les requêtes anonymes adressées au domaine racine. Les requêtes signées vers le domaine racine renvoient le résultat de l'opération GetBucket (ListObjects).
Syntaxe de la requête
PUT /?website HTTP/1.1
Date: GMT Date
Content-Length: ContentLength
Content-Type: application/xml
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Authorization: SignatureValue
<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration>
<IndexDocument>
<Suffix>index.html</Suffix>
</IndexDocument>
<ErrorDocument>
<Key>errorDocument.html</Key>
<HttpStatus>404</HttpStatus>
</ErrorDocument>
</WebsiteConfiguration>
En-têtes de requête
DescribeRegions utilise uniquement les en-têtes de requête communs. Pour plus d'informations, consultez En-têtes de requête communs.
Paramètres de requête
-
Contenu de WebsiteConfiguration
Nom
Type
Obligatoire
Description
WebsiteConfiguration
Conteneur
Oui
Nœud racine.
Nœud parent : Aucun
-
Contenu de IndexDocument
Nom
Type
Obligatoire
Description
IndexDocument
Conteneur
Conditionnel
Spécifiez au moins l'un des conteneurs suivants : IndexDocument, ErrorDocument et RoutingRules.
Conteneur pour la page d'accueil par défaut.
Nœud parent : WebsiteConfiguration
Suffix
Chaîne
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent IndexDocument.
Page d'accueil par défaut.
OSS renvoie cette page pour les requêtes dont l'URL se termine par une barre oblique (/).
Nœud parent : IndexDocument
SupportSubDir
Chaîne
Non
Indique s'il faut rediriger les requêtes vers un sous-répertoire vers la page d'index de ce sous-répertoire. Valeurs valides :
-
true : Redirige les requêtes vers la page d'index du sous-répertoire.
-
false (par défaut) : Ne redirige pas les requêtes vers la page d'index du sous-répertoire. Les requêtes sont plutôt redirigées vers la page d'index du répertoire racine.
Par exemple, si la page d'accueil par défaut est index.html et qu'une requête est envoyée à
bucket.oss-cn-hangzhou.aliyuncs.com/subdir/, la définition de SupportSubDir sur false redirige la requête versbucket.oss-cn-hangzhou.aliyuncs.com/index.html. Si vous définissez SupportSubDir sur true, la requête est redirigée versbucket.oss-cn-hangzhou.aliyuncs.com/subdir/index.html.Nœud parent : IndexDocument
Type
Énumération
Non
Opération à effectuer lorsque la page d'accueil par défaut est définie, que le nom de l'objet accédé ne se termine pas par une barre oblique (/) et que l'objet n'existe pas. Cette opération prend effet uniquement lorsque SupportSubDir est défini sur true et s'applique après RoutingRule et avant ErrorFile.
Par exemple, si la page d'accueil par défaut est index.html, qu'une requête est envoyée pour le chemin d'accès au fichier
bucket.oss-cn-hangzhou.aliyuncs.com/abcet que l'objet abc n'existe pas, les actions pour les différentes valeurs de Type sont les suivantes :-
0 (par défaut) : Vérifie si abc/index.html existe. Le chemin est au format
Objet + / + Page d'accueil. Si l'objet existe, OSS renvoie une redirection 302 vers le chemin encodé URL/abc/. Le chemin est au format/ + Objet + /. Si l'objet n'existe pas, OSS renvoie une erreur 404 puis vérifie la présence d'une page d'erreur. -
1 : Renvoie une erreur 404 avec le code d'erreur NoSuchKey, puis vérifie la présence d'une page d'erreur.
-
2 : Vérifie si abc/index.html existe. Si l'objet existe, son contenu est renvoyé. Si l'objet n'existe pas, OSS renvoie une erreur 404 puis vérifie la présence d'une page d'erreur.
Nœud parent : IndexDocument
-
-
Contenu du document d'erreur
Nom
Type
Obligatoire
Description
ErrorDocument
Conteneur
Conditionnel
Spécifiez au moins l'un des conteneurs suivants : IndexDocument, ErrorDocument et RoutingRules.
Conteneur pour la page d'erreur 404.
Nœud parent : WebsiteConfiguration
Key
Chaîne
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent ErrorDocument.
Page d'erreur.
Renvoyée lorsqu'un objet demandé n'existe pas.
Nœud parent : ErrorDocument
HttpStatus
Chaîne
Non
Code d'état HTTP à renvoyer avec la page d'erreur.
Valeurs valides : 200, 404 (par défaut)
Nœud parent : ErrorDocument
-
RoutingRules|RoutingRule|RuleNumber
Nom
Type
Obligatoire
Description
RoutingRules
Conteneur
Conditionnel
Spécifiez au moins l'un des conteneurs suivants : IndexDocument, ErrorDocument et RoutingRules.
Conteneur pour les règles de redirection.
Nœud parent : WebsiteConfiguration
RoutingRule
Conteneur
Non
Règle de redirection ou règle de retour à la source par miroir. Maximum : 20 règles.
Nœud parent : RoutingRules
RuleNumber
Entier positif
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent RoutingRule.
Numéro de séquence. OSS fait correspondre les règles par ordre croissant et s'arrête à la première correspondance.
Nœud parent : RoutingRule
-
Contenu de Condition dans RoutingRule
Nom
Type
Obligatoire
Description
Condition
Conteneur
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent RoutingRule.
Conditions de correspondance.
Toutes les conditions doivent être remplies pour que la règle s'exécute.
Nœud parent : RoutingRule
KeyPrefixEquals
Chaîne
Non
La clé de l'objet doit avoir ce préfixe pour que la règle s'applique.
Nœud parent : Condition
HttpErrorCodeReturnedEquals
Code d'état HTTP
Non
Code d'état HTTP renvoyé pour l'objet demandé qui déclenche cette règle. Pour le retour à la source par miroir, définissez la valeur sur 404.
Nœud parent : Condition
IncludeHeader
Conteneur
Non
La requête doit inclure l'en-tête et la valeur spécifiés pour que la règle s'applique. Vous pouvez spécifier jusqu'à 10 en-têtes.
Nœud parent : Condition
Key
Chaîne
Oui
Cette règle s'applique uniquement si la requête contient l'en-tête spécifié et que sa valeur correspond exactement à la valeur spécifiée pour Equals.
Nœud parent : IncludeHeader
Equals
Chaîne
Non
Valeur de l'en-tête de requête. La règle s'applique uniquement si la requête inclut l'en-tête spécifié par Key et que sa valeur correspond à cette valeur.
Nœud parent : IncludeHeader
KeySuffixEquals
Chaîne
Non
La clé de l'objet doit avoir ce suffixe pour que la règle s'applique.
La valeur par défaut est vide, ce qui signifie qu'aucun suffixe n'est mis en correspondance.
Nœud parent : Condition
-
Configuration de la redirection
Nom
Type
Obligatoire
Description
Redirect
Conteneur
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent RoutingRule.
Action à effectuer lorsque la règle correspond.
Nœud parent : RoutingRule
RedirectType
Chaîne
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent Redirect.
Type de redirection. Valeurs valides :
-
Mirror : retour à la source par miroir.
-
External : redirection externe. OSS renvoie une redirection 3xx vers une autre adresse.
-
AliCDN : redirection Alibaba Cloud CDN. Ce type est utilisé pour Alibaba Cloud CDN. Contrairement à une redirection externe, OSS ajoute un en-tête supplémentaire à la requête. Après qu'Alibaba Cloud CDN a détecté cet en-tête, il redirige la requête vers l'adresse spécifiée et renvoie les données récupérées à l'utilisateur, au lieu de renvoyer une requête de redirection 3xx à l'utilisateur.
Nœud parent : Redirect
PassQueryString
Booléen
Non
Indique s'il faut inclure la chaîne de requête de la requête d'origine dans la redirection ou la requête de retour à la source.
Par exemple, un utilisateur envoie une requête avec la chaîne de requête
?a=b&c=d. Si vous définissez PassQueryString sur true et que la règle spécifie une redirection 302, l'en-tête Location de la réponse inclut la chaîne de requête, par exempleLocation:example.com?a=b&c=d. Si la règle spécifie un retour à la source par miroir, la requête de retour à la source inclut également la chaîne de requête.Valeurs valides : true, false (par défaut)
Nœud parent : Redirect
MirrorURL
Chaîne
Conditionnel
Ce paramètre est obligatoire si RedirectType est défini sur Mirror.
Adresse du serveur d'origine pour le retour à la source par miroir. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
L'adresse doit commencer par http:// ou https:// et se terminer par une barre oblique (/). OSS ajoute le nom de l'objet à cette adresse pour créer l'URL de retour à la source.
Par exemple, si l'objet demandé est myobject et que vous définissez ce paramètre sur
http://example.com/, l'URL de retour à la source esthttp://example.com/myobject. Si vous définissez ce paramètre surhttp://example.com/dir1/, l'URL de retour à la source esthttp://example.com/dir1/myobject.Nœud parent : Redirect
MirrorPassQueryString
Booléen
Non
Identique à PassQueryString mais avec une priorité plus élevée. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Valeur par défaut : false
Nœud parent : Redirect
MirrorFollowRedirect
Booléen
Non
Indique s'il faut suivre les redirections 3xx du serveur d'origine. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Par exemple, le serveur d'origine renvoie une redirection 302 avec un en-tête Location.
-
Si vous définissez ce paramètre sur true, OSS envoie une nouvelle requête à l'adresse spécifiée dans l'en-tête Location.
Un maximum de 10 redirections sont suivies. Si le nombre de redirections dépasse 10, la requête de retour à la source échoue.
-
Si vous définissez ce paramètre sur false, OSS renvoie la redirection 302 et transmet l'en-tête Location au client.
Valeur par défaut : true
Nœud parent : Redirect
MirrorCheckMd5
Booléen
Non
Indique s'il faut vérifier le hachage MD5 du corps de la réponse du serveur d'origine. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Lorsque MirrorCheckMd5 est défini sur true et que la réponse d'origine inclut un en-tête Content-Md5, OSS vérifie les données extraites par rapport à la valeur de l'en-tête. Les données non correspondantes ne sont pas enregistrées.
Valeur par défaut : false
Nœud parent : Redirect
MirrorHeaders
Conteneur
Non
En-têtes à inclure dans la requête de retour à la source. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Nœud parent : Redirect
PassAll
Booléen
Non
Indique s'il faut transmettre tous les en-têtes de requête au serveur d'origine, à l'exception des en-têtes suivants. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
-
En-têtes tels que content-length, authorization2, authorization, range et date
-
En-têtes commençant par oss-, x-oss- ou x-drs-
Valeur par défaut : false
Nœud parent : MirrorHeaders
Pass
Chaîne
Non
En-têtes spécifiés à transmettre au serveur d'origine. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Chaque en-tête peut avoir une longueur maximale de 1 024 octets et ne peut contenir que des chiffres (0-9), des lettres (a-z, A-Z) et des traits d'union (-).
Vous pouvez spécifier jusqu'à 10 en-têtes.
Nœud parent : MirrorHeaders
Remove
Chaîne
Non
En-têtes spécifiés dont la transmission au serveur d'origine est interdite. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Chaque en-tête a une longueur maximale de 1 024 octets et utilise le même jeu de caractères que Pass.
Vous pouvez spécifier jusqu'à 10 en-têtes. Ce paramètre est généralement utilisé avec PassAll.
Nœud parent : MirrorHeaders
Set
Conteneur
Non
Définit un en-tête à inclure dans la requête de retour à la source, que la requête d'origine l'ait contenu ou non. Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Vous pouvez attribuer ce conteneur à un maximum de 10 groupes.
Nœud parent : MirrorHeaders
Key
Chaîne
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent Set.
Clé de l'en-tête à définir. La clé peut avoir une longueur maximale de 1 024 octets et ne peut contenir que des chiffres (0-9), des lettres (a-z, A-Z) et des traits d'union (-). Prend effet uniquement lorsque RedirectType est défini sur Mirror.
Nœud parent : Set
Value
Chaîne
Conditionnel
Ce paramètre est obligatoire si vous spécifiez le nœud parent Set.
Valeur de l'en-tête à définir. La valeur peut avoir une longueur maximale de 1 024 octets et ne peut pas contenir
\r\n. Prend effet uniquement lorsque RedirectType est défini sur Mirror.Nœud parent : Set
Protocol
Chaîne
Non
Protocole à utiliser pour la redirection. Prend effet uniquement lorsque RedirectType est défini sur External ou AliCDN.
Par exemple, si l'objet demandé est test, que vous définissez la destination de redirection sur
example.comet que vous définissez Protocol sur https, l'en-tête Location esthttps://example.com/test.Valeurs valides : http, https.
Nœud parent : Redirect
HostName
Chaîne
Non
Nom de domaine à utiliser pour la redirection. Le nom de domaine doit être valide.
Par exemple, si l'objet demandé est test, que vous définissez Protocol sur https et que vous définissez HostName sur
example.com, l'en-tête Location esthttps://example.com/test.Nœud parent : Redirect
ReplaceKeyPrefixWith
Chaîne
Non
Chaîne par laquelle remplacer le préfixe de la clé de l'objet lors de la redirection. Si le préfixe est vide, cette chaîne est insérée au début de la clé de l'objet.
RemarqueVous pouvez spécifier ReplaceKeyWith ou ReplaceKeyPrefixWith, mais pas les deux.
Par exemple, si l'objet demandé est abc/test.txt, que vous définissez KeyPrefixEquals sur abc/ et que vous définissez ReplaceKeyPrefixWith sur def/, l'en-tête Location est
http://example.com/def/test.txt.Nœud parent : Redirect
EnableReplacePrefix
Booléen
Non
Si ce paramètre est défini sur true, le préfixe de l'objet est remplacé par la valeur de ReplaceKeyPrefixWith. Si ce paramètre n'est pas spécifié ou est vide, le préfixe de l'objet est tronqué.
RemarqueVous ne pouvez pas définir ce paramètre sur true si le paramètre ReplaceKeyWith n'est pas vide.
Valeur par défaut : false
Nœud parent : Redirect
ReplaceKeyWith
Chaîne
Non
Remplace la totalité de la clé de l'objet lors de la redirection. Utilisez la variable ${key} pour faire référence à la clé d'objet d'origine.
Par exemple, si l'objet demandé est test et que vous définissez ReplaceKeyWith sur
prefix/${key}.suffix, l'en-tête Location esthttp://example.com/prefix/test.suffix.Nœud parent : Redirect
HttpRedirectCode
Code d'état HTTP
Non
Code d'état HTTP à renvoyer pour la redirection. Prend effet uniquement lorsque RedirectType est défini sur External ou AliCDN.
Valeurs valides : 301 (par défaut), 302, 307.
Nœud parent : Redirect
-
En-têtes de réponse
La réponse contient uniquement les en-têtes de réponse communs. Pour plus d'informations, consultez En-têtes de réponse communs.
Exemples
-
Exemple de requête
PUT /?website HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Content-Length: 209 Date: Thu, 17 Apr 2025 03:21:12 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e <?xml version="1.0" encoding="UTF-8"?> <WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix> <SupportSubDir>true</SupportSubDir> <Type>0</Type> </IndexDocument> <ErrorDocument> <Key>error.html</Key> <HttpStatus>404</HttpStatus> </ErrorDocument> </WebsiteConfiguration> -
Exemple de réponse
HTTP/1.1 200 OK x-oss-request-id: 534B371674E88A4D8906008B Date: Fri, 04 May 2012 03:21:12 GMT Content-Length: 0 Connection: keep-alive Server: AliyunOSS -
Exemple complet
PUT /?website HTTP/1.1 Date: Thu, 17 Apr 2025 09:03:18 GMT Content-Length: 2064 Host: test.oss-cn-hangzhou-internal.aliyuncs.com Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e User-Agent: aliyun-sdk-python-test/0.4.0 <WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix> <SupportSubDir>true</SupportSubDir> <Type>0</Type> </IndexDocument> <ErrorDocument> <Key>error.html</Key> <HttpStatus>404</HttpStatus> </ErrorDocument> <RoutingRules> <RoutingRule> <RuleNumber>1</RuleNumber> <Condition> <KeyPrefixEquals>abc/</KeyPrefixEquals> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <RedirectType>Mirror</RedirectType> <PassQueryString>true</PassQueryString> <MirrorURL>http://example.com/</MirrorURL> <MirrorPassQueryString>true</MirrorPassQueryString> <MirrorFollowRedirect>true</MirrorFollowRedirect> <MirrorCheckMd5>false</MirrorCheckMd5> <MirrorHeaders> <PassAll>true</PassAll> <Pass>myheader-key1</Pass> <Pass>myheader-key2</Pass> <Remove>myheader-key3</Remove> <Remove>myheader-key4</Remove> <Set> <Key>myheader-key5</Key> <Value>myheader-value5</Value> </Set> </MirrorHeaders> </Redirect> </RoutingRule> <RoutingRule> <RuleNumber>2</RuleNumber> <Condition> <KeyPrefixEquals>abc/</KeyPrefixEquals> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> <IncludeHeader> <Key>host</Key> <Equals>test.oss-cn-beijing-internal.aliyuncs.com</Equals> </IncludeHeader> </Condition> <Redirect> <RedirectType>AliCDN</RedirectType> <Protocol>http</Protocol> <HostName>example.com</HostName> <PassQueryString>false</PassQueryString> <ReplaceKeyWith>prefix/${key}.suffix</ReplaceKeyWith> <HttpRedirectCode>301</HttpRedirectCode> </Redirect> </RoutingRule> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <RuleNumber>3</RuleNumber> <Redirect> <ReplaceKeyWith>prefix/${key}</ReplaceKeyWith> <HttpRedirectCode>302</HttpRedirectCode> <EnableReplacePrefix>false</EnableReplacePrefix> <PassQueryString>false</PassQueryString> <Protocol>http</Protocol> <HostName>example.com</HostName> <RedirectType>External</RedirectType> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> HTTP/1.1 200 OK Server: AliyunOSS Date: Fri, 27 Jul 2018 09:03:18 GMT Content-Length: 0 Connection: keep-alive x-oss-request-id: 5B5ADFD6ED3CC49176CBE29D x-oss-server-time: 47
SDK
CLI (ossutil)
Commande ossutil : put-bucket-website.
Codes d'erreur
|
Code d'erreur |
Code d'état HTTP |
Description |
|
InvalidDigest |
400 |
La valeur de l'en-tête Content-MD5 ne correspond pas au hachage MD5 calculé par OSS pour le corps de la requête. |