diff --git a/CHANGES b/CHANGES
index 216e050c..b88b9666 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,170 @@
-*- coding: utf-8 -*-
+Changes with Apache 2.4.69
+
+ *) Fix the tar icon in the documentation so that its background is
+ transparent. PR 70238. [Jeffery To The CGI specification (RFC 3875) defines a number of environment
- variables that expand on those defined by the HTTP spec.
- These have been adopted more broadly, and are a standard
+ The CGI specification (RFC 3875) defines a
+ number of meta-variables, many of which derive their values from
+ HTTP request headers. Apache httpd makes these available as
+ environment variables to CGI scripts and other request-processing
+ mechanisms. These have been adopted more broadly, and are a standard
part of passing information between the browser and the
server, and between processes on the server side. Here we
discuss a few of these. For the complete list of request
diff --git a/docs/manual/env.html.fr.utf8 b/docs/manual/env.html.fr.utf8
index f04c0a52..417e572f 100644
--- a/docs/manual/env.html.fr.utf8
+++ b/docs/manual/env.html.fr.utf8
@@ -29,8 +29,6 @@
ko |
tr Deux types de variables d'environnement affectent le serveur
HTTP Apache. De nombreux exemples d’utilisation qui nécessitaient auparavant de
+ définir et tester des variables d’environnement — par exemple les en-têtes
+ conditionnels, le contrôle d’accès et la journalisation — peuvent
+ maintenant être traités de manière plus directe en utilisant les
+ expressions CGI environment variables ¶
-
+ Modules Apparentés Directives Apparentées Alternative moderne : les expressions
+ <If> avec la
+ fonction reqenv. Voir Les expressions
+ dans le serveur HTTP Apache pour la syntaxe des expressions et la
+ liste complète des variables disponibles.Scripts CGI
@@ -214,6 +224,10 @@
caractéristiques du client. Par exemple, vous pouvez utiliser ces
directives pour interdire l'accès depuis un navigateur particulier
(User-Agent).
+ Pour des conditions plus complexes, Require
+ expr fournit une alternative qui permet d’évaluer des
+ variables d’environnement en utilisant la fonction reqenv
+ en combinaison avec d’autres propriétés de requête.
La spécification sur les CGIs (RFC 3875) définit un - certain nombre de variables d'environnement qui s'ajoutent à celles définies - par la spécification de HTTP. Elles ont été plus largement adoptées et + certain nombre de méta-variables dont beaucoup sont affectées de leur valeur + à partir des en-têtes HTTP. Apache httpd les met à disposition en tant que + variables d’environnement pour les scripts CGI et d’autres mécanismes de + traitement des requêtes. Elles ont été plus largement adoptées et constituent une méthode standard pour transmettre des informations entre le navigateur et le serveur, et entre les processus au sein du serveur. Nous en - décrivons quelques unes ici ; consultez la spécification de CGI pour - plus de détails.
+ décrivons quelques unes ici. Pour une liste complète des variables de + requête disponibles dans les expressions (parmi + lesquellesREQUEST_URI, REMOTE_ADDR,
+ SERVER_NAME et de nombreuses autres), voir le document de
+ référence variables dans les expressions.
+
+ Consultez la spécification CGI pour plus de détails à propos des + métavariables CGI standard.
Disponible dans les versions postérieures à 2.0.54
-Quand Apache httpd génère une redirection en réponse à une requête client, la réponse inclut un texte destiné à être affiché au cas où le client ne suivrait pas, ou ne pourrait pas suivre automatiquement la redirection. diff --git a/docs/manual/glossary.html.fr.utf8 b/docs/manual/glossary.html.fr.utf8 index b378c0e4..6c148f63 100644 --- a/docs/manual/glossary.html.fr.utf8 +++ b/docs/manual/glossary.html.fr.utf8 @@ -31,8 +31,6 @@ ko | tr
-Ce glossaire définit la terminologie courante relative au serveur HTTP Apache en particulier, et aux serveurs web en général. Vous trouverez plus @@ -149,6 +147,14 @@ pour décrire les directives de httpd +
<Directory>, <DirectoryMatch>, <Files> ou <FilesMatch> dans les fichiers de configuration
+ principaux, ou dans un fichier .htaccess. Dans un contexte de
+ répertoire, les directives ne s’appliquent qu’au répertoire (ou à l’ensemble
+ de fichiers) auquel elles sont associées.apxs
+
If you wish to restrict access to portions of your site based on the
- host address of your visitors, this is most easily done using
+ host address of your visitors, use
mod_authz_host.
The usage of these directives is:
-Require host address -Require ip ip.address- +
Require host address +Require ip ip.address ++
In the first form, address is a fully qualified domain name (or a partial domain name); you may provide multiple @@ -84,12 +85,26 @@ Require ip ip.address partial IP address, a network/netmask pair, or a network/nnn CIDR specification. Either IPv4 or IPv6 addresses may be used.
+# Full IP address +Require ip 10.2.3.4 +# Partial IP address (matches any host in the 172.20.0.0/16 range) +Require ip 172.20 +# Network/netmask pair +Require ip 192.168.1.0/255.255.255.0 +# Network/CIDR specification +Require ip 192.168.1.0/24 +# IPv6 address +Require ip 2001:db8::a00:20ff:fea7:ccea +# IPv6 with CIDR +Require ip 2001:db8:1::/48+
See the mod_authz_host documentation for further examples of this syntax.
You can insert not to negate a particular requirement.
- Note, that since a not is a negation of a value, it cannot
+ Since a not is a negation of a value, it cannot
be used by itself to allow or deny a request, as not true
does not constitute false. Thus, to deny a visit using a negation,
the block must have one element that evaluates as true or false.
@@ -97,28 +112,28 @@ Require ip ip.address
board, and you want to keep them out, you could do the
following:
<RequireAll> - Require all granted - Require not ip 10.252.46.165 +directive est permise dans un fichier<RequireAll> +Require all granted +Require not ip 10.252.46.165 </RequireAll>- +Visitors coming from that address (
-10.252.46.165) - will not be able to see the content covered by this directive. If, - instead, you have a machine name, rather than an IP address, you + will not be able to see the content covered by this directive. If, + instead, you have a machine name, rather than an IP address, you can use that.Require not host host.example.com -- +Require not host host.example.com ++And, if you'd like to block access from an entire domain, - you can specify just part of an address or domain name:
+ you can specify part of an address or domain name: -Require not ip 192.168.205 -Require not host phishers.example.com moreidiots.example +based on user-agent (the browser type) you might do the following: -Require not ip 192.168.205 +Require not host phishers.example.com badguys.example Require not host gov- +Use of the
@@ -133,17 +148,17 @@ Require not host govRequireAll,RequireAny, andRequireNonedirectives may be used to enforce more complex sets of requirements.<If "%{HTTP_USER_AGENT} == 'BadBot'"> - Require all denied +<If "%{HTTP_USER_AGENT} == 'BadBot'"> +Require all denied </If>- +Using the
-Requireexprsyntax, this could also be written as:Require expr %{HTTP_USER_AGENT} != 'BadBot'- +Require expr %{HTTP_USER_AGENT} != 'BadBot'+@@ -143,17 +157,18 @@ arbitraires ¶ fonction du user-agent (le type de navigateur), vous pouvez spécifier ceci : -Warning:
Access control by
User-Agentis an unreliable technique, @@ -166,11 +181,11 @@ Require not host govFor example, if you wish to block access to a resource between 8pm and 7am, you can do this using
-mod_rewrite.RewriteEngine On +sous-réseau ou une spécification CIDR de la forme réseau/nnn. Il est possible de spécifier des adresses IPv4 ou IPv6. +RewriteEngine On RewriteCond "%{TIME_HOUR}" ">=20" [OR] RewriteCond "%{TIME_HOUR}" "<07" -RewriteRule "^/fridge" "-" [F]- +RewriteRule "^/fridge" "-" [F] +This will return a 403 Forbidden response for any request after 8pm or before 7am. This technique can be used for any criteria that you wish diff --git a/docs/manual/howto/access.html.fr.utf8 b/docs/manual/howto/access.html.fr.utf8 index 9acb7cd2..88bd4007 100644 --- a/docs/manual/howto/access.html.fr.utf8 +++ b/docs/manual/howto/access.html.fr.utf8 @@ -46,7 +46,7 @@ d'accès
Plusieurs modules peuvent intervenir dans le contrôle d'accès. Les plus importants sont
@@ -55,9 +55,8 @@ d'accèsmod_authz_coreet -mod_authz_host. Ce document illustre aussi comment +mod_authz_host. Ce document également aussi comment utilisermod_rewritepour le contrôle d'accès.Contrôle d'accès en fonction de l'hôte du client ¶
- Si vous souhaitez restreindre l'accès à certaines parties de votre - site web en fonction de l'addresse de l'hôte de vos visiteurs, le - plus simple pour y parvenir consiste à utiliser le module + Si vous souhaitez restreindre l'accès à certaines parties de votre site web + en fonction de l'adresse de l'hôte de vos visiteurs, utilisez le module
@@ -77,9 +76,10 @@ client ¶mod_authz_host.Les directives Require s'utilisent comme suit :
-Require host address -Require ip ip.address- +Require host address +Require ip ip.address ++Dans la première forme, nom-hôte est un nom de domaine pleinement qualifié (fqdn), ou un nom de domaine partiel ; vous @@ -90,46 +90,60 @@ Require ip ip.address
+Exemples de formats d’adresse IP
# Adresse IP complète +Require ip 10.2.3.4 +# Adresse IP partielle (correspond à tout hôte dans la tranche 172.20.0.0/16) +Require ip 172.20 +# Paire réseau/masque +Require ip 192.168.1.0/255.255.255.0 +# Spécification réseau/CIDR +Require ip 192.168.1.0/24 +# Adresse IPv6 +Require ip 2001:db8::a00:20ff:fea7:ccea +# Adresse IPv6 avec CIDR +Require ip 2001:db8:1::/48+Voir la documentation de mod_authz_host pour d'autres exemples de cette syntaxe.
Vous pouvez insérer le mot-clé
-notpour inverser un - critère particulier. Notez que le motnotétant la - négation d'une valeur, il ne peut pas être utilisé pour autoriser + critère particulier. Le motnotréalise la + négation sur la valeur, et ne peut pas être utilisé seul pour autoriser ou interdire une requête, car non vrai ne - sera pas interpreté par httpd comme faux. Ainsi, pour interdire la + veut pas ici forcément dire faux. Ainsi, pour interdire la visite d'une page à l'aide d'une négation, le bloc doit contenir un - élément évalué à vrai ou faux. - Par exemple, si quelqu'un est en train d'inonder - votre forum de messages indésirables, vous pouvez ajouter cette ligne pour lui refuser + élément, qui sera évalué à l'une des valeurs vrai ou faux. + Par exemple, si quelqu'un est en train de + spamer votre forum, vous pouvez ajouter cette ligne pour lui refuser l'accès :<RequireAll> - Require all granted - Require not ip 10.252.46.165 +<RequireAll> +Require all granted +Require not ip 10.252.46.165 </RequireAll>- +Les visiteurs possédant cette adresse (
-10.252.46.165) ne pourront pas voir le - contenu concerné par cette directive. Si vous voulez interdire + contenu concerné par cette directive. Si vous voulez interdir l'accès à une machine en fonction de son nom, vous pouvez ajouter ceci :Require not host host.example.com -- +Require not host host.example.com ++Et si vous voulez interdire l'accès à un domaine particulier, vous pouvez spécifier des adresses IP partielles ou des noms de domaine, comme ceci :
-Require not ip 192.168.205 -Require not host phishers.example.com moreidiots.example +- -Require not ip 192.168.205 +Require not host phishers.example.com badguys.example Require not host gov+Les directives
RequireAll,RequireAny, etRequireNonepermettent également de préciser des +Les directives
RequireAll,RequireAny, etRequireNoneouvrent le champ à des critères d'accès plus complexes.<If "%{HTTP_USER_AGENT} == 'BadBot'"> - Require all denied ++<If "%{HTTP_USER_AGENT} == 'BadBot'"> +Require all denied </If>+En utilisant la syntaxe
-exprde la directive +Require, l'exemple + précédent peut aussi s'écrire :La syntaxe
- - -exprde la directiveRequirepermet de réécrire - l'exemple précédent de la manière suivante :Require expr %{HTTP_USER_AGENT} != 'BadBot'+Require expr %{HTTP_USER_AGENT} != 'BadBot'+Avertissement :
Contrôler l'accès en fonction de l'en-tête @@ -177,18 +192,18 @@ d'accès ¶
-Par exemple, pour bloquer l'accès à une ressources entre 20h et 7h du matin, vous pouvez utiliser
-mod_rewrite:RewriteEngine On +RewriteEngine On RewriteCond "%{TIME_HOUR}" ">=20" [OR] RewriteCond "%{TIME_HOUR}" "<07" -RewriteRule "^/fridge" "-" [F]- +RewriteRule "^/fridge" "-" [F] +Toute requête arrivant après 20h ou avant 7h du matin provoquera l'envoi d'une réponse de type 403 Forbidden. Vous pouvez utiliser cette technique pour vérifier toutes sortes de critères. En outre, si vous le préférez, vous pouvez rediriger ou réécrire la requête.
-Notez que la directive
<If>, introduite à partir de la version 2.4, +Notez que la directive
an<If>, ajoutée à partir de la version 2.4, permet de remplacer le modulemod_rewritedans de nombreuses situations où il était traditionnellement utilisé, et il sera probablement préférable pour vous de tenter de l'utiliser diff --git a/docs/manual/howto/auth.html.en b/docs/manual/howto/auth.html.en index 5ec9d76b..6d9f0cdd 100644 --- a/docs/manual/howto/auth.html.en +++ b/docs/manual/howto/auth.html.en @@ -145,8 +145,8 @@ module from each group.AllowOverridedirective like the following:AllowOverride AuthConfig- +AllowOverride AuthConfig+Or, if you are just going to put the directives directly in your main server configuration file, you will of course need to @@ -218,13 +218,13 @@ module from each group.
placed inhttpd.confinside a <Directory "/usr/local/apache/htdocs/secret"> section. -AuthType Basic +AuthType Basic AuthName "Restricted Files" # (Following line optional) AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" Require user rbowen- +Let's examine each of those directives individually. The
+AuthTypedirective selects the method that is used to authenticate the user. The most @@ -310,18 +310,17 @@ person in <Directory> block - to look like the following:Now, you need to modify your
-.htaccessfile to + look like the following:AuthType Basic +specific. Rather than creating a group file, you can just use the following directive: -AuthType Basic AuthName "By Invitation Only" # Optional line: AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" AuthGroupFile "/usr/local/apache/passwd/groups" Require group GroupName- +Now, anyone that is listed in the group
GroupName, and has an entry in thepasswordfile, will be let in, if @@ -331,12 +330,18 @@ Require group GroupNameRequire valid-user- +Require valid-user+Using that rather than the
+ and who correctly enters their password. You can even emulate + the group behavior here, by just keeping a separate password + file for each group. The advantage of this approach is that + Apache only has to check one file, rather than two. The + disadvantage is that you have to maintain a bunch of password + files, and remember to reference the right one in the +Require user rbowenline will allow anyone in that is listed in the password file, - and who correctly enters their password.AuthUserFiledirective.diff --git a/docs/manual/howto/auth.html.fr.utf8 b/docs/manual/howto/auth.html.fr.utf8 index 30001d87..21d77069 100644 --- a/docs/manual/howto/auth.html.fr.utf8 +++ b/docs/manual/howto/auth.html.fr.utf8 @@ -147,11 +147,11 @@ module de chaque groupe. d'une directivePossible problems ¶
@@ -372,14 +377,14 @@ Require group GroupNameTo select a dbm file rather than a text file, for example:
-<Directory "/www/docs/private"> - AuthName "Private" - AuthType Basic - AuthBasicProvider dbm - AuthDBMUserFile "/www/passwords/passwd.dbm" - Require valid-user +scheme that meets your needs. In the following example, both the file and LDAP based authentication providers are being used. -<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider dbm +AuthDBMUserFile "/www/passwords/passwd.dbm" +Require valid-user </Directory>- +Other options are available. Consult the
@@ -394,15 +399,15 @@ Require group GroupNamemod_authn_dbmdocumentation for more details.<Directory "/www/docs/private"> - AuthName "Private" - AuthType Basic - AuthBasicProvider file ldap - AuthUserFile "/usr/local/apache/passwd/passwords" - AuthLDAPURL ldap://ldaphost/o=yourorg - Require valid-user +authorization methods can also be used. In this example both file group authorization as well as LDAP group authorization is being used. -<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider file ldap +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthLDAPURL ldap://ldaphost/o=yourorg +Require valid-user </Directory>- +In this example the file provider will attempt to authenticate the user first. If it is unable to authenticate the user, the LDAP @@ -417,17 +422,17 @@ Require group GroupName
<Directory "/www/docs/private"> - AuthName "Private" - AuthType Basic - AuthBasicProvider file - AuthUserFile "/usr/local/apache/passwd/passwords" - AuthLDAPURL ldap://ldaphost/o=yourorg - AuthGroupFile "/usr/local/apache/passwd/groups" - Require group GroupName - Require ldap-group cn=mygroup,o=yourorg +<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthLDAPURL ldap://ldaphost/o=yourorg +AuthGroupFile "/usr/local/apache/passwd/groups" +Require group GroupName +Require ldap-group cn=mygroup,o=yourorg </Directory>- +To take authorization a little further, authorization container directives such as @@ -490,73 +495,15 @@ Require group GroupName
Using authorization providers for access control
Authentication by username and password is only part of the - story. Frequently you want to let people in based on something - other than who they are. Something such as where they are - coming from.
- -The authorization providers
- -all, -env,hostandiplet you - allow or deny access based on other host based criteria such as - host name or ip address of the machine requesting a - document.The usage of these providers is specified through the -
- -Requiredirective. - This directive registers the authorization providers - that will be called during the authorization stage of the request - processing. For example:Require ip address -- - -where address is an IP address (or a partial IP - address) or:
- -Require host domain_name -- - -where domain_name is a fully qualified domain name - (or a partial domain name); you may provide multiple addresses or - domain names, if desired.
- -For example, if you have someone spamming your message - board, and you want to keep them out, you could do the - following:
- -<RequireAll> - Require all granted - Require not ip 10.252.46.165 -</RequireAll>- - -Visitors coming from that address will not be able to see - the content covered by this directive. If, instead, you have a - machine name, rather than an IP address, you can use that.
- -<RequireAll> - Require all granted - Require not host host.example.com -</RequireAll>- - -And, if you'd like to block access from an entire domain, - you can specify just part of an address or domain name:
- -<RequireAll> - Require all granted - Require not ip 192.168.205 - Require not host phishers.example.com moreidiots.example - Require not host ke -</RequireAll>- - -Using
+ story. You can also allow or deny access based on other + criteria, such as the client's IP address or hostname, using + the authorization providers<RequireAll>- with multiple<Require>directives, each negated withnot, - will only allow access, if all of negated conditions are true. In other words, - access will be blocked, if any of the negated conditions fails.all,env, +host, andipwith the +Require+ directive. +For full details and examples, see the + Access Control howto.
Access Control backwards compatibility
@@ -587,9 +534,8 @@ Require group GroupNameAuthentication Caching ¶
There may be times when authentication puts an unacceptable load on a provider or on your network. This is most likely to affect users - of
mod_authn_dbd(or third-party/custom providers). - To deal with this, HTTPD 2.3/2.4 introduces a new caching provider -mod_authn_socacheto cache credentials and reduce + ofmod_authn_dbd(or third-party/custom providers). The +mod_authn_socachemodule caches credentials and reduces the load on the origin provider(s).This may offer a substantial performance boost to some users.
AllowOverridedu style : -AllowOverride AuthConfig- +AllowOverride AuthConfig+Si vous avez l'intention d'ajouter les directives directement - dans le fichier de configuration principal, vous devrez bien entendu + dans le fichier de configuration principal, vous devrez bien entendu posséder les droits en écriture sur ce fichier.
Vous devrez aussi connaître un tant soit peu la structure des @@ -224,13 +224,13 @@ module de chaque groupe.
fichierhttpd.confà l'intérieur d'une section <Directory "/usr/local/apache/htdocs/secret"> : -AuthType Basic +être utilisée pour la transmission de données hautement sensibles si elle n'est pas associée au moduleAuthType Basic AuthName "Restricted Files" -# (Following line optional) +# (La ligne suivante est facultative) AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" Require user rbowen- +Examinons ces directives une à une. La directive
AuthTypedéfinit la méthode utilisée pour authentifier l'utilisateur. La méthode la plus @@ -241,7 +241,8 @@ Require user rbowenmod_ssl. Apache supporte une autre méthode d'authentification :AuthType - Digest. Cette méthode est implémentée par le modulemod_auth_digestet a été conçue pour + Digest. Cette méthode est implémentée + par le modulemod_auth_digestet a été conçue pour améliorer la sécurité. Ce but n'a cependant pas été atteint et il est préférable de chiffrer la connexion avecmod_ssl. @@ -323,16 +324,16 @@ plusieurs personnesMaintenant, vous devez modifier votre fichier -
+.htaccessou la section<Directory>comme suit :.htaccesscomme suit : -AuthType Basic +l'accès à plusieurs personnes. Plutôt que de créer un fichier de groupes, il vous suffit d'ajouter la directive suivante : -AuthType Basic AuthName "By Invitation Only" -# Optional line: +# Ligne facultative : AuthBasicProvider file AuthUserFile "/usr/local/apache/passwd/passwords" AuthGroupFile "/usr/local/apache/passwd/groups" Require group GroupName- +Maintenant, quiconque appartient au groupe
Nom-de-groupe, et possède une entrée dans le fichier @@ -343,13 +344,19 @@ Require group GroupNameRequire valid-user- +Require valid-user+Le remplacement de la ligne
+ tapé le bon mot de passe. Vous pouvez même simuler le comportement + des groupes en associant un fichier de mots de passe différent pour + chaque groupe. L'avantage de cette approche réside dans le fait + qu'Apache ne doit consulter qu'un fichier au lieu de deux. Par + contre, vous devez maintenir un nombre plus ou moins important de + fichiers de mots de passe, et vous assurer de faire référence au bon + fichier dans la directiveRequire user rbowenpar la ligneRequire valid-userautorisera l'accès à quiconque possédant une entrée dans le fichier password, et ayant - tapé le bon mot de passe.AuthUserFile.+Problèmes possibles ¶
@@ -390,16 +397,14 @@ passe ¶Par exemple, pour sélectionner un fichier dbm à la place d'un fichier texte :
-<Directory "/www/docs/private"> - - AuthName "Private" - AuthType Basic - AuthBasicProvider dbm - AuthDBMUserFile "/www/passwords/passwd.dbm" - Require valid-user - +<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider dbm +AuthDBMUserFile "/www/passwords/passwd.dbm" +Require valid-user </Directory>- +D'autres options sont disponibles. Consultez la documentation de
@@ -417,17 +422,15 @@ d'authentification <Directory "/www/docs/private"> - - AuthName "Private" - AuthType Basic - AuthBasicProvider file ldap - AuthUserFile "/usr/local/apache/passwd/passwords" - AuthLDAPURL ldap://ldaphost/o=yourorg - Require valid-user - +mod_authn_dbmpour plus de détails.<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider file ldap +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthLDAPURL ldap://ldaphost/o=yourorg +Require valid-user </Directory>- +Dans cet exemple, le fournisseur file va tenter d'authentifier l'utilisateur en premier. S'il n'y parvient pas, le fournisseur LDAP @@ -445,19 +448,17 @@ d'authentification <Directory "/www/docs/private"> - - AuthName "Private" - AuthType Basic - AuthBasicProvider file - AuthUserFile "/usr/local/apache/passwd/passwords" - AuthLDAPURL ldap://ldaphost/o=yourorg - AuthGroupFile "/usr/local/apache/passwd/groups" - Require group GroupName - Require ldap-group cn=mygroup,o=yourorg - +
<Directory "/www/docs/private"> +AuthName "Private" +AuthType Basic +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthLDAPURL ldap://ldaphost/o=yourorg +AuthGroupFile "/usr/local/apache/passwd/groups" +Require group GroupName +Require ldap-group cn=mygroup,o=yourorg </Directory>- +Pour un scénario d'autorisation un peu plus avancé, des directives de conteneur d'autorisation comme
-<RequireAll>et @@ -523,75 +524,14 @@ autorisation ¶Utilisation de fournisseurs d'autorisation pour le contrôle d'accès
-La vérification du nom d'utilisateur et du mot de passe ne - constituent qu'un aspect des méthodes d'authentification. - Souvent, le contrôle d'accès à certaines personnes n'est pas - basé sur leur identité ; il peut dépendre, par exemple de leur - provenance.
- -Les fournisseurs d'autorisation
- -all, -env,hostetipvous - permettent d'accorder ou refuser l'accès en - fonction de critères tels que le nom d'hôte ou l'adresse - IP de la machine qui effectue la requête.L'utilisation de ces fournisseurs est spécifiée à l'aide de - la directive
- -Require. Cette directive - permet d'enregistrer quels fournisseurs d'autorisation - seront appelés dans le processus d'autorisation au cours du - traitement de la requête. Par exemple :Require ip address- - -où adresse est une adresse IP (ou une adresse IP - partielle) ou :
- -Require host domain_name- - -où nom_domaine est un nom de domaine entièrement - qualifé (ou un nom de domaine partiel) ; vous pouvez indiquer - plusieurs adresses ou noms de domaines, si vous le désirez.
- -Par exemple, si vous voulez rejeter les spams dont une - machine vous inonde, vous pouvez utiliser ceci :
- -<RequireAll> - Require all granted - Require not ip 10.252.46.165 -</RequireAll>- - -Ainsi, les visiteurs en provenance de cette adresse ne - pourront pas voir le contenu concerné par cette directive. Si, - par contre, vous connaissez le nom de la machine, vous pouvez - utiliser ceci :
- -<RequireAll> - Require all granted - Require not host host.example.com -</RequireAll>- - -Et si vous voulez interdire l'accès à toutes les machines - d'un domaine, vous pouvez spécifier une partie seulement de - l'adresse ou du nom de domaine :
- -<RequireAll> - Require all granted - Require not ip 192.168.205 - Require not host phishers.example.com moreidiots.example - Require not host ke -</RequireAll>- - -L'utilisation de la directive
+<RequireAll>- avec de multiples directives<Require>, toutes avec la négation -not, n'accordera l'accès que si toutes les - conditions négatives sont vérifiées. En d'autres termes, l'accès - sera refusé si au moins une des conditions négatives n'est pas - vérifiée.La vérification du nom d'utilisateur et du mot de passe ne + constituent qu'un aspect des méthodes d'authentification. Vous pouvez + aussi autoriser ou interdire l’accès en fonction d’autres critères tels + que l’adresse IP du client ou le nom d’hôte en utilisant les + fournisseurs d’autorisation
+ +all,env, +hostetipavec la directiveRequire.Pour des détails complets et des exemples, voir le tutoriel Access Control.
@@ -615,23 +555,20 @@ autorisation ¶ directives afin de faciliter le passage à la version 2.4. Voir le document upgrading pour plus de détails.Mise en cache de l'authentification ¶
-Dans certains cas, l'authentification constitue une charge - inacceptable pour un fournisseur d'authentification ou votre réseau. - Ceci est susceptible d'affecter les utilisateurs du module -
-mod_authn_dbd(ou les fournisseurs - tiers/personnalisés). Pour résoudre ce problème, HTTPD 2.3/2.4 - propose un nouveau fournisseur de mise en cache, -mod_authn_socache, qui permet de mettre en cache - les données d'authentification, et ainsi réduire la charge du/des - fournisseurs(s) originels.Cette mise en cache apportera un gain en performance substantiel - à certains utilisateurs.
+Dans certains cas, l'authentification constitue une charge inacceptable + pour un fournisseur d'authentification ou votre réseau. Ceci est + susceptible d'affecter les utilisateurs du module +
mod_authn_dbd(ou les fournisseurs tiers/personnalisés). Le + modulemod_authn_socachemet en cache les données + d'authentification, et réduit ainsi la charge du/des fournisseurs(s) + originels.Cette mise en cache apportera un gain en performance + substantiel à certains utilisateurs.
Pour aller plus loin . . . ¶
diff --git a/docs/manual/howto/cgi.html.en b/docs/manual/howto/cgi.html.en index 990b5fcb..f79a9ce4 100644 --- a/docs/manual/howto/cgi.html.en +++ b/docs/manual/howto/cgi.html.en @@ -58,25 +58,35 @@Configuring httpd to permit CGI ¶
-In order to get your CGI programs to work properly, you'll - need to have httpd configured to permit CGI execution. There - are several ways to do this.
- -Note: If httpd has been built with shared module - support you need to ensure that the module is loaded; in your +Your httpd configuration must permit CGI execution before + CGI programs will work. Several ways to do this are described + below.
+ +CGI support is provided by two modules: +
+ +mod_cgidandmod_cgi. +mod_cgiduses a dedicated external daemon to manage + CGI processes and is required when httpd runs a threaded MPM (such as +eventorworker). +mod_cgiruns CGI programs directly from within the + server process and is used with non-threaded MPMs like +prefork, or on Windows. From a configuration + standpoint they are interchangeable — the directives are the same. + See themod_cgiandmod_cgid+ reference pages for implementation details.If httpd has been built with shared module + support, you need to ensure that the appropriate module is loaded. In your@@ -95,8 +105,8 @@httpd.confyou need to make sure theLoadModule- directive has not been commented out. A correctly configured directive - may look like this: - -LoadModule cgid_module modules/mod_cgid.so- + directive has not been commented out. For a threaded MPM: +- On Windows, or using a non-threaded MPM like prefork, A correctly - configured directive may look like this: + For Windows, or a non-threaded MPM like prefork: -LoadModule cgid_module modules/mod_cgid.so+LoadModule cgi_module modules/mod_cgi.so+LoadModule cgi_module modules/mod_cgi.so+The
-ScriptAliasdirective looks like:ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"- +ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"+The example shown is from your default
httpd.confconfiguration file, if you installed httpd in the default @@ -114,12 +124,12 @@ treated as a CGI program.For example, if the URL -
+http://www.example.com/cgi-bin/test.pl+http://www.example.com/cgi-bin/test.pyis requested, httpd will attempt to execute the file -/usr/local/apache2/cgi-bin/test.pl- and return the output. Of course, the file will have to - exist, and be executable, and return output in a particular - way, or httpd will return an error message./usr/local/apache2/cgi-bin/test.py+ and return the output. The file must exist, be executable, + and produce output in the expected format; otherwise httpd + returns an error.CGI outside of ScriptAlias directories
@@ -136,8 +146,8 @@ the maincgi-bindirectory, they will need to be able to run CGI programs elsewhere. -There are two steps to allowing CGI execution in an arbitrary - directory. First, the
cgi-scripthandler must be +Allowing CGI execution in an arbitrary directory requires + two steps. First, the
@@ -149,19 +159,19 @@ file, to specify that CGI execution was permitted in a particular directory: -cgi-scripthandler must be activated using theAddHandlerorSetHandlerdirective. Second,ExecCGImust be specified in theOptionsdirective.<Directory "/usr/local/apache2/htdocs/somedir"> - Options +ExecCGI +<Directory "/usr/local/apache2/htdocs/somedir"> +Options +ExecCGI </Directory>- +The above directive tells httpd to permit the execution of CGI files. You will also need to tell the server what files are CGI files. The following
-AddHandlerdirective tells the server to treat all - files with thecgiorplextension as CGI + files with thecgiorpyextension as CGI programs:AddHandler cgi-script .cgi .pl- +AddHandler cgi-script .cgi .py+.htaccess files
@@ -179,21 +189,21 @@.cgiin users' directories, you can use the following configuration. -<Directory "/home/*/public_html"> - Options +ExecCGI - AddHandler cgi-script .cgi +- -<Directory "/home/*/public_html"> +Options +ExecCGI +AddHandler cgi-script .cgi </Directory>+If you wish designate a
cgi-binsubdirectory of +To designate a
-cgi-binsubdirectory of a user's directory where everything will be treated as a CGI program, you can use the following.<Directory "/home/*/public_html/cgi-bin"> - Options ExecCGI - SetHandler cgi-script +@@ -202,8 +212,8 @@<Directory "/home/*/public_html/cgi-bin"> +Options ExecCGI +SetHandler cgi-script </Directory>- +Writing a CGI program ¶
-There are two main differences between ``regular'' - programming, and CGI programming.
+CGI programming differs from regular programming in two + ways.
First, all output from your CGI program must be preceded by a MIME-type header. This is HTTP header that tells the client @@ -217,7 +227,7 @@
Secondly, your output needs to be in HTML, or some other format that a browser will be able to display. Most of the time, this will be HTML, but occasionally you might write a CGI - program that outputs a gif image, or other non-HTML + program that outputs a GIF image, or other non-HTML content.
Apart from those two things, writing a CGI program will look @@ -228,45 +238,41 @@
The following is an example CGI program that prints one line to your browser. Type in the following, save it to a - file called
-first.pl, and put it in your + file calledfirst.py, and put it in yourcgi-bindirectory.#!/usr/bin/perl -print "Content-type: text/html\n\n"; -print "Hello, World.";- +-#!/usr/bin/env python3 +print("Content-type: text/html\n") +print("Hello, World.")+Even if you are not familiar with Perl, you should be able - to see what is happening here. The first line tells httpd - (or whatever shell you happen to be running under) that this - program can be executed by feeding the file to the - interpreter found at the location
+/usr/bin/perl. - The second line prints the content-type declaration we - talked about, followed by two carriage-return newline pairs. - This puts a blank line after the header, to indicate the end - of the HTTP headers, and the beginning of the body. The third - line prints the string "Hello, World.". And that's the end - of it.The first line tells the operating system which interpreter + to use. The first
\nin the string plus the newline that +print()adds), which marks the end of HTTP + headers. The secondIf you open your favorite browser and tell it to get the address
- http://www.example.com/cgi-bin/first.pl + http://www.example.com/cgi-bin/first.pyor wherever you put your file, you will see the one line
+ have a good chance of getting about anything working.Hello, World.appear in your browser window. It's not very exciting, but once you get that working, you'll - have a good chance of getting just about anything working.But it's still not working! ¶
-There are four basic things that you may see in your browser - when you try to access your CGI program from the web:
+Four basic things may appear in your browser when you try to + access your CGI program from the web:
- The output of your CGI program
@@ -308,9 +314,8 @@ print "Hello, World."; a file sufficient permissions to be executed bynobodyis to give everyone execute permission on the file: -+
- chmod a+x first.pl -chmod a+x first.py+Also, if your program reads from, or writes to, any other files, those files will need to have the correct permissions @@ -335,11 +340,11 @@ print "Hello, World."; program.
A common manifestation of this is the path to the script - interpreter (often
-perl) indicated in the first + interpreter (oftenpython3) indicated in the first line of your CGI program, which will look something like:#!/usr/bin/perl- +#!/usr/bin/env python3+Make sure that this is in fact the path to the interpreter.
@@ -380,10 +385,10 @@ print "Hello, World.";-
cd /usr/local/apache2/cgi-bin
- ./first.pl + ./first.py(Do not call the
perlinterpreter. The shell +(Do not call the
@@ -423,7 +428,7 @@ print "Hello, World."; suexec will be activated.python3interpreter directly. The shell and httpd should find the interpreter using the path information on the first line of the script.)Unless you fully understand suexec, you should not be using it. - To disable suexec, simply remove (or rename) the
suexec+ To disable suexec, remove (or rename) thesuexecbinary pointed to bySUEXEC_BINand then restart the server. If, after reading about suexec, you still wish to use it, then runsuexec -Vto find @@ -456,7 +461,7 @@ print "Hello, World.";During the CGI transaction, the server and the browser also set environment variables, so that they can communicate with one another. These are things like the browser type - (Chrome, Firefox, Lynx), the server type (Apache httpd, Nginx, IIS), + (Chrome, Firefox, Lynx), the server type (httpd, Nginx, IIS), the name of the CGI program that is being run, and so on.
These variables are available to the CGI programmer, and @@ -464,7 +469,7 @@ print "Hello, World."; complete list of required variables is at Common Gateway Interface RFC (RFC 3875).
-This simple Perl CGI program will display all of the +
This simple Python CGI program will display all of the environment variables that are being passed around. Two similar programs are included in the
-cgi-bin@@ -476,15 +481,13 @@ print "Hello, World."; add your own environment variables to the basic ones provided by default.#!/usr/bin/perl -use strict; -use warnings; - -print "Content-type: text/html\n\n"; -foreach my $key (keys %ENV) { - print "$key --> $ENV{$key}<br>"; -}+#!/usr/bin/env python3 +import os +print("Content-type: text/html\n") +for key, value in os.environ.items(): +print(f"{key} --> {value}<br>")+STDIN and STDOUT
@@ -524,9 +527,9 @@ foreach my $key (keys %ENV) {METHODattribute in theFORMtag.Your program is then responsible for splitting that string - up into useful information. Fortunately, there are libraries - and modules available to help you process this data, as well - as handle other of the aspects of your CGI program.
+ up into useful information. Fortunately, libraries + and modules are available to help you process this data, as well + as handle other aspects of your CGI program.@@ -537,15 +540,14 @@ foreach my $key (keys %ENV) { code library, or module, to do most of the grunt work for you. This leads to fewer errors, and faster development. -If you're writing CGI programs in Perl, modules are - available on CPAN. The most - popular module for this purpose is
+CGI.pm. You might - also considerCGI::Lite, which implements a minimal - set of functionality, which is all you need in most programs.If you're writing CGI programs in Python, the standard + library's
-cgimodule (deprecated in Python 3.11, + removed in 3.13) handled form parsing. For current Python + versions, use theurllib.parsemodule to parse + query strings and form data. For more complex applications, + consider a lightweight WSGI framework, though that moves + beyond the scope of traditional CGI.If you're writing CGI programs in C, there are a variety of - options. One of these is the
CGIClibrary, from - https://web.mit.edu/wwwdev/www/cgic.html.For more information ¶
@@ -562,9 +564,9 @@ foreach my $key (keys %ENV) { program was in, and, if possible, the offending code. This will make finding your problem much simpler. -Note that questions about CGI problems should never +
Questions about CGI problems should never be posted to the httpd bug database unless you are sure you - have found a problem in the httpd source code. + have found a problem in the httpd source code.Available Languages: en | diff --git a/docs/manual/howto/cgi.html.fr.utf8 b/docs/manual/howto/cgi.html.fr.utf8 index 0346968c..55c34f9c 100644 --- a/docs/manual/howto/cgi.html.fr.utf8 +++ b/docs/manual/howto/cgi.html.fr.utf8 @@ -58,24 +58,34 @@
Configurer httpd pour autoriser CGI ¶
-httpd doit être configuré pour permettre l'exécution des - programmes CGI, pour que vos programmes CGI puissent fonctionner - correctement. Il existe plusieurs méthodes pour y parvenir.
- -Note: si httpd a été compilé avec le support - des modules partagés (DSO), vous devez vous assurer que le module CGI est - chargé ; vous devez pour cela vérifier que la directiveLoadModulecorrespondante n'a pas été - commentée dans votrehttpd.conf. Une directive correcte - doit ressembler à ceci : - -LoadModule cgid_module modules/mod_cgid.so- - +La configuration de httpd doit autoriser l’exécution de CGI pour que les + programmes CGI fonctionnent. Il existe plusieurs manières d’y parvenir, qui + sont décrites ci-après.
+ +La prise en charge de CGI est assurée par deux modules : +
+ +mod_cgidetmod_cgi. +mod_cgidutilise un démon externe dédié pour gérer les + processus CGI et est requis lorsque httpd utilise un MPM threadé (tel que +eventouworker).mod_cgi+ exécute les programmes CGI directement depuis le processus du serveur et est + utilisé avec les MPMs non threadés tels queprefork, ou + sous Windows. Du point de vue de la configuration, ils sont interchangeables + — les directives sont les mêmes. Voir les pages de référence de +mod_cgietmod_cgidpour les détails de + l’implémentation.Si httpd a été compilé avec le support des modules + partagés (DSO), vous devez vous assurer que le module approprié est chargé ; + vous devez pour cela vérifier que la directive@@ -91,8 +101,8 @@LoadModulecorrespondante n'a pas été commentée + dans votrehttpd.conf. Pour un MPM threadé : + +- Sous Windows, ou si l'on utilise un module MPM non-threadé comme prefork, - une directive correctement configurée sera du style : + Pour Windows, ou un MPM non threadé comme prefork : -LoadModule cgid_module modules/mod_cgid.so+LoadModule cgi_module modules/mod_cgi.so+LoadModule cgi_module modules/mod_cgi.so+La directive
-ScriptAliasse présente comme suit :ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"- +ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"+Cet exemple est tiré de votre fichier de configuration
httpd.confpar défaut, si vous avez installé httpd @@ -113,12 +123,11 @@ tant que programme CGI.Par exemple, si une requête pour l'URL -
+http://www.example.com/cgi-bin/test.plest - effectuée, httpd tentera d'exécuter le fichier -/usr/local/apache2/cgi-bin/test.plet en renverra la - sortie. Bien entendu, le fichier doit exister, être exécutable, et - retourner sa sortie d'une manière particulière, sinon httpd - renverra un message d'erreur.http://www.example.com/cgi-bin/test.pyest effectuée, httpd + tentera d'exécuter le fichier +/usr/local/apache2/cgi-bin/test.pyet en renverra la sortie. + Le fichier doit exister, être exécutable, et produire une sortie sous le + format attendu, sinon httpd renverra un message d'erreur.CGI en dehors des répertoires ScripAlias
@@ -156,20 +165,20 @@ l'exécution des programmes CGI est permise depuis un répertoire particulier : -<Directory "/usr/local/apache2/htdocs/somedir"> - Options +ExecCGI +<Directory "/usr/local/apache2/htdocs/somedir"> +Options +ExecCGI </Directory>- +La directive ci-dessus indique à httpd qu'il doit permettre l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur quels fichiers sont des fichiers CGI. La directive
-AddHandlersuivante indique au serveur qu'il doit traiter tous les fichiers possédant une - extensioncgiouplen tant que + extensioncgioupyen tant que programmes CGI :AddHandler cgi-script .cgi .pl- +AddHandler cgi-script .cgi .py+Fichiers .htaccess
@@ -189,21 +198,21 @@ répertoire utilisateur, vous pouvez utiliser la configuration suivante : -<Directory "/home/*/public_html"> - Options +ExecCGI - AddHandler cgi-script .cgi +<Directory "/home/*/public_html"> +Options +ExecCGI +AddHandler cgi-script .cgi </Directory>- +Pour indiquer un sous-répertoire
-cgi-bind'un répertoire utilisateur où tout fichier sera traité en tant que programme CGI, vous pouvez utiliser ceci :<Directory "/home/*/public_html/cgi-bin"> - Options ExecCGI - SetHandler cgi-script +@@ -212,8 +221,8 @@<Directory "/home/*/public_html/cgi-bin"> +Options ExecCGI +SetHandler cgi-script </Directory>- +Ecrire un programme CGI ¶
-Il y a deux différences principales entre la programmation - "standard" et la programmation CGI.
+La programmation CGI diffère de la programmation + "standard" sur deux points.
En premier lieu, toute sortie de votre programme CGI doit être précédée d'un en-tête MIME-type. Il s'agit d'un @@ -227,7 +236,7 @@
En second lieu, votre sortie doit être en HTML, ou tout autre format qu'un navigateur est en mesure d'afficher. La plupart du temps, il s'agira de HTML, mais occasionnellement, vous pouvez être - amené à écrire un programme CGI qui renvoie une image gif, ou un + amené à écrire un programme CGI qui renvoie une image GIF, ou un autre type de contenu non-HTML.
A part ces deux différences, un programme CGI ressemblera à tout @@ -239,32 +248,26 @@
L'exemple suivant est un exemple de programme CGI qui permet d'afficher une ligne de caractères dans votre navigateur. Ecrivez ce qui suit, enregistrez le dans un fichier nommé -
-premier.pl, et placez le dans votre répertoire +premier.py, et placez le dans votre répertoirecgi-bin.#!/usr/bin/perl -print "Content-type: text/html\n\n"; -print "Hello, World.";- +-#!/usr/bin/env python3 +print("Content-type: text/html\n") +print("Hello, World.")+Même si Perl ne vous est pas familier, vous devriez être - capable de comprendre le fonctionnement de ce programme. La - première ligne indique à httpd (ou à toute interface à partir de - laquelle le programme s'exécute) que ce programme peut être - exécuté en fournissant son fichier à l'interpréteur -
+/usr/bin/perl. La seconde ligne affiche la - déclaration du type de contenu considéré, suivie de deux paires - "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une - ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP, - et le début du corps du document. La troisième ligne affiche la - chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout - ce dont vous avez besoin.La première ligne indique au système d’exploitation quel interpréteur + utiliser. La première invocation de print affiche l’en-tête content-type + suivi d’une ligne vide (le
\ndans la chaîne et la nouvelle + ligne qu’ajouteprint()), qui matérialise la fin des en-têtes + HTTP. La seconde invocation de print affiche le corps. C’est là tout ce + dont un programme CGI a besoin pour produire une réponse.Si vous ouvrez votre navigateur favori et lui indiquez l'adresse
- http://www.example.com/cgi-bin/premier.pl + http://www.example.com/cgi-bin/premier.pyou toute autre URL correspondant à votre programme CGI, Vous @@ -279,9 +282,8 @@ print "Hello, World.";
Mais ça ne marche toujours pas ! ¶
-Vous devriez voir au moins une des quatre sorties suivantes dans - votre navigateur lorsque vous essayez d'accéder à votre programme - CGI depuis le web :
+Quatre sorties basiques pourront apparaître dans votre navigateur lorsque + vous essayez d'accéder à votre programme CGI depuis le web :
- Le flux de sortie de votre programme CGI
@@ -326,9 +328,8 @@ print "Hello, World.";nobody, il suffit de lui attribuer des droits d'exécution pour tout le monde : -+
- chmod a+x premier.pl -chmod a+x first.py+En outre, si votre programme doit pouvoir accéder en lecture et/ou écriture à d'autres fichiers, ces derniers devront avoir les @@ -355,12 +356,12 @@ print "Hello, World."; CGI.
Un exemple typique de spécification de programme est le chemin - vers l'interpréteur de script (souvent
-perl) que l'on + vers l'interpréteur de script (souventpython3) que l'on trouve à la première ligne de votre programme CGI et qui va ressembler à ceci :#!/usr/bin/perl- +#!/usr/bin/env python3+Assurez-vous qu'il s'agit bien du chemin correct vers l'interpréteur.
@@ -405,10 +406,10 @@ print "Hello, World.";-
cd /usr/local/apache2/cgi-bin
- ./premier.pl + ./premier.py(N'invoquez pas l'interpréteur
perl. Le shell et +(N'invoquez pas l'interpréteur
@@ -454,7 +455,7 @@ print "Hello, World.";python3. Le shell et httpd doivent être capable de le déterminer à partir de l'information sur le chemin située sur la première ligne du script.)Si vous ne maîtrisez pas le fonctionnement de suexec, il vous est déconseillé de l'utiliser. Pour désactiver suexec, supprimer - simplement (ou renommez) l'exécutable
-suexec+ (ou renommez) l'exécutablesuexecpointé parSUEXEC_BINet redémarrez le serveur. Si après une lecture de suexec, vous décidez quand-même de l'utiliser, tapez la commandesuexec @@ -499,7 +500,7 @@ print "Hello, World."; variables requises se trouve dans la RFC 3875 (Common Gateway Interface).Ce programme CGI basique en Perl permet d'afficher toutes les +
Ce programme CGI basique en Python permet d'afficher toutes les variables d'environnement qui sont échangées. Deux programmes similaires sont fournis avec la distribution de httpd et situés dans le répertoire
-cgi-bin. @@ -511,15 +512,13 @@ print "Hello, World."; variables d'environnement aux variables de base fournies par défaut.#!/usr/bin/perl -use strict; -use warnings; - -print "Content-type: text/html\n\n"; -foreach my $key (keys %ENV) { - print "$key --> $ENV{$key}<br>"; -}+#!/usr/bin/env python3 +import os +print("Content-type: text/html\n") +for key, value in os.environ.items(): +print(f"{key} --> {value}<br>")+STDIN et STDOUT
@@ -577,15 +576,13 @@ foreach my $key (keys %ENV) { partie du travail de base pour vous. Ceci vous permettra de diminuer le nombre d'erreurs et d'accélérer le développement. -Si vous écrivez des programmes CGI en Perl, des modules sont à - votre disposition à CPAN. A ce - sujet, le module le plus populaire est
- -CGI.pm. Vous - pouvez aussi essayerCGI::Lite, qui implémente les - fonctionnalités strictement nécessaires, mais suffisantes pour - la majorité des programmes.Si vous écrivez des programmes CGI en C, vous disposez de nombreuses - options. L'une d'elles est la bibliothèque
+CGICde https://web.mit.edu/wwwdev/www/cgic.html.Si vous écrivez des programmes CGI en Python, le module
cgi+ de la bibliothèque standard (obsolète dans Python 3.11, supprimé dans Python + 3.13) prenait en charge l’analyse de formulaire. Avec les versions actuelles + de Python, utilisez le moduleurllib.parsepour analyser les + chaîne de paramètres et les données de formulaire. Pour des applications + plus complexes, orientez-vous vers un cadriciel WSGI léger, bien que cela + aille au-delà du domaine de la CGI traditionnelle.Pour plus d'informations ¶
@@ -603,10 +600,10 @@ foreach my $key (keys %ENV) { programme CGI a été écrit, et, si possible, son code source. Ceci permettra une résolution plus aisée de votre problème. -Notez que les questions à propos de problèmes CGI ne doivent +
Les questions à propos de problèmes CGI ne doivent jamais être postées dans la base de données de bogues de httpd, à moins que vous ne soyez sûr d'avoir trouvé un - problème dans le code source de httpd. + problème dans le code source de httpd.Langues Disponibles: en | diff --git a/docs/manual/howto/htaccess.html.en b/docs/manual/howto/htaccess.html.en index c7595fe3..4cf92280 100644 --- a/docs/manual/howto/htaccess.html.en +++ b/docs/manual/howto/htaccess.html.en @@ -67,8 +67,8 @@ configuration files directly.
if you would rather call the file.configthen you can put the following in your server configuration file: -AccessFileName ".config"- +AccessFileName ".config"+Directives in
.htaccessfiles use the same syntax as @@ -81,7 +81,7 @@ configuration files directly..htaccessfile, whileAllowOverrideListnames individual directives to permit (see below). If a directive is permitted, the documentation for that directive will contain an Override section, - specifying what value must be inAllowOverridein order for that + specifying what value must be inAllowOverridefor that directive to be permitted.The default value ofAllowOverrideisNone. @@ -92,7 +92,7 @@ configuration files directly. directive, you will find that it is permitted in.htaccessfiles. (See the Context line in the directive summary.) The Override line readsFileInfo. Thus, you must have at least -AllowOverride FileInfoin order for this directive to be +AllowOverride FileInfofor this directive to be honored in.htaccessfiles.@@ -129,34 +129,34 @@ configuration files directly..htaccessfile is loaded every time a document is requested. -Further note that httpd must look for
-.htaccessfiles - in all higher-level directories, in order to have a full complement of - directives that it must apply. (See section on how +Additionally, httpd must look for
-.htaccessfiles + in all higher-level directories to assemble the full set of applicable + directives. (See section on how directives are applied.) Thus, if a file is requested out of a directory/www/htdocs/example, httpd must look for the following files:/.htaccess +/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess- +And so, for each file access out of that directory, there are 4 additional file-system accesses, even if none of those files are - present. (Note that this would only be the case if + present. (This would only be the case if
.htaccessfiles were enabled for/, which is not usually the case.)Security: You are permitting users to modify server configuration, which may result in changes over which you have no control. Carefully consider whether you want to give - your users this privilege. Note also that giving users less + your users this privilege. Giving users less privileges than they need will lead to additional technical support requests. Make sure you clearly tell your users what level of privileges you have given them. Specifying exactly what you have set
AllowOverrideto, and pointing them - to the relevant documentation, will save yourself a lot of confusion + to the relevant documentation, prevents confusion later.If you need to grant
lets you name individual directives that are permitted, providing finer-grained control than.htaccessaccess but want to @@ -165,48 +165,46 @@ configuration files directly.AllowOverridealone:# Allow only specific directives, not entire categories +# Allow only specific directives, not entire categories AllowOverride None AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCond- +With this configuration, any directive not explicitly listed will cause a server error if encountered in a
-.htaccessfile. This is a useful middle ground between full override access and no override access.Note that it is completely equivalent to put a
.htaccess- file in a directory/www/htdocs/examplecontaining a - directive, and to put that same directive in a Directory section -<Directory "/www/htdocs/example">in your main server +Placing a directive in a
.htaccess+ file in a directory/www/htdocs/exampleis completely equivalent to placing that same directive in a +<Directory "/www/htdocs/example">section in your main server configuration:
.htaccessfile in/www/htdocs/example:+Contents of .htaccess file in -
/www/htdocs/exampleAddType text/example ".exm"-/www/htdocs/exampleAddType text/example ".exm"+Section from your
httpd.conf- file<Directory "/www/htdocs/example"> - AddType text/example ".exm" + file+<Directory "/www/htdocs/example"> +AddType text/example ".exm" </Directory>-The use of
-.htaccessfiles can be disabled completely by setting theAllowOverridedirective tonone:AllowOverride None- +AllowOverride None+How directives are applied ¶
The configuration directives found in a
.htaccessfile are applied to the directory in which the.htaccessfile - is found, and to all subdirectories thereof. However, it is important - to also remember that there may have been.htaccessfiles + is found, and to all subdirectories thereof. Remember that there may have been.htaccessfiles in directories higher up. Directives are applied in the order that they are found. Therefore, a.htaccessfile in a particular directory may override directives found in.htaccessfiles @@ -219,18 +217,18 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCondIn the directory
-/www/htdocs/example1we have a.htaccessfile containing the following:Options +ExecCGI- +-Options +ExecCGI+(Note: you must have "
AllowOverride Options" in effect +You must have "AllowOverride Options" in effect to permit the use of the "Options" directive in -.htaccessfiles.) +.htaccessfiles.In the directory
-/www/htdocs/example1/example2we have a.htaccessfile containing:Options Includes- +Options Includes+Because of this second
-.htaccessfile, in the directory/www/htdocs/example1/example2, CGI execution is not @@ -250,14 +248,14 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCond prevent script execution while allowing anything else to be set in.htaccessyou can use:<Directory "/www/htdocs"> - AllowOverride All +<Directory "/www/htdocs"> +AllowOverride All </Directory> <Location "/"> - Options +IncludesNoExec -ExecCGI +Options +IncludesNoExec -ExecCGI </Location>- +This example assumes that your@@ -274,15 +272,15 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCondDocumentRootis/www/htdocs.-
.htaccessfile contents:AuthType Basic +configuration directives, placed in a- -AuthType Basic AuthName "Password Required" AuthUserFile "/www/passwords/password.file" AuthGroupFile "/www/passwords/group.file" Require group admins+Note that
+AllowOverride AuthConfigmust be in effect - for these directives to have any effect.AllowOverride AuthConfigmust be in effect + for these directives to have any effect.Please see the authentication tutorial for a more complete discussion of authentication and authorization.
@@ -295,14 +293,14 @@ Require group admins.htaccessfile in the desired directory: -Options +Includes +- -Options +Includes AddType text/html "shtml" AddHandler server-parsed shtml+Note that
-AllowOverride OptionsandAllowOverride +AllowOverride OptionsandAllowOverride FileInfomust both be in effect for these directives to have any - effect. + effect.Please see the SSI tutorial for a more complete discussion of server-side includes.
@@ -315,7 +313,7 @@ changes things a bit. In particular, rules are taken to be relative to the current directory, rather than being the original requested URI. Consider the following examples:# In httpd.conf +# In httpd.conf RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" # In .htaccess in root dir @@ -323,7 +321,7 @@ RewriteRule "^images/(.+)\.jpg" "images/$1.png" # In .htaccess in images/ RewriteRule "^(.+)\.jpg" "$1.png"- +In a
-.htaccessin your document directory, the leading slash is removed from the value supplied toRewriteRule, and in the @@ -331,7 +329,7 @@ slash is removed from the value supplied toexecution of CGI programs in a particular directory. This may be implemented with the following configuration:Options +ExecCGI +that the directive used in yourOptions +ExecCGI AddHandler cgi-script "cgi" "py"- +Alternately, if you wish to have all files in the given directory be considered to be CGI programs, this may be done with the following configuration:
-Options +ExecCGI +nonsense word in your- -Options +ExecCGI SetHandler cgi-script+Note that
AllowOverride OptionsandAllowOverride +AllowOverride OptionsandAllowOverride FileInfomust both be in effect for these directives to have any - effect. + effect.Please see the CGI tutorial for a more complete discussion of CGI programming and configuration.
@@ -386,8 +384,8 @@ SetHandler cgi-script.htaccessfile and reload the page: -TestMe- +TestMe+If a server error (HTTP 500) is not generated, then you almost certainly have
AllowOverride @@ -398,12 +396,11 @@ SetHandler cgi-script.htaccessfile is not permitted. -[Tue May 06 09:12:31.528374 2025] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: DirectoryIndex not allowed here- +[Thu Jun 18 09:12:31.528374 2026] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: DirectoryIndex not allowed here+This will indicate either that you've used a directive that is - never permitted in
@@ -411,8 +408,8 @@ SetHandler cgi-script.htaccessfiles, or that you simply - don't haveAllowOverrideset to + never permitted in.htaccessfiles, or that you don't haveAllowOverrideset to a level sufficient for the directive you've used. Consult the documentation for that particular directive to determine which is the case.Alternately, it may tell you that you had a syntax error in your usage of the directive itself.
-[Tue May 06 09:14:02.946218 2025] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: RewriteCond: bad flag delimiters- +[Thu Jun 18 09:14:02.946218 2026] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: RewriteCond: bad flag delimiters+In this case, the error message should be specific to the particular syntax error that you have committed.
diff --git a/docs/manual/howto/htaccess.html.fr.utf8 b/docs/manual/howto/htaccess.html.fr.utf8 index b1ca81da..2ae6be25 100644 --- a/docs/manual/howto/htaccess.html.fr.utf8 +++ b/docs/manual/howto/htaccess.html.fr.utf8 @@ -73,8 +73,8 @@ Includes - SSI).config, vous pouvez mettre ceci dans le fichier de configuration de votre serveur : -AccessFileName ".config"- +AccessFileName ".config"+Les directives dans les fichiers
.htaccessutilisent la même @@ -88,7 +88,7 @@ Includes - SSI)
.htaccess,
la documentation de cette directive contiendra une section Override,
spécifiant quelle valeur doit prendre la directive AllowOverride pour que cette directive
- soit traitée.
+ soit autorisée.
AllowOverride est None. Cela signifie
que les fichiers .htaccess seront complètement ignorés, à moins
@@ -143,25 +143,23 @@ Includes - SSI)
.htaccess est chargé en mémoire chaque fois qu'un
document fait l'objet d'une requête.
- Notez aussi que httpd doit rechercher les fichiers
- .htaccess dans tous les répertoires de niveau
- supérieur, afin de rassembler toutes les directives qui s'appliquent
- au répertoire courant (Voir la section comment sont
- appliquées les directives). Ainsi, si un fichier fait l'objet
- d'une requête à partir d'un répertoire
- /www/htdocs/exemple, httpd doit rechercher les
- fichiers suivants :
En outre, httpd doit rechercher des fichiers .htaccess dans
+ tous les répertoires de niveau supérieur pour rassembler la totalité des
+ directives applicables (Voir la section comment sont
+ appliquées les directives). Ainsi, si un fichier fait l'objet d'une
+ requête à partir d'un répertoire /www/htdocs/exemple, httpd
+ doit rechercher les fichiers suivants :
/.htaccess +/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess- +En conséquence, chaque accès à un fichier de ce répertoire nécessite 4 accès au système de fichiers supplémentaires pour rechercher des fichiers
@@ -170,7 +168,7 @@ Includes - SSI) utilisateurs de modifier la configuration du serveur, il peut en résulter des conséquences sur lesquelles vous n'aurez aucun contrôle. Réfléchissez bien avant de donner ce privilège à vos - utilisateurs. Notez aussi que ne pas donner aux utilisateurs les + utilisateurs. Ne pas donner aux utilisateurs les privilèges dont ils ont besoin va entraîner une augmentation des demandes de support technique. Assurez-vous d'avoir informé clairement vos utilisateurs du niveau de privilèges que vous leur @@ -185,41 +183,41 @@ Includes - SSI) nommer individuellement les directives autorisées, vous permettant ainsi un contrôle plus fin que dans le cas de la directive.htaccess, même si - aucun de ces fichiers n'est présent. Notez que cet exemple ne peut + aucun de ces fichiers n'est présent. Cet exemple ne peut se produire que si les fichiers.htaccessont été autorisés pour le répertoire/, ce qui est rarement le cas.AllowOverrideseule : -# N’autoriser que des directives spécifiques, pas des catégories entières de +# N’autoriser que des directives spécifiques, pas des catégories entières de # directives AllowOverride None AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCond- +Avec cette configuration, toute directive non explicitement spécifiée causera une erreur du serveur si elle est rencontrée dans un fichier
-.htaccess. C’est un bon compromis entre possibilité et impossibilité totales d’outrepasser la configuration globale.Notez que mettre un fichier
+.htaccesscontenant une - directive dans un répertoire/www/htdocs/exemple- revient exactement au même que mettre la même directive dans une - section Directory<Directory "/www/htdocs/exemple">- du fichier de configuration de votre serveur principal :Placer une directive dans un fichier
-.htaccessdans un + répertoire/www/htdocs/exampleéquivaut exactement à placer + cette même directive dans une section<Directory + "/www/htdocs/example">de la configuration globale de votre + serveur :Fichier
+.htaccessdans -/www/htdocs/exemple:Fichier
.htaccessdans/www/htdocs/example+ :+Contenu du fichier .htaccess dans -
/www/htdocs/exempleAddType text/example ".exm"-/www/htdocs/exampleAddType text/example ".exm"+
httpd.conf<Directory "/www/htdocs/example"> - AddType text/example ".exm" +httpd.conf+<Directory "/www/htdocs/example"> +AddType text/example ".exm" </Directory>-
L'utilisation des fichiers .htaccess peut être
entièrement désactivée en définissant la directive AllowOverride à none :
AllowOverride None- +
AllowOverride None+
Les directives de configuration situées dans un fichier
.htaccess s'appliquent au répertoire dans lequel ce
fichier .htaccess se trouve, ainsi qu'à tous ses
- sous-répertoires. Cependant, il est important de garder à l'esprit
+ sous-répertoires. Cependant, souvenez-vous
qu'il peut y avoir des fichiers .htaccess dans les
répertoires de niveau supérieur. Les directives sont appliquées
selon l'ordre dans lequel elles sont rencontrées. Ainsi, les
@@ -244,19 +242,19 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCond
Dans le répertoire /www/htdocs/exemple1 se trouve un
fichier .htaccess contenant ce qui suit :
Options +ExecCGI- +
Options +ExecCGI+
Note : "AllowOverride Options" doit être présent
+
AllowOverride Options" doit être présent
pour permettre l'utilisation de la directive "Options" dans les fichiers
- .htaccess.
+ .htaccess.Dans le répertoire /www/htdocs/exemple1/exemple2 se
trouve un fichier .htaccess contenant ce qui suit
:
Options Includes- +
Options Includes+
Ainsi, à cause de ce second fichier .htaccess du
répertoire /www/htdocs/exemple1/exemple2, l'exécution
@@ -280,14 +278,14 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCond
définition de toute autre option dans les fichiers
.htaccess, vous pouvez utiliser :
<Directory "/www/htdocs"> - AllowOverride All +<Directory "/www/htdocs"> +AllowOverride All </Directory> <Location "/"> - Options +IncludesNoExec -ExecCGI +Options +IncludesNoExec -ExecCGI </Location>- +Dans cet exemple, on considère que le chemin défini par la directive+DocumentRootest @@ -305,15 +303,15 @@ AllowOverrideList Redirect RedirectMatch RewriteEngine RewriteRule RewriteCondContenu du fichier
-.htaccess:AuthType Basic +- -AuthType Basic AuthName "Password Required" AuthUserFile "/www/passwords/password.file" AuthGroupFile "/www/passwords/group.file" Require group admins+Notez que
+AllowOverride AuthConfigdoit être présent - pour que ces directives produisent leur effet.AllowOverride AuthConfigdoit être présent + pour que ces directives produisent leur effet.Vous pouvez vous référer au tutoriel sur l'authentification pour une description plus détaillée de @@ -328,14 +326,14 @@ Includes - SSI) ¶ on utilise les directives de configuration suivantes, placées dans un fichier
-.htaccessenregistré dans le répertoire considéré :Options +Includes +- -Options +Includes AddType text/html "shtml" AddHandler server-parsed shtml+Notez que
-AllowOverride OptionsetAllowOverride +AllowOverride OptionsetAllowOverride FileInfodoivent être tous les deux présents pour que ces - directives puissent produire leur effet. + directives puissent produire leur effet.Vous pouvez vous référer au tutoriel SSI pour une description plus détaillée des SSI.
@@ -348,7 +346,7 @@ différentes dans un contexte de répertoire. En particulier, les r& sont relatives au répertoire courant, et non à l'URI original. Considérez les exemples suivants :# Dans httpd.conf +# Dans httpd.conf RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" # Dans un fichier .htaccess situé dans le répertoire racine de vos @@ -357,7 +355,7 @@ RewriteRule "^images/(.+)\.jpg" "images/$1.png" # Dans un fichier .htaccess situé dans le répertoire images/ RewriteRule "^(.+)\.jpg" "$1.png"- +On voit que si le fichier
-.htaccessse situe à la racine de vos documents, le slash de tête est supprimé de la valeur de @@ -367,7 +365,7 @@ la chaîne/images/disparaît de cette même valeur remplacement. Il doit donc en être de même dans votre expression rationnelle.Notez aussi que dans un contexte
.htaccess, les expressions +Dans un contexte
@@ -391,21 +389,21 @@ pour une étude détaillée de l'utilisation du module l’exécution de programmes CGI dans un répertoire particulier. Pour y parvenir, vous pouvez utiliser la configuration suivante : -.htaccess, les expressions rationnelles sont recompilées à chaque requête, alors que dans un contexte de configuration principale, elle ne sont compilées qu’une seule fois et mises en cache.Options +ExecCGI +utilisée dans votre fichierOptions +ExecCGI AddHandler cgi-script "cgi" "py"- +Alternativement, si vous souhaitez que tous les fichiers d'un répertoire donné soient considérés comme des programmes CGI, vous pouvez utiliser la configuration suivante :
-Options +ExecCGI +dénué de sens dans votre ficher- -Options +ExecCGI SetHandler cgi-script+Notez que
AllowOverride OptionsetAllowOverride +AllowOverride OptionsetAllowOverride FileInfodoivent être tous les deux présents pour que ces - directives puissent produire leur effet. + directives puissent produire leur effet.Vous pouvez vous référer au tutoriel CGI pour une description plus détaillée de la configuration et de la @@ -427,8 +425,8 @@ SetHandler cgi-script
.htaccesset de recharger la page : -TestMe- +TestMe+Si aucune erreur (HTTP 500) n'est générée par le serveur, il est pratiquement certain qu'une directive @@ -440,12 +438,12 @@ SetHandler cgi-script
.htaccessn'est pas permise. -[Tue May 06 09:12:31.528374 2025] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: DirectoryIndex not allowed here- +[Thu Jun 18 09:12:31.528374 2026] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: DirectoryIndex not allowed here+Cela signifie soit que vous utilisez une directive qui n'est jamais permise dans les fichiers
.htaccess, soit - que vous n'avez tout simplement pas défini la directive + que vous n'avez pas défini la directiveAllowOverrideà un niveau suffisant pour la directive que vous utilisez. Consultez la documentation de cette directive pour déterminer quel cas @@ -454,8 +452,8 @@ SetHandler cgi-scriptLe journal des erreurs peut aussi vous signaler une erreur de syntaxe dans l'usage de la directive elle-même.
-[Tue May 06 09:14:02.946218 2025] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: RewriteCond: bad flag delimiters- +[Thu Jun 18 09:14:02.946218 2026] [core:alert] [pid 12345] [client 192.168.1.50:54321] /var/www/html/.htaccess: RewriteCond: bad flag delimiters+Dans ce cas, le message d'erreur sera spécifique à l'erreur de syntaxe que vous avez commise.
diff --git a/docs/manual/howto/htaccess.html.pt-br.utf8 b/docs/manual/howto/htaccess.html.pt-br.utf8 index f55b14d6..b899708b 100644 --- a/docs/manual/howto/htaccess.html.pt-br.utf8 +++ b/docs/manual/howto/htaccess.html.pt-br.utf8 @@ -30,6 +30,8 @@ ko | pt-brEsta tradução pode estar desatualizada. + Verifique a versão em inglês para alterações recentes.Arquivos
.htaccessoferecem um meio de fazer alterações nas configurações por diretório, sem modificar diretamente os arquivos diff --git a/docs/manual/howto/http2.html.en b/docs/manual/howto/http2.html.en index 2064c89a..1f9506f9 100644 --- a/docs/manual/howto/http2.html.en +++ b/docs/manual/howto/http2.html.en @@ -30,7 +30,7 @@This is the howto guide for the HTTP/2 implementation in Apache httpd. This feature is production-ready and you may expect interfaces and directives to - remain consistent releases. + remain consistent across releases.
The HTTP/2 protocolHTTP/2 is the evolution of the world's most successful application layer protocol, HTTP. It focuses on making more efficient use of network resources. It does not change the fundamentals - of HTTP, the semantics. There are still request and responses and headers and all that. So, if + of HTTP, the semantics. There are still requests and responses and headers and all that. So, if you already know HTTP/1, you know 95% about HTTP/2 as well.
-There has been a lot written about HTTP/2 and how it works. The most normative is, of course, - its RFC 7540 - (also available in more readable formatting, YMMV (RFC 7540)). - So, there you'll find the nuts and bolts.
-But, as RFC do, it's not really a good thing to read first. It's better to first understand - what a thing wants to do and then read the RFC about how it is done. A much - better document to start with is http2 explained - by Daniel Stenberg, the author of curl. It is available in - an ever growing list of languages, too!
-Too Long, Didn't read: there are some new terms and gotchas that need to be kept in mind while reading this document:
+ +The protocol is defined in RFC 9113 (which obsoletes the original + RFC 7540). For a more approachable introduction, see + http2 explained by Daniel Stenberg, + the author of curl. It covers the motivation + and design of HTTP/2 without requiring you to parse RFC notation first.
+ +In short: there are some new terms and gotchas that need to be kept in + mind while reading this document:
+The HTTP/2 protocol is implemented by its own httpd module, aptly named
mod_http2. It implements the complete set
- of features described by RFC 7540 and supports HTTP/2 over cleartext (http:), as
+ of features described by RFC 9113 and supports HTTP/2 over cleartext (http:), as
well as secure (https:) connections. The cleartext variant is named 'h2c',
the secure one 'h2'. For h2c it allows the direct
mode and the Upgrade: via an initial HTTP/1 request.
One feature of HTTP/2 that offers new capabilities for web developers is - Server Push. See that section on how your web application - can make use of it.
+One feature of HTTP/2 that formerly offered new capabilities for web developers is + Server Push, though it is now deprecated. See the + Early Hints section for the recommended alternative.
mod_http2 uses the library of nghttp2
- as its implementation base. In order to build mod_http2 you need at least version 1.2.1 of
+ as its implementation base. Building mod_http2 requires at least version 1.2.1 of
libnghttp2 installed on your system.
When you ./configure your Apache httpd source tree, you need to give it
'--enable-http2' as additional argument to trigger the build of the module.
Should your libnghttp2 reside in an unusual place (whatever that is on your
operating system), you may announce its location with '--with-nghttp2=<path>'
to configure.
While that should do the trick for most, they are people who might prefer a statically +
While that should do the trick for most, there are people who might prefer a statically
linked nghttp2 in this module. For those, the option --enable-nghttp2-staticlib-deps
- exists. It works quite similar to how one statically links openssl to mod_ssl.
mod_ssl.
Speaking of SSL, you need to be aware that most browsers will speak HTTP/2 only on https:
- URLs, so you need a server with SSL support. But not only that, you will need a SSL library
+ URLs, so you need a server with SSL support. But not only that, you will need an SSL library
that supports the ALPN extension. If OpenSSL is the library you use, you need
at least version 1.0.2.
When you have a httpd built with mod_http2 you need some
- basic configuration for it becoming active. The first thing, as with every Apache module,
+ basic configuration for it becoming active. The first thing, as with every httpd module,
is that you need to load it:
LoadModule http2_module modules/mod_http2.so- +
LoadModule http2_module modules/mod_http2.so+
The second directive you need to add to your server configuration is
-Protocols h2 http/1.1- +
Protocols h2 http/1.1+
This allows h2, the secure variant, to be the preferred protocol on your server - connections. When you want to enable all HTTP/2 variants, you simply write:
-Protocols h2 h2c http/1.1- -
Depending on where you put this directive, it affects all connections or just - the ones to a certain virtual host. You can nest it, as in:
-Protocols http/1.1 + connections. When you want to enable all HTTP/2 variants, write: ++Protocols h2 h2c http/1.1+Depending on where you put this directive, it affects all connections or only + those to a specific virtual host. You can nest it, as in:
+Protocols http/1.1 <VirtualHost ...> - ServerName test.example.org - Protocols h2 http/1.1 +ServerName test.example.org +Protocols h2 http/1.1 </VirtualHost>- +This allows only HTTP/1 on connections, except SSL connections to
test.example.orgwhich offer HTTP/2.Choose a strong SSLCipherSuite
The
+ the ones listed in the HTTP/2 TLS reject list (RFC 9113).SSLCipherSuiteneeds to be configured with a strong TLS cipher suite. The current version ofmod_http2does not enforce any cipher but most - clients do so. Pointing a browser to ah2enabled server with a inappropriate - cipher suite will force it to simply refuse and fall back to HTTP 1.1. This is a common mistake - that is done while configuring httpd for HTTP/2 the first time, so please keep it in mind to avoid + clients do so. Pointing a browser to ah2enabled server with an inappropriate + cipher suite causes it to refuse and fall back to HTTP 1.1. This is a common mistake + made while configuring httpd for HTTP/2 the first time, so please keep it in mind to avoid long debugging sessions! If you want to be sure about the cipher suite to choose please avoid - the ones listed in the HTTP/2 TLS reject list (RFC 7540).The order of protocols mentioned is also relevant. By default, the first one is the most preferred protocol. When a client offers multiple choices, the one most to the left is selected. In
-Protocols http/1.1 h2- +Protocols http/1.1 h2+the most preferred protocol is HTTP/1 and it will always be selected unless a client only supports h2. Since we want to talk HTTP/2 to clients that support it, the better order is
-Protocols h2 h2c http/1.1- +Protocols h2 h2c http/1.1+There is one more thing to ordering: the client has its own preferences, too. If you want, you can configure your server to select the protocol most preferred by the client:
-ProtocolsHonorOrder Off- +ProtocolsHonorOrder Off+makes the order you wrote the Protocols irrelevant and only the client's ordering will decide.
A last thing: the protocols you configure are not checked for correctness @@ -171,7 +185,7 @@
HTTP/2 is supported in all multi-processing modules that come with httpd. However, if you use the
-preforkmpm, there will be severe restrictions.In
prefork,mod_http2will only process one request at at time +In
@@ -187,9 +201,9 @@prefork,mod_http2will only process one request at a time per connection. But clients, such as browsers, will send many requests at the same time. If one of these takes long to process (or is a long polling one), the other requests will stall.Clients ¶
-Almost all modern browsers support HTTP/2, but only over SSL connections: Firefox (v43), - Chrome (v45), Safari (since v9), iOS Safari (v9), Opera (v35), Chrome for Android (v49) - and Internet Explorer (v11 on Windows10) (source).
+All modern browsers support HTTP/2 over TLS connections + (source). Support has been universal across + major browsers since approximately 2015.
Other clients, as well as servers, are listed on the Implementations wiki, among them implementations for c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, @@ -202,14 +216,16 @@
The first tool to mention is of course curl. Please make sure that your version supports HTTP/2 checking its
-Features:$ curl -V - curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4 - Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...] - Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 -- -Mac OS homebrew notes
- brew install curl --with-openssl --with-nghttp2 ++$ curl -V +curl 8.20.0 (x86_64-pc-linux-gnu) libcurl/8.20.0 OpenSSL/3.5.7 zlib/1.3.1 nghttp2/1.69.0 +Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...] +Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 ++macOS Homebrew notes
+Homebrew's
curlincludes HTTP/2 support by default. Install with +brew install curland follow the displayed caveats to put it ahead + of the system curl in your PATH.And for really deep inspection wireshark.
The nghttp2 package also includes clients, such as:
@@ -219,13 +235,19 @@Chrome offers detailed HTTP/2 logs on its connections via the special net-internals page. There is also an - interesting extension for Chrome - and Firefox - to visualize when your browser is using HTTP/2.
+ interesting extension for Chrome + and Firefox + to indicate when your browser is using HTTP/2.Server Push ¶
+Deprecation Notice
+Server Push is deprecated in RFC 9113. Major browsers + (Chrome 106+, Edge 106+) have removed support for it. While
+mod_http2+ still implements push, new deployments should use 103 Early Hints + instead as a more reliable way to inform clients about needed resources.The HTTP/2 protocol allows the server to PUSH responses to a client it never asked for. The tone of the conversation is: "here is a request that you never sent and the response to it will arrive soon..."
@@ -242,53 +264,53 @@To summarize: there is no one good strategy on how to make best use of this feature of HTTP/2 and everyone is still experimenting. So, how do you experiment with it in Apache httpd?
-
mod_http2inspect response header forLinkheaders +-
mod_http2inspects response headers forLinkheaders in a certain format:Link </xxx.css>;rel=preload, </xxx.js>; rel=preload- +Link </xxx.css>;rel=preload, </xxx.js>; rel=preload+If the connection supports PUSH, these two resources will be sent to the client. As a web developer, you may set these headers either directly in your application response or you configure the server via
-<Location /xxx.html> - Header add Link "</xxx.css>;rel=preload" - Header add Link "</xxx.js>;rel=preload" +<Location /xxx.html> +Header add Link "</xxx.css>;rel=preload" +Header add Link "</xxx.js>;rel=preload" </Location>- +If you want to use
-preloadlinks without triggering a PUSH, you can use thenopushparameter, as inLink </xxx.css>;rel=preload;nopush- +Link </xxx.css>;rel=preload;nopush+or you may disable PUSHes for your server entirely with the directive
-H2Push Off- +H2Push Off+And there is more:
The module will keep a diary of what has been PUSHed for each connection (hashes of URLs, basically) and will not PUSH the same resource twice. When the connection closes, this information is discarded.
There are people thinking about how a client can tell a server what it - already has, so PUSHes for those things can be avoided, but this is all - highly experimental right now.
-Another experimental draft that has been implemented in
+mod_http2+ already has, so PUSHes for those things can be avoided, but no standard + emerged before push was deprecated.An experimental draft that was implemented in
+ what kind of PUSHes it accepts. This draft expired and was never adopted.mod_http2is the Accept-Push-Policy Header Field where a client can, for each request, define - what kind of PUSHes it accepts.PUSH might not always trigger the request/response/performance that one expects or hopes for. There are various studies on this topic to be found on the web that explain benefits and weaknesses and how different features of client and network influence - the outcome. For example: just because the server PUSHes a resource does not mean + the outcome. For example: the fact that the server PUSHes a resource does not mean a browser will actually use the data.
The major thing that influences the response being PUSHed is the request that was simulated. The request URL for a PUSH is given by the application, but where do the request headers come from? For example, will the PUSH request a
-accept-languageheader and if yes with what value?Apache will look at the original request (the one that triggered the PUSH) and copy the +
httpd will look at the original request (the one that triggered the PUSH) and copy the following headers over to PUSH requests:
user-agent,accept,accept-encoding,accept-language,cache-control.All other headers are ignored. Cookies will also not be copied over. PUSHing resources that require a cookie to be present will not work. This can be a matter of debate. But - unless this is more clearly discussed with browser, let's err on the side of caution and - not expose cookie where they might ordinarily not be visible.
+ unless this is more clearly discussed with browsers, let's err on the side of caution and + not expose cookies where they might ordinarily not be visible.Early Hints ¶
@@ -296,23 +318,23 @@An alternative to PUSHing resources is to send
-Linkheaders to the client before the response is even ready. This uses the HTTP feature called "Early Hints" and is described in RFC 8297.In order to use this, you need to explicitly enable it on the server via
-H2EarlyHints on- +To use this, you need to explicitly enable it on the server via
+H2EarlyHints on+(It is not enabled by default since some older browser tripped on such responses.)
If this feature is on, you can use the directive
-H2PushResourceto trigger early hints and resource PUSHes:<Location /xxx.html> - H2PushResource /xxx.css - H2PushResource /xxx.js +<Location /xxx.html> +H2PushResource /xxx.css +H2PushResource /xxx.js </Location>- +This will send out a
"103 Early Hints"response to a client as soon - as the server starts processing the request. This may be much early than + as the server starts processing the request. This may be much earlier than the time the first response headers have been determined, depending on your web application.If
H2Pushis enabled, this will also start the PUSH right after the - 103 response. IfH2Pushis disabled however, the 103 response will be send + 103 response. IfH2Pushis disabled however, the 103 response will be sent nevertheless to the client.diff --git a/docs/manual/howto/http2.html.fr.utf8 b/docs/manual/howto/http2.html.fr.utf8 index 78288444..1d446d28 100644 --- a/docs/manual/howto/http2.html.fr.utf8 +++ b/docs/manual/howto/http2.html.fr.utf8 @@ -42,7 +42,7 @@Clients
Outils efficaces pour déboguer HTTP/2
- Push serveur
+ Suggestions précoces
EarlyHints
Voir aussi
@@ -53,47 +53,46 @@ plus efficace des ressources réseau. Il ne modifie pas les aspects fondamentaux de HTTP (sa sémantique). Entre autres, il y a toujours des requêtes, des réponses et des en-têtes. Par conséquent, si vous connaissez - HTTP/1, vous connaissez déjà 95% de HTTP/2. -Beaucoup a déjà été écrit à propos de HTTP/2 et de son fonctionnement. La - documentation la plus officielle est bien entendu sa RFC 7540 (ou cette version au format plus - lisible : YMMV (RFC 7540). Vous trouverez ici une description des rouages de HTTP/2 dans - leurs moindres détails.
-Le premier document à lire lorsqu'on ne connaît pas un mécanisme n'est - cependant pas sa RFC. Il est préférable de comprendre tout d'abord ce - que ce mécanisme est censé faire, et seulement ensuite de lire sa RFC - pour comprendre comment il fonctionne. http2 explained de Daniel Stenberg - (l'auteur de curl) - est un bien meilleur document pour démarrer l'étude de HTTP/2. En outre, de - nouveaux langages s'ajoutent régulièrement à sa liste de traductions - disponibles !
-Si vous n'avez pas envie de le lire parce que vous le trouvez trop long, - voici certains pièges à éviter et nouveaux termes à connaître avant de lire - ce document :
+ HTTP/1, vous connaissez déjà 95% deHTTP/2. + +Le protocole est définii dans la RFC 9113 (qui rend obsolète la + RFC 7540 originale). Pour une approche plus abordable, voir le + document http2 explained par Daniel + Stenberg, l’auteur de curl. Il couvre les + but et conception de HTTP/2 sans nécessiter d’analyse de la notation RFC + préalable.
+ +En bref, il y a quelques nouveaux termes et pièges à éviter que vous + devez garder à l’esprit lors de la lecture de ce document :
+-
- A la différence de HTTP/1 qui est en texte pur, HTTP/2 est un - protocole binaire, et alors que le premier est lisible par - un humain (par exemple pour sniffer le trafic réseau), le second ne - l'est pas. Voir la FAQ - officielle pour plus de détails.
+- À l’opposé de HTTP 1.1 qui est un protocole en texte pur, HTTP/2 est + un protocol binaire. Le premier a été pensé pour être + lisible par un humain (par exemple pour surveiller le trafic réseau), + alors que ce n’est pas le cas pour le second. Vous trouverez plus + d’information dans cette question de + la FAQ officielle.
- h2 correspond à HTTP/2 sur TLS (négociation de protocole via ALPN).
-- h2c correspond à HTTP/2 sur TCP.
-- Une frame ou trame est la plus petite unité de - communication au sein d'une connexion HTTP/2 et comporte une en-tête et - une séquence d'octets de longueur variable dont la structure correspond - au type de trame. Voir la section correspondante de la documentation - officielle pour plus de détails (RFC 7540).
- Un - stream est un flux bidirectionnel de frames au sein - d'une connexion HTTP/2. La notion correspondante dans HTTP/1 est un - échange de messages de type requête et réponse. Voir la section - correspondante de la documentation officielle pour plus de détails - (RFC 7540).
-- HTTP/2 peut gérer plusieurs streams de données sur - la même connexion TCP, ce qui permet d'éviter le point de blocage - classique de HTTP/1 pour les requêtes lentes, et de ne pas avoir à - ouvrir de nouvelles connexions TCP pour chaque requête/réponse (les - connexions persistantes ou KeepAlive avaient contourné le problème dans - HTTP/1 mais ne l'avaient pas entièrement résolu)
+- h2c correspond à HTTP/2 sur TCP en texte clair + (sans TLS). Notez que h2c a été supprimé de la spécification actuelle + mais que httpd le prend encore en charge.
+- Une trame (frame) est la plus petite unité de + communication au sein d’une connexion HTTP/2 ; elle comporte un en-tête + et une séquence d’octets de longueur variable structurée en fonction du + type de trame. Vous trouverez plus d’informations dans la documentation + officielle de la RFC 9113.
+- Un flux (stream) est une circulation + bidirectionnelle de trames au sein d’une connexion HTTP/2. Le concept + correspondant dans HTTP 1.1 est un échange de messages requête/réponse. + Vous trouverez plus d’informations dans la documentation officielle de + la RFC 9113.
+- HTTP/2 peut gérer plusieurs flux de données sur la + même connexion TCP, évitant le classique blocage en tête de file + des requêtes HTTP 1.1 lentes, ainsi que la nécessité de réinitier des + connexions TCP pour chaque requête/réponse (KeepAlive contournait le + problème dans HTTP 1.1, mais ne le résolvait pas entièrement).
+@@ -101,14 +100,15 @@Le protocole HTTP/2 est implémenté dans Apache httpd via un module propre, pertinemment nommé
-mod_http2. Ce - module implémente toutes les fonctionnalités décrites par la RFC 7540 et + module implémente toutes les fonctionnalités décrites par la RFC 9113 et supporte les connexions en texte pur (http:), ou sécurisées (https:). La variante texte pur se nomme 'h2c', et la variante sécurisée 'h2'.h2cpeut être en mode direct ouUpgrade:via une requête initiale en HTTP/1.Server Push est une nouvelle fonctionnalité offerte - aux développeurs web par HTTP/2. La section correspondante de ce document - vous indiquera comment votre application peut en tirer parti.
+Server Push était une nouvelle fonctionnalité offerte + aux développeurs web par HTTP/2, mais elle est maintenant obsolète. Voir la + section EarlyHints pour l’alternative + recommandée.
remplacé par le nom de l'utilisateur dans le chemin du fichier correspondant. Par exemple, avec cette configuration : -Compilation de httpd avec le support de HTTP/2 ¶
@@ -143,32 +143,31 @@Maintenant que vous disposez d'un binaire
-httpdcompilé avec le modulemod_http2, l'activation de ce dernier nécessite un minimum de configuration supplémentaire. En premier lieu, comme pour tout - module Apache, vous devez le charger :LoadModule http2_module modules/mod_http2.so- + module de httpd, vous devez le charger : +LoadModule http2_module modules/mod_http2.so+La seconde directive que vous devez ajouter à votre fichier de configuration est
-Protocols h2 http/1.1- +Protocols h2 http/1.1+Ceci permet de définir h2, la variante sécurisée, comme le protocole préféré pour les connexions à votre serveur. Si vous souhaitez que toutes les variantes soient disponibles, utilisez la directive suivante :
-Protocols h2 h2c http/1.1- -Selon l'endroit où vous placez cette directive, elle affectera l'ensemble - de votre serveur, ou seulement un ou plusieurs serveurs virtuels. Vous +
+Protocols h2 h2c http/1.1+Selon l'endroit où vous placez cette directive, elle affectera toute les + connexions, ou seulement celles vers un serveur virtuel spécifique. Vous pouvez aussi l'imbriquer comme dans l'exemple suivant :
-Protocols http/1.1 +- -Protocols http/1.1 <VirtualHost ...> - ServerName test.example.org - Protocols h2 http/1.1 +ServerName test.example.org +Protocols h2 http/1.1 </VirtualHost>+Seules les connexions en HTTP/1 seront alors permises, sauf pour le serveur - virtuel
+test.example.orgqui acceptera aussi les connexions SSL - en HTTP/2.Seules les connexions en HTTP/1 seront alors permises, sauf pour les + connexions SSL vers
test.example.orgqui propose aussi HTTP/2.sera construit en utilisant ce chemin, suivi du nom de l'utilisateur considéré. Par exemple, avec cette configuration : -Utilisez une chaîne d'algorithmes de chiffrement forte
La directive
SSLCipherSuitedoit être définie avec une chaîne d'algorithmes de chiffrement TLS forte. Même si @@ -186,21 +185,22 @@L'ordre des protocoles indiqués est aussi important. Par défaut, le premier sera le protocole préféré. Lorsqu'un client offre plusieurs choix, c'est le plus à gauche qui sera sélectionné. Dans
-Protocols http/1.1 h2- +Protocols http/1.1 h2+le protocole préféré sera HTTP/1 et il sera toujours sélectionné sauf si un client ne supporte que h2. Comme nous souhaitons communiquer en HTTP/2 avec les clients qui le supportent, la meilleure définition de la directive est
-Protocols h2 h2c http/1.1- +Protocols h2 h2c http/1.1+Toujours à propos de l'ordre des protocoles, le client a lui aussi ses propres préférences en la matière. À ce titre, si vous le souhaitez, vous pouvez configurer votre serveur pour qu'il sélectionne non plus son protocole préféré, mais au contraire le protocole préféré du client :
-ProtocolsHonorOrder Off+ProtocolsHonorOrder Off+Avec cette directive, l'ordre des protocoles que vous avez défini devient caduque et seul l'ordre défini par le client sera pris en @@ -244,10 +244,10 @@
Clients ¶
-La plupart des navigateurs modernes supportent HTTP/2, mais seulement sur - des connexions SSL : Firefox v43, Chrome v45, Safari v9, iOS Safari v9, - Opera v35, Chrome pour Android v49 et - Internet Explorer v11 sous Windows10 (selon cette source).
+Tous les navigateurs modernes prennent en charge HTTP/2 sur + des connexions TLS (source). La + prise en charge est devenue universelle sur les navigateurs principaux à peu + près en 2015.
D'autres clients et serveurs sont listés dans le wiki des implémentations ; entre autres des implémentations pour c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, @@ -261,14 +261,17 @@
Le premier d'entre eux est bien entendu curl. Assurez-vous au préalable que votre version supporte HTTP/2 en vérifiant ses
-Fonctionnalités:$ curl -V - curl 7.45.0 (x86_64-apple-darwin15.0.0) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 nghttp2/1.3.4 - Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...] - Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 -- -homebrew sous Mac OS :
- brew install curl --with-openssl --with-nghttp2 ++$ curl -V +curl 8.20.0 (x86_64-pc-linux-gnu) libcurl/8.20.0 OpenSSL/3.5.7 zlib/1.3.1 nghttp2/1.69.0 +Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 [...] +Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 ++Notes à propos de macOS Homebrew
+
curlde Homebrew inclut par défaut la prise en charge de + HTTP/2. Installez le avec la commandebrew install curlet + suivez les instructions affichées pour le mettre en tête du PATH de votre + système.Pour une inspection en profondeur : wireshark.
Le paquet nghttp2 inclut aussi des @@ -282,13 +285,21 @@
Chrome fournit des journaux détaillés des connexions HTTP/2 via la page special net-internals page. Il y - a aussi cette extension intéressante pour Chrome - et Firefox + a aussi cette extension intéressante pour Chrome + et Firefox qui permet d'indiquer que votre navigateur utilise HTTP/2.
Push serveur ¶
+Notification d’obsolescence
+Server Push est obsolète dans la RFC 9113. Les + navigateurs principaux (Chrome 106+, Edge 106+) ont supprimé sa prise en + charge. Bien que
+mod_http2implémente encore push, les + nouveaux déploiements doivent utiliser 103 Early + Hints à titre de méthode plus fiable pour informer les clients à propos + des ressources nécessaires.Le protocole HTTP/2 permet au serveur de proposer (PUSH) des réponses pour lesquelles le client n'a rien demandé. La communication autour de ces réponses est du style : "voici une requête que vous n'avez jamais @@ -313,25 +324,25 @@ procéder vous-même à ces expérimentations :
-
mod_http2inspecte l'en-tête de la réponse et recherche les en-têtesLinksous un certain format :Link </xxx.css>;rel=preload, </xxx.js>; rel=preload- +Link </xxx.css>;rel=preload, </xxx.js>; rel=preload+Si la connexion supporte PUSH, ces deux ressources seront envoyées au client. En tant que développeur web vous pouvez définir ces en-têtes soit directement au niveau de la réponse de votre application, soit en configurant votre serveur via
-<Location /xxx.html> - Header add Link "</xxx.css>;rel=preload" - Header add Link "</xxx.js>;rel=preload" +<Location /xxx.html> +Header add Link "</xxx.css>;rel=preload" +Header add Link "</xxx.js>;rel=preload" </Location>- +Si vous souhaitez utiliser des liens
-preloadsans déclencher de PUSH, vous pouvez utiliser le paramètrenopushcomme suit :Link </xxx.css>;rel=preload;nopush- +Link </xxx.css>;rel=preload;nopush+Vous pouvez aussi désactiver les PUSHes pour l'ensemble de votre serveur via la directive
-H2Push Off- +H2Push Off+À savoir aussi :
Le module maintient un journal des ressources ayant fait l'objet d'un PUSH pour chaque connexion (en général des condensés hash des URLs), et @@ -339,14 +350,13 @@ lorsque la connexion est fermée, le journal de ses PUSHes est supprimé.
Certains développeurs planchent sur la manière de permettre au client d'informer le serveur des ressources qu'il possède déjà dans son cache afin - d'éviter les PUSHes pour ces dernières, mais ceci n'en est actuellement qu'à - un stade très expérimental.
+ d'éviter les PUSHes pour ces dernières, mais aucune norme n’a émergé avant + que push ne devienne obsolète.L' - en-tête Accept-Push-Policy est un autre dispositif expérimental + en-tête Accept-Push-Policy est un dispositif expérimental implémenté dans
- - + chaque requête quels genres de PUSHes il accepte. Ce dispositif a été + abandonné et n’a jamais été adopté.mod_http2; il permet au client de définir pour - chaque requête quels genres de PUSHes il accepte.La fonctionnalité PUSH n'apportera pas toujours le gain de performances dans l'obtention de réponses aux requêtes. Vous trouverez plusieurs études sur ce @@ -370,7 +380,7 @@ d'exposer les cookies là où ils ne sont pas censés être visibles.
-Suggestions précoces ¶
+EarlyHints ¶
A l'instar des ressources PUSHées, une autre méthode consiste à envoyer des en-têtes
Linkau client avant même que la réponse ne soit @@ -378,18 +388,18 @@ précoces" (Early Hints) décrite dans la RFC 8297.Pour utiliser cette fonctionnalité, vous devez l'activer explicitement sur le serveur via :
-H2EarlyHints on- +H2EarlyHints on+Elle n'est en effet pas activée par défaut car certains navigateurs anciens perdent pied avec de telles réponses.
Une fois cette fonctionnalité activée, vous pouvez utiliser la directive
-H2PushResourcepour déclencher les suggestions précoces et les PUSHes de ressources :<Location /xxx.html> - H2PushResource /xxx.css - H2PushResource /xxx.js +<Location /xxx.html> +H2PushResource /xxx.css +H2PushResource /xxx.js </Location>- +Le serveur enverra alors au client une réponse
-"103 Early Hints"dès qu'il commencera à traiter la requête. Selon votre application web, cet envoi peut intervenir beaucoup plus tôt que le diff --git a/docs/manual/howto/public_html.html.en b/docs/manual/howto/public_html.html.en index b0bf3c0f..c371e61c 100644 --- a/docs/manual/howto/public_html.html.en +++ b/docs/manual/howto/public_html.html.en @@ -36,14 +36,20 @@ to a URLhttp://example.com/~username/will get content out of the home directory of the user "username", out of the subdirectory specified by theUserDirdirective.Note that, by default, access to these directories is not +
By default, access to these directories is not enabled. You can enable access when using
-UserDirby uncommenting the line:#Include conf/extra/httpd-userdir.conf- +#Include conf/extra/httpd-userdir.conf+in the default config file
+ +conf/httpd.conf, and adapting thehttpd-userdir.conffile as necessary, or by including the appropriate directives in a<Directory>block within the main config file.Third-party distributions of httpd (from your OS vendor or + package manager) often place themod_userdir+ configuration in a separate file, and may enable it by default. + Check your distribution's documentation for specifics. The examples + in this document assume a default source build of httpd.
Per-user web directories
- @@ -71,8 +77,8 @@ assumed to be a directory path relative to the home directory of the specified user. Given this configuration: -
Setting the file path with UserDir
UserDir public_html- +UserDir public_html+the URL
-http://example.com/~rbowen/file.htmlwill be translated to the file path @@ -82,8 +88,8 @@ constructed using that path, plus the username specified. Given this configuration:UserDir /var/html- +UserDir /var/html+the URL
@@ -92,8 +98,8 @@ in which the asterisk is replaced with the username. Given this configuration: -http://example.com/~rbowen/file.htmlwill be translated to the file path/var/html/rbowen/file.htmlUserDir /var/www/*/docs- +UserDir /var/www/*/docs+the URL
http://example.com/~rbowen/file.htmlwill be translated to the file path @@ -101,14 +107,14 @@Multiple directories or directory paths can also be set.
-UserDir public_html /var/html- +-UserDir public_html /var/html+For the URL
+http://example.com/~rbowen/file.html, - Apache will search for~rbowen. If it isn't found, - Apache will search forrbowenin/var/html. If - found, the above URL will then be translated to the file path -/var/html/rbowen/file.htmlThe arguments are considered in the order they appear. + For the URL
http://example.com/~rbowen/file.html, + httpd will search for~rbowen. If it isn't found, + httpd will then search forrbowenin/var/html. + The file will be served from whichever location is found first.@@ -117,8 +123,8 @@+The
-UserDirdirective can be used to redirect user directory requests to external URLs.UserDir http://example.org/users/*/- +UserDir http://example.org/users/*/+The above example will redirect a request for
http://example.com/~bob/abc.htmlto @@ -132,17 +138,17 @@Using the syntax shown in the UserDir documentation, you can restrict what users are permitted to use this functionality:
-UserDir disabled root jro fish- +UserDir disabled root jro fish+The configuration above will enable the feature for all users except for those listed in the
-disabledstatement. You can, likewise, disable the feature for all but a few users by using a configuration like the following:UserDir disabled +UserDir disabled UserDir enabled rbowen krietz- +See
@@ -152,16 +158,16 @@ UserDir enabled rbowen krietzUserDirdocumentation for additional examples.Enabling a cgi directory for each user ¶
-In order to give each user their own cgi-bin directory, you can use +
To give each user their own cgi-bin directory, you can use a
-<Directory>directive to make a particular subdirectory of a user's home directory cgi-enabled.<Directory "/home/*/public_html/cgi-bin/"> - Options ExecCGI - SetHandler cgi-script +<Directory "/home/*/public_html/cgi-bin/"> +Options ExecCGI +SetHandler cgi-script </Directory>- +Then, presuming that
UserDiris set topublic_html, a cgi programexample.cgi@@ -176,7 +182,7 @@ UserDir enabled rbowen krietzAllowing users to alter configuration ¶
-If you want to allows users to modify the server configuration in +
If you want to allow users to modify the server configuration in their web space, they will need to use
.htaccessfiles to make these changes. Ensure that you have setAllowOverrideto a value sufficient for the directives that you want to permit the users diff --git a/docs/manual/howto/public_html.html.es b/docs/manual/howto/public_html.html.es index f2c701a7..c25f0800 100644 --- a/docs/manual/howto/public_html.html.es +++ b/docs/manual/howto/public_html.html.es @@ -30,6 +30,10 @@ ko | trEsta traducción podría estar + obsoleta. Consulte la versión en inglés de la + documentación para comprobar si se han producido cambios + recientemente.En sistemas con múltiples usuarios, cada usuario puede tener un website en su directorio home usando la directiva
-UserDir. Los visitantes de una URL diff --git a/docs/manual/howto/public_html.html.fr.utf8 b/docs/manual/howto/public_html.html.fr.utf8 index 6d104843..50918592 100644 --- a/docs/manual/howto/public_html.html.fr.utf8 +++ b/docs/manual/howto/public_html.html.fr.utf8 @@ -38,18 +38,25 @@ visiteurs de l'URLhttp://example.com/~nom_utilisateur/recevront un contenu situé dans le répertoire home de l'utilisateur "nom_utilisateur", et dans le sous-répertoire spécifié par la directiveUserDir.Notez que par défaut, l'accès à ces répertoires n'est +
Par défaut, l'accès à ces répertoires n'est pas permis. Vous pouvez en permettre l'accès à l'aide de la directive
-UserDiren décommentant la ligne :#Include conf/extra/httpd-userdir.conf- +#Include conf/extra/httpd-userdir.conf+dans le fichier de configuration par défaut
+ +conf/httpd.conf, et en adaptant le fichierhttpd-userdir.confselon vos besoins, ou en incluant les directives appropriées dans une section<Directory>du fichier de configuration principal.Les distributions tierces de httpd (fournies par le fabricant de votre + OS ou par le gestionnaire de paquets) placent souvent la configuration de +mod_userdirdans un fichier séparé, et peuvent l’activer + par défaut. Consultez la documentation de votre distribution pour les + spécificités. Les exemples de ce document présupposent une construction par + défaut à partir des sources de httpd.interprété comme chemin relatif au répertoire home de l'utilisateur considéré. Par exemple, avec cette configuration : -
Répertoires web utilisateurs
- @@ -80,8 +87,8 @@ avec le système de fichiers
Définition du chemin des fichiers avec UserDir
UserDir public_html- +UserDir public_html+l'URL
http://example.com/~rbowen/fichier.htmlcorrespondra au chemin fichier @@ -91,9 +98,8 @@ avec le système de fichiersUserDir /var/html- - +UserDir /var/html+l'URL
@@ -102,8 +108,8 @@ avec le système de fichiershttp://example.com/~rbowen/fichier.htmlcorrespondra au chemin fichier/var/html/rbowen/fichier.htmlUserDir /var/www/*/docs- +UserDir /var/www/*/docs+l'URL
http://example.com/~rbowen/fichier.htmlcorrespondra au chemin fichier @@ -112,14 +118,14 @@ avec le système de fichiersOn peut aussi définir plusieurs répertoires ou chemins de répertoires.
-UserDir public_html /var/html- +-UserDir public_html /var/html+Avec l'URL
+http://example.com/~rbowen/fichier.html, - Apache va rechercher~rbowen. S'il ne le trouve pas, - Apache va rechercherrbowendans -/var/html. S'il le trouve, l'URL ci-dessus correspondra - au chemin fichier/var/html/rbowen/file.htmlLes arguments sont pris en compte selon l’ordre dans lequel ils + apparaissent. Pour l’URL
http://example.com/~rbowen/file.html, + httpd recherchera d’abord~rbowen. Si ce dernier n’est pas + trouvé, httpd chercherarbowendans/var/html. Le + fichier sera servi depuis le premier emplacement trouvé.@@ -128,8 +134,8 @@ avec le système de fichiersOn peut utiliser la directive
-UserDirpour rediriger les requêtes relatives aux répertoires utilisateurs vers des URLs externes.UserDir http://example.org/users/*/- +UserDir http://example.org/users/*/+L'exemple ci-dessus va rediriger une requête pour
-http://example.com/~bob/abc.htmlvers @@ -144,8 +150,8 @@ avec le système de fichiers vous pouvez définir quels utilisateurs sont autorisés à utiliser cette fonctionnalité :UserDir disabled root jro fish- +UserDir disabled root jro fish+La configuration ci-dessus va autoriser l'utilisation de la fonctionnalité pour tous les utilisateurs, à l'exception de ceux @@ -154,10 +160,9 @@ avec le système de fichiers utilisateurs sauf certains d'entre eux en utilisant une configuration du style :
-UserDir disabled +vous pouvez utiliser une sectionUserDir disabled UserDir enabled rbowen krietz- - +Vous trouverez d'autres exemples dans la documentation de
@@ -170,12 +175,11 @@ UserDir enabled rbowen krietzUserDir.<Directory>pour activer CGI dans un sous-répertoire particulier d'un répertoire home utilisateur. -<Directory "/home/*/public_html/cgi-bin/"> - Options ExecCGI - SetHandler cgi-script +<Directory "/home/*/public_html/cgi-bin/"> +Options ExecCGI +SetHandler cgi-script </Directory>- - +Avec la configuration ci-dessus, et en supposant que
+UserDirest défini àpublic_html, un programme CGIexemple.cgipourra être chargé depuis ce diff --git a/docs/manual/howto/public_html.html.tr.utf8 b/docs/manual/howto/public_html.html.tr.utf8 index cc563e5d..139ff8d4 100644 --- a/docs/manual/howto/public_html.html.tr.utf8 +++ b/docs/manual/howto/public_html.html.tr.utf8 @@ -30,6 +30,7 @@ ko | trBu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.Çok kullanıcılı sistemlerde,
-UserDiryönergesi ile her kullanıcının kendi ev dizininde bir sitesi olması sağlanabilir. diff --git a/docs/manual/howto/reverse_proxy.html.en b/docs/manual/howto/reverse_proxy.html.en index 4519d060..5cde4744 100644 --- a/docs/manual/howto/reverse_proxy.html.en +++ b/docs/manual/howto/reverse_proxy.html.en @@ -27,26 +27,19 @@ frIn addition to being a "basic" web server, and providing static and - dynamic content to end-users, Apache httpd (as well as most other web - servers) can also act as a reverse proxy server, also-known-as a - "gateway" server.
- -In such scenarios, httpd itself does not generate or host the data, - but rather the content is obtained by one or several backend servers, - which normally have no direct connection to the external network. As - httpd receives a request from a client, the request itself is proxied - to one of these backend servers, which then handles the request, generates - the content and then sends this content back to httpd, which then - generates the actual HTTP response back to the client.
- -There are numerous reasons for such an implementation, but generally - the typical rationales are due to security, high-availability, load-balancing - and centralized authentication/authorization. It is critical in these - implementations that the layout, design and architecture of the backend - infrastructure (those servers which actually handle the requests) are - insulated and protected from the outside; as far as the client is concerned, - the reverse proxy server is the sole source of all content.
+Besides serving static and dynamic content directly, Apache httpd + can act as a reverse proxy server (sometimes called a gateway).
+ +In this mode, httpd does not generate the content itself. Instead, + it forwards each client request to one or more backend servers that + have no direct connection to the external network. The backend + processes the request and returns the content to httpd, which then + delivers the HTTP response to the client.
+ +Common reasons include security, high availability, load balancing, + and centralized authentication. The backend infrastructure should be isolated from the external + network; as far as the client is concerned, the reverse proxy + is the sole source of all content.
A typical implementation is below:
@@ -79,28 +72,28 @@ to a single backend: -
ProxyPass "/" "http://www.example.com/"- +ProxyPass "/" "http://www.example.com/"+- To ensure that and
-Location:headers generated from + To ensure thatLocation:headers generated from the backend are modified to point to the reverse proxy, instead of back to itself, theProxyPassReversedirective is most often required:ProxyPass "/" "http://www.example.com/" +ProxyPass "/" "http://www.example.com/" ProxyPassReverse "/" "http://www.example.com/"- +Only specific URIs can be proxied, as shown in this example:
-ProxyPass "/images" "http://www.example.com/" +ProxyPass "/images" "http://www.example.com/" ProxyPassReverse "/images" "http://www.example.com/"- +In the above, any requests which start with the
@@ -109,27 +102,24 @@ ProxyPassReverse "/images" "http://www.example.com/"/images- path with be proxied to the specified backend, otherwise it will be handled + path will be proxied to the specified backend, otherwise it will be handled locally.- As useful as the above is, it still has the deficiencies that should - the (single) backend node go down, or become heavily loaded, that proxying - those requests provides no real advantage. What is needed is the ability - to define a set or group of backend servers which can handle such - requests and for the reverse proxy to load balance and failover among - them. This group is sometimes called a cluster but Apache httpd's - term is a balancer. One defines a balancer by leveraging the + The single-backend setup above has an obvious weakness: if that + node goes down or becomes overloaded, the proxied content is unavailable. + What you need is a group of backend servers that the reverse proxy can + load-balance and failover among. This group is sometimes called a cluster; Apache httpd's + term is a balancer. You define a balancer using the
-<Proxy>and -BalancerMemberdirectives as - shown: +BalancerMemberdirectives:<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 - ProxySet lbmethod=bytraffic +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 +ProxySet lbmethod=bytraffic </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"- +The
balancer://scheme is what tells httpd that we are creating @@ -153,23 +143,21 @@ ProxyPassReverse "/images/" "balancer://myset/"- You can adjust numerous configuration details of the balancers - and the workers via the various parameters defined in -
-ProxyPass. For example, - assuming we would wanthttp://www3.example.com:8080to - handle 3x the traffic with a timeout of 1 second, we would adjust the - configuration as follows: + You can tune balancers and workers through + parameters onProxyPass. + For example, to havehttp://www3.example.com:8080+ handle 3× the traffic with a 1-second timeout:<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 - ProxySet lbmethod=bytraffic +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 +ProxySet lbmethod=bytraffic </Proxy> ProxyPass "/images" "balancer://myset/" ProxyPassReverse "/images" "balancer://myset/"- +@@ -177,9 +165,9 @@ ProxyPassReverse "/images" "balancer://myset/"@@ -236,22 +222,19 @@ ProxyPassReverse "/images/" "balancer://myset/"- You can also fine-tune various failover scenarios, detailing which workers - and even which balancers should be accessed in such cases. For example, the - below setup implements three failover cases: + You can fine-tune failover scenarios, specifying which workers and + balancers handle traffic when others fail. The setup below + implements three failover cases:
- @@ -202,32 +190,30 @@ ProxyPassReverse "/images" "balancer://myset/"
- Thus, it is possible to have one or more hot spares and hot standbys for - each load balancer set. + You can have one or more hot spares and hot standbys for each + load balancer set.
-<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 - BalancerMember http://spare1.example.com:8080 status=+R - BalancerMember http://spare2.example.com:8080 status=+R - BalancerMember http://hstandby.example.com:8080 status=+H - BalancerMember http://bkup1.example.com:8080 lbset=1 - BalancerMember http://bkup2.example.com:8080 lbset=1 - ProxySet lbmethod=byrequests +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 +BalancerMember http://spare1.example.com:8080 status=+R +BalancerMember http://spare2.example.com:8080 status=+R +BalancerMember http://hstandby.example.com:8080 status=+H +BalancerMember http://bkup1.example.com:8080 lbset=1 +BalancerMember http://bkup2.example.com:8080 lbset=1 +ProxySet lbmethod=byrequests </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"- +- For failover, hot spares are used as replacements for unusable workers in - the same load balancer set. A worker is considered unusable if it is - draining, stopped, or otherwise in an error/failed state. Hot standbys are - used if all workers and spares in the load balancer set are - unavailable. Load balancer sets (with their respective hot spares and - standbys) are always tried in order from lowest to highest. + Hot spares replace unusable workers (draining, stopped, or in an + error state) within the same load balancer set. Hot standbys + activate only when all workers and spares in a set are unavailable. + Sets are tried in order from lowest to highest.
- One of the most unique and useful features of Apache httpd's reverse proxy is - the embedded balancer-manager application. Similar to -
-mod_status, balancer-manager displays - the current working configuration and status of the enabled - balancers and workers currently in use. However, not only does it - display these parameters, it also allows for dynamic, runtime, on-the-fly - reconfiguration of almost all of them, including adding new BalancerMembers - (workers) to an existing balancer. To enable these capability, the following - needs to be added to your configuration: + Apache httpd includes an embedded balancer-manager + application. Likemod_status, it displays the + current configuration and status of your balancers and workers. + It also lets you reconfigure them at runtime—including adding + new BalancerMembers to an existing balancer. To enable + it, add the following to your configuration:<Location "/balancer-manager"> - SetHandler balancer-manager - Require host localhost +<Location "/balancer-manager"> +SetHandler balancer-manager +Require host localhost </Location>- +Warning
Do not enable the balancer-manager until you have secured your server. In @@ -260,16 +243,16 @@ ProxyPassReverse "/images/" "balancer://myset/"
- When the reverse proxy server is accessed at that url - (eg:
http://rproxy.example.com/balancer-manager/, you will see a - page similar to the below: + When you access that URL + (e.g.http://rproxy.example.com/balancer-manager/), you + will see a page like this:
- This form allows the devops admin to adjust various parameters, take - workers offline, change load balancing methods and add new works. For - example, clicking on the balancer itself, you will get the following page: + From here you can adjust parameters, take workers offline, change + load balancing methods, and add new workers. Clicking on the + balancer itself shows:
@@ -279,8 +262,8 @@ ProxyPassReverse "/images/" "balancer://myset/"
- To have these changes persist restarts of the reverse proxy, ensure that -
@@ -289,12 +272,11 @@ ProxyPassReverse "/images/" "balancer://myset/"BalancerPersistis enabled. + To persist these changes across restarts, enable +BalancerPersist.- Before httpd proxies a request to a worker, it can "test" if that worker - is available via setting the
diff --git a/docs/manual/howto/reverse_proxy.html.fr.utf8 b/docs/manual/howto/reverse_proxy.html.fr.utf8 index cf9512bf..5483e638 100644 --- a/docs/manual/howto/reverse_proxy.html.fr.utf8 +++ b/docs/manual/howto/reverse_proxy.html.fr.utf8 @@ -27,27 +27,19 @@ fr -pingparameter for that worker using -ProxyPass. Oftentimes it is - more useful to check the health of the workers out of band, in a - dynamic fashion. This is achieved in Apache httpd by the -mod_proxy_hcheckmodule. + Before proxying a request, httpd can test whether a worker is + available using thepingparameter in +ProxyPass. Often it is + more useful to check worker health out of band. +mod_proxy_hcheckprovides this capability.En plus de ses fonctions de serveur web "basique", à savoir fournir du - contenu statique et dynamique à l'utilisateur, Apache httpd (comme la - plupart des autres serveurs web) peut aussi assurer les fonctions de serveur - mandataire inverse, connu aussi sous le nom de serveur "passerelle".
- -Dans un tel scénario, httpd ne génère et n'héberge pas lui-même les - données, le contenu étant en général obtenu à partir d'un ou plusieurs serveurs - d'arrière-plan qui n'ont normalement aucune connexion directe avec le réseau - externe. Lorsque httpd reçoit une requête en provenance d'un client, la - requête proprement dite est mandatée vers un de ces serveurs - d'arrière-plan qui traite la requête, génère le contenu et l'envoie à httpd, - ce dernier générant la véritable réponse HTTP à destination du client.
- -De nombreuses raisons peuvent vous motiver à utiliser cette - fonctionnalité, mais elles sont souvent du domaine de la sécurité, de - la haute disponibilité, de la répartition de charge et de - l'authentification/autorisation centralisée. Il est alors indispensable que - l'organisation, la conception et l'architecture de l'infrastructure - d'arrière-plan (les serveurs qui traitent au sens propre les requêtes) soient - isolées et protégées de l'extérieur ; vu du client, le serveur mandataire - inverse est le seul serveur accessible pouvant lui fournir du +
En plus de servir directement du contenu statique et dynamique, Apache + httpd peut remplir les fonctions d’un serveur mandataire inverse (parfois + appelé passerelle).
+ +Dans ce mode, httpd ne génère pas le contenu lui-même. Il redirige chaque + requête client vers un ou plusieurs serveurs dorsaux qui n’ont pas d’accès + direct au réseau externe. Le serveur dorsal traite la requête et renvoie le + contenu à httpd qui, à son tour, envoie la réponse HTTP au client.
+ +Les buts courants de ce dispositif comprennent la sécurité, la haute + disponibilité, la répartition de charge et l’authentification centralisée. + L’infrastructure dorsale doit être isolée du réseau externe ; du point de + vue du client, le mandataire inverse est la seule source de tout contenu.
Voici un exemple typique d'implémentation de cette fonctionnalité :
@@ -56,12 +48,12 @@@@ -83,26 +75,25 @@ unique : -
Mandataire inverse
- -
Mandatement inverse simple
- -
Clusters et Balancers
- +
Configuration du Balancer et des BalancerMembers
- +
Grappes et répartiteurs de charge
Configuration du répartiteur de charge et de ses membres (workers)
Gestion des indisponibilités (Failover)
Gestion du répartiteur de charge
- + dorsal
Vérification dynamique du bon fonctionnement d'un serveur - d'arrière-plan
Drapeaux d'état d'un membre du groupe de répartition de charge
ProxyPass "/" "http://www.example.com/"- +ProxyPass "/" "http://www.example.com/"+- Pour être sur que cette redirection soit effectuée et que les en-têtes -
-Location:générés par le serveur d'arrière-plan soient - modifiés pour pointer vers le mandataire inverse, et non vers le serveur - d'arrière-plan, la directiveProxyPassReverseest souvent requise : + Pour s’assurer que les en-têtesLocation:générés par le + serveur dorsal soient modifiés pour pointer vers le mandataire inverse, et + non vers le serveur d'arrière-plan, la directiveProxyPassReverseest en général requise :ProxyPass "/" "http://www.example.com/" +- -ProxyPass "/" "http://www.example.com/" ProxyPassReverse "/" "http://www.example.com/"+Seules des URIs spécifiques peuvent être mandatées, comme le montre +
Il est possible de spécifier les URIs qui peuvent être mandatés, comme le montre l'exemple suivant :
-ProxyPass "/images" "http://www.example.com/" +ProxyPass "/images" "http://www.example.com/" ProxyPassReverse "/images" "http://www.example.com/"- +Dans l'exemple précédent, si le chemin d'une requête commence par
/images, elle sera redirigée vers le serveur d'arrière-plan @@ -110,39 +101,38 @@ ProxyPassReverse "/images" "http://www.example.com/"-Clusters et Balancers ¶
+Grappes et répartiteurs de charge ¶
- Utiliser un serveur d'arrière-plan unique n'est cependant pas une solution - idéale car ce dernier peut devenir indisponible ou surchargé, et le - mandatement inverse vers ce serveur ne présente alors plus aucun avantage. - La solution réside dans la définition d'un groupe de serveurs - d'arrière-plan qui vont se partager le traitement des requêtes via un - mécanisme de répartition de charge et de gestion des indisponibilités pris - en charge par le mandataire. Ce groupe de répartition est plus connu sous le nom de - cluster, mais dans la terminologie d'Apache httpd, on utilise - plutôt le terme de balancer. Un balancer se définit en - utilisant les directives
-<Proxy>etBalancerMembercomme suit : + La configuration à un seul serveur dorsal ci-avant comporte un défaut + évident : si ce serveur dorsal est éteint ou surchargé, le contenu + mandaté ne sera pas disponible. Ce dont on a besoin ici est un groupe de + serveurs dorsaux parmi lesquels le serveur mandataire pourra basculer et + répartir la charge. Ce groupe est parfois appelé grappe + (cluster) ; Apache httpd le nomme répartiteur de charge + (balancer). Un répartiteur de charge se définit en utilisant les + directives<Proxy>+ etBalancerMember:<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 - ProxySet lbmethod=bytraffic +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 +ProxySet lbmethod=bytraffic </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"- +Le protocole
@@ -156,25 +146,25 @@ ProxyPassReverse "/images/" "balancer://myset/"balancer://indique à httpd que l'on souhaite - créer un balancer nommé myset. Ce balancer comporte deux serveurs + créer un répartiteur de charge nommé myset. Ce répartiteur comporte deux serveurs d'arrière-plan référencés dans la terminologie httpd sous le nom de BalancerMembers. Avec cet exemple, toute requête dont le chemin commence par/imagessera mandatée vers un des deux - serveurs d'arrière-plan. La directiveProxySetdéfinit ici pour le balancer + serveurs d'arrière-plan. La directiveProxySetdéfinit ici pour le répartiteur myset un algorithme de répartition de charge basé sur le trafic entrées/sorties.-Configuration du Balancer et des BalancerMembers ¶
+Configuration du répartiteur de charge et de ses membres (workers) ¶
- Vous pouvez configurer de manière détaillée les balancers et - workers via les nombreux paramètres de la directive
-ProxyPass. Par exemple, si vous souhaitez - quehttp://www3.example.com:8080traite avec un facteur 3 le - trafic avec un timeout d'une seconde, utilisez la configuration suivante : + Les répartiteurs de charge et leurs membres sont configurés à l’aide de + paramètres de la directiveProxyPass. Par exemple, pour que +http://www3.example.com:8080gère le trafic avec un facteur 3 + et un délai d’une seconde :<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 - ProxySet lbmethod=bytraffic +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 +ProxySet lbmethod=bytraffic </Proxy> ProxyPass "/images" "balancer://myset/" ProxyPassReverse "/images" "balancer://myset/"- +@@ -182,10 +172,10 @@ ProxyPassReverse "/images" "balancer://myset/"@@ -245,21 +234,19 @@ ProxyPassReverse "/images/" "balancer://myset/"- Vous pouvez aussi définir finement des scénarios pour les cas - d'indisponibilité d'un ou plusieurs serveurs d'arrière-plan en spécifiant - quels serveurs doivent alors prendre le relai. Dans l'exemple suivant, - trois scénarios sont envisagés : + Vous pouvez définir finement des scénarios pour les cas d'indisponibilité + d'un ou plusieurs serveurs dorsaux en spécifiant quels répartiteurs et + leurs membres doivent alors prendre le relai. Dans l'exemple suivant, + trois scénarios sont envisagés :
- @@ -211,32 +201,31 @@ ProxyPassReverse "/images" "balancer://myset/"
Il est ainsi possible de définir un ou plusieurs serveurs de remplacement ou de standby pour chaque jeu de serveurs du répartiteur de charge. -
- -<Proxy balancer://myset> - BalancerMember http://www2.example.com:8080 - BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 - BalancerMember http://spare1.example.com:8080 status=+R - BalancerMember http://spare2.example.com:8080 status=+R - BalancerMember http://hstandby.example.com:8080 status=+H - BalancerMember http://bkup1.example.com:8080 lbset=1 - BalancerMember http://bkup2.example.com:8080 lbset=1 - ProxySet lbmethod=byrequests + + +<Proxy balancer://myset> +BalancerMember http://www2.example.com:8080 +BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1 +BalancerMember http://spare1.example.com:8080 status=+R +BalancerMember http://spare2.example.com:8080 status=+R +BalancerMember http://hstandby.example.com:8080 status=+H +BalancerMember http://bkup1.example.com:8080 lbset=1 +BalancerMember http://bkup2.example.com:8080 lbset=1 +ProxySet lbmethod=byrequests </Proxy> ProxyPass "/images/" "balancer://myset/" ProxyPassReverse "/images/" "balancer://myset/"- +Les serveurs de remplacement à chaud remplacent les serveurs indisponibles - du même jeu de serveurs du répartiteur de charge. Un serveur est - considéré comme indisponible s'il est en maintenance, arrêté ou en erreur. - Les serveurs de standby à chaud sont utilisés si tous les serveurs et - serveurs de remplacement du jeu de serveurs du répartiteur de charge sont - indisponibles. Les jeux de serveurs du répartiteur de charge (avec leurs - serveurs de standby et de remplacement à chaud respectifs) sont toujours - sollicités dans l'ordre du plus bas lbset vers le plus haut. + (en phase de vidage, arrêtés ou en état d’erreur) du même jeu de serveurs + du répartiteur de charge. Les serveurs de standby à chaud ne sont activés + que si tous les serveurs et serveurs de remplacement du jeu de serveurs du + répartiteur de charge sont indisponibles. Les jeux de serveurs du + répartiteur de charge sont sollicités dans l'ordre du plus bas lbset vers + le plus haut.
- L'application balancer-manager fournie avec le mandataire inverse - d'Apache httpd en est un des outils les plus utiles. Comme -
-mod_status, balancer-manager affiche la - configuration et l'activité actuelles des balancers actifs. L'affichage de - ces informations n'est cependant pas sa seule fonction ; il permet aussi de - modifier la plupart d'entre elles et même d'ajouter des membres au groupe - de répartition de charge en temps réel. Pour activer ces fonctionnalités, - vous devez ajouter les lignes suivantes à votre fichier de configuration : + Apache httpd comporte un gestionnaire de répartiteur de charge + (balancer-manager) intégré. Commemod_status, il affiche + la configuration et l’état actuels de vos répartiteurs de charge et de + leurs membres. Il vous permet aussi de les reconfigurer à l’exécution + — par exemple pour ajouter de nouveaux membres à un répartiteur existant. + Pour l’activer, ajoutez les lignes suivantes à votre configuration :<Location "/balancer-manager"> - SetHandler balancer-manager - Require host localhost +<Location "/balancer-manager"> +SetHandler balancer-manager +Require host localhost </Location>- +Avertissement
N'activez le balancer-manager que si vous avez déjà sécurisé votre serveur. @@ -274,9 +261,9 @@ ProxyPassReverse "/images/" "balancer://myset/"
- Ce formulaire permet à l'administrateur de modifier certains paramètres, - de désactiver ou d'ajouter certains serveurs d'arrière-plan, et de - modifier les règles de répartition de charge. Par exemple, si on clique + Ce formulaire permet de modifier certains paramètres, + de désactiver ou d'ajouter des serveurs dorsaux, et de + modifier les règles de répartition de charge. Si l’on clique sur le répartiteur, la page suivante s'affiche :
@@ -295,16 +282,15 @@ ProxyPassReverse "/images/" "balancer://myset/"
diff --git a/docs/manual/howto/ssi.html.en b/docs/manual/howto/ssi.html.en index 1f6de502..b0947043 100644 --- a/docs/manual/howto/ssi.html.en +++ b/docs/manual/howto/ssi.html.en @@ -30,15 +30,17 @@ ko -Vérification dynamique du bon fonctionnement d'un serveur - d'arrière-plan ¶
+ dorsal ¶- Avant que le mandataire httpd ne fasse appel à un serveur d'arrière-plan, il - peut "tester" si ce dernier est disponible en définissant le - paramètre
pingde ce serveur via la directiveProxyPass. Cependant, il est souvent plus + Avant de mandater une requête, httpd peut "tester" si le serveur + dorsal est disponible en définissant le paramètrepingde ce + serveur via la directiveProxyPass. Cependant, il est souvent plus judicieux de vérifier le bon fonctionnement d'un serveur hors - bande et de manière dynamique via le module -mod_proxy_hcheckd'Apache httpd. + ibande via le modulemod_proxy_hcheck.Server-side includes provide a means to add dynamic content to -existing HTML documents.
+Server Side Includes (SSI) provide a way to add dynamic content to +existing HTML documents without requiring a full application framework. +They are particularly useful for inserting common elements — headers, +footers, navigation, timestamps — into otherwise static pages.
Introduction
What are SSI?
Configuring your server to permit SSI
Basic SSI directives
- -
Additional examples
- +
What else can I config?
Other config options
Executing commands
Advanced SSI techniques
- @@ -48,184 +50,151 @@ existing HTML documents.
Conclusion
Introduction ¶
-
Related Modules Related Directives This article deals with Server Side Includes, usually called - simply SSI. In this article, I'll talk about configuring your - server to permit SSI, and introduce some basic SSI techniques - for adding dynamic content to your existing HTML pages.
+SSI lets you drop simple directives into your HTML files that + the server evaluates before sending the page to the client. This + is a lightweight way to keep shared content (like a site-wide + footer or a "last modified" timestamp) in one place, without + needing a template engine or application server.
-In the latter part of the article, we'll talk about some of - the somewhat more advanced things that can be done with SSI, - such as conditional statements in your SSI directives.
+This document covers configuring httpd to permit SSI, basic + SSI directives for common tasks, and some more advanced + techniques including variables and conditional expressions.
What are SSI? ¶
-SSI (Server Side Includes) are directives that are placed in - HTML pages, and evaluated on the server while the pages are - being served. They let you add dynamically generated content to - an existing HTML page, without having to serve the entire page - via a CGI program, or other dynamic technology.
+SSI directives are HTML comments with a specific syntax that +
-mod_includerecognizes and evaluates before the + page is sent to the client. They look like this:For example, you might place a directive into an existing HTML - page, such as:
- -+
- <!--#echo var="DATE_LOCAL" --> --<!--#echo var="DATE_LOCAL" -->+And, when the page is served, this fragment will be evaluated and replaced with its value:
+When the page is served, this fragment is replaced with its + value:
-
- Tuesday, 15-Jan-2013 19:28:54 EST + Thursday, 18-Jun-2026 14:22:07 EDTThe decision of when to use SSI, and when to have your page - entirely generated by some program, is usually a matter of how - much of the page is static, and how much needs to be - recalculated every time the page is served. SSI is a great way - to add small pieces of information, such as the current time - shown - above. But if a majority of your page is being generated at the time - that it is served, you need to look for some other solution.
+Because the directives are embedded in HTML comments, if SSI + is not enabled, browsers ignore them (though they remain + visible in the page source).
Configuring your server to permit SSI ¶
-To permit SSI on your server, you must have the following - directive either in your
-httpd.conffile, or in a -.htaccessfile:Options +Includes+To enable SSI processing, add the following directive to your +
+ +httpd.conffile or to a.htaccess+ file:+ +Options +Includes+This tells httpd to parse files for SSI directives. Since most + configurations contain multiple
+Optionsdirectives that can override each other, apply + this to the specific directory where you want SSI enabled.You also need to tell httpd which files to parse. There are + two common approaches.
-This tells Apache that you want to permit files to be parsed - for SSI directives. Note that most configurations contain - multiple
+Optionsdirectives - that can override each other. You will probably need to apply the -Optionsto the specific directory where you want SSI - enabled in order to assure that it gets evaluated last.The first is to designate a file extension (typically +
-.shtml) for SSI-enabled pages:Not just any file is parsed for SSI directives. You have to - tell Apache which files should be parsed. There are two ways to - do this. You can tell Apache to parse any file with a - particular file extension, such as
-.shtml, with - the following directives:AddType text/html .shtml ++AddType text/html .shtml AddOutputFilter INCLUDES .shtml+The disadvantage here is that adding SSI to an existing page + requires renaming the file (and updating all links to it) to use + the
-.shtmlextension.One disadvantage to this approach is that if you wanted to - add SSI directives to an existing page, you would have to - change the name of that page, and all links to that page, in - order to give it a
+.shtmlextension, so that those - directives would be executed.The second approach uses the
-XBitHackdirective:The other method is to use the
-XBitHackdirective:XBitHack on++XBitHack on+-
XBitHacktells + httpd to parse any file that has its execute bit set. To enable + SSI on an existing page, make the file executable:-
XBitHack- tells Apache to parse files for SSI - directives if they have the execute bit set. So, to add SSI - directives to an existing page, rather than having to change - the file name, you would just need to make the file executable - usingchmod.+
- chmod +x pagename.html -+ +chmod +x pagename.html+-+ Avoid configuring httpd to parse all
.html+ files for SSI directives. This forces the server to read through + every HTML file it serves, even those without any SSI content, + which adds unnecessary overhead. +A brief comment about what not to do. You'll occasionally - see people recommending that you just tell Apache to parse all -
- -.htmlfiles for SSI, so that you don't have to - mess with.shtmlfile names. These folks have - perhaps not heard aboutXBitHack. The thing to - keep in mind is that, by doing this, you're requiring that - Apache read through every single file that it sends out to - clients, even if they don't contain any SSI directives. This - can slow things down quite a bit, and is not a good idea.Of course, on Windows, there is no such thing as an execute - bit to set, so that limits your options a little.
- -In its default configuration, Apache does not send the last - modified date or content length HTTP headers on SSI pages, - because these values are difficult to calculate for dynamic - content. This can prevent your document from being cached, and - result in slower perceived client performance. There are two - ways to solve this:
+On Windows, there is no execute bit, so the +
+ +XBitHackapproach is + not available. Use the file-extension method instead.By default, httpd does not send the last-modified date or + content-length headers on SSI pages, since these values are + difficult to calculate for dynamic content. This can prevent + caching and result in slower perceived performance. Two + approaches can help:
-
- Use the
- -XBitHack Fullconfiguration. This - tells Apache to determine the last modified date by looking - only at the date of the originally requested file, ignoring - the modification date of any included files.- Use the directives provided by -
+mod_expiresto set an explicit expiration - time on your files, thereby letting browsers and proxies - know that it is acceptable to cache them.- Use
+ +XBitHack Full, which tells httpd to + determine the last-modified date from the originally requested + file, ignoring the modification dates of included files.- Use
mod_expiresto set an explicit + expiration time, letting browsers and proxies know the content + is safe to cache.@@ -233,242 +202,182 @@ AddOutputFilter INCLUDES .shtmlBasic SSI directives ¶
-SSI directives have the following syntax:
-- -
- <!--#function attribute=value attribute=value ... --> -It is formatted like an HTML comment, so if you don't have - SSI correctly enabled, the browser will ignore it, but it will - still be visible in the HTML source. If you have SSI correctly - configured, the directive will be replaced with its - results.
+SSI directives use the following syntax:
+-<!--#function attribute=value attribute=value ... -->+The function can be one of a number of things, and we'll talk - some more about most of these in the next installment of this - series. For now, here are some examples of what you can do with - SSI
+If SSI is correctly configured, the directive is replaced with + its output. If not, it remains as an HTML comment — invisible to + the end user but present in the source.
Today's date
-+
- <!--#echo var="DATE_LOCAL" --> --<!--#echo var="DATE_LOCAL" -->+The
+echofunction just spits out the value of a - variable. There are a number of standard variables, which - include the whole set of environment variables that are - available to CGI programs. Also, you can define your own - variables with thesetfunction.The
-echofunction outputs the value of a variable. + Standard variables include the full set of environment variables + available to CGI programs, plus variables you define with +set.If you don't like the format in which the date gets printed, - you can use the
+configfunction, with a -timefmtattribute, to modify that formatting.To customize the date format, use the
-config+ function with thetimefmtattribute:+
- <!--#config timefmt="%A %B %d, %Y" -->
- Today is <!--#echo var="DATE_LOCAL" --> -<!--#config timefmt="%A %B %d, %Y" -->+
+Today is <!--#echo var="DATE_LOCAL" -->Modification date of the file
-+
- This document last modified <!--#flastmod file="index.html" --> --This document last modified <!--#flastmod file="index.html" -->+This function is also subject to
+timefmtformat - configurations.This function is also subject to
timefmt+ configuration.Including the results of a CGI program
-This is one of the more common uses of SSI - to output the - results of a CGI program, such as everybody's favorite, a ``hit - counter.''
+SSI can include the output of a CGI program directly in the + page:
-+
- <!--#include virtual="/cgi-bin/counter.pl" --> -<!--#include virtual="/cgi-bin/counter.pl" -->+Additional examples ¶
-Following are some specific examples of things you can do in - your HTML documents with SSI.
+The following are practical examples of common SSI use + cases.
-When was this document -modified?
+When was this document modified?
-Earlier, we mentioned that you could use SSI to inform the - user when the document was most recently modified. However, the - actual method for doing that was left somewhat in question. The - following code, placed in your HTML document, will put such a - time stamp on your page. Of course, you will have to have SSI - correctly enabled, as discussed above.
-+
- <!--#config timefmt="%A %B %d, %Y" -->
- This file last modified <!--#flastmod file="ssi.shtml" --> -A common use of SSI is to display a "last modified" timestamp + on each page. The following code uses the +
-LAST_MODIFIEDvariable so you can paste the same + snippet into any file without changing the filename:Of course, you will need to replace the -
-ssi.shtmlwith the actual name of the file that - you're referring to. This can be inconvenient if you're just - looking for a generic piece of code that you can paste into any - file, so you probably want to use the -LAST_MODIFIEDvariable instead:+
- <!--#config timefmt="%D" -->
- This file last modified <!--#echo var="LAST_MODIFIED" --> --<!--#config timefmt="%D" -->+
+This file last modified <!--#echo var="LAST_MODIFIED" -->For more details on the
+timefmtformat, go to - your favorite search site and look forstrftime. The - syntax is the same.For details on
timefmtformat strings, see the + documentation forstrftimein your system's C + library reference.Including a standard footer
-If you are managing any site that is more than a few pages, - you may find that making changes to all those pages can be a - real pain, particularly if you are trying to maintain some kind - of standard look across all those pages.
- -Using an include file for a header and/or a footer can - reduce the burden of these updates. You just have to make one - footer file, and then include it into each page with the -
-includeSSI command. Theinclude- function can determine what file to include with either the -fileattribute, or thevirtual- attribute. Thefileattribute is a file path, - relative to the current directory. That means that it - cannot be an absolute file path (starting with /), nor can it - contain ../ as part of that path. Thevirtual- attribute is probably more useful, and should specify a URL - relative to the document being served. It can start with a /, - but must be on the same server as the file being served.+
- <!--#include virtual="/footer.html" --> -On a site with more than a few pages, maintaining a + consistent header or footer across all pages can be tedious. + SSI solves this by letting you keep shared content in a single + file and include it everywhere:
+ +-<!--#include virtual="/footer.html" -->+I'll frequently combine the last two things, putting a -
+LAST_MODIFIEDdirective inside a footer file to be - included. SSI directives can be contained in the included file, - and includes can be nested - that is, the included file can - include another file, and so on.The
+ +includefunction accepts two attributes: +filespecifies a path relative to the current + directory (it cannot be an absolute path or contain +../), whilevirtualspecifies a URL + relative to the document being served (it can start with +/but must be on the same server).SSI directives inside included files are evaluated normally, + and includes can be nested. This means you can put a +
LAST_MODIFIEDtimestamp in your footer file, and + it will be evaluated in the context of each page that includes + it.-+What else can I config? ¶
- +Other config options ¶
-In addition to being able to
-configthe time - format, you can alsoconfigtwo other things.Usually, when something goes wrong with your SSI directive, - you get the message
-+
- [an error occurred while processing this directive] -In addition to
-timefmt, theconfig+ function supports two other attributes.If you want to change that message to something else, you - can do so with the
+errmsgattribute to the -configfunction:The
errmsgattribute changes the error message + displayed when an SSI directive fails. The default is:-
- <!--#config errmsg="[It appears that you don't know how to use SSI]" --> +[an error occurred while processing this directive]Hopefully, end users will never see this message, because - you will have resolved all the problems with your SSI - directives before your site goes live. (Right?)
+You can replace it with something more appropriate for your + site:
+-<!--#config errmsg="[Content unavailable]" -->+And you can
-configthe format in which file - sizes are returned with thesizefmtattribute. You - can specifybytesfor a full count in bytes, or -abbrevfor an abbreviated number in Kb or Mb, as - appropriate.The
+sizefmtattribute controls how file sizes + are formatted:bytesfor a full byte count, or +abbrevfor an abbreviated form in KB or MB.+Executing commands ¶
-Here's something else that you can do with the
-exec- function. You can actually have SSI execute a command using the - shell (/bin/sh, to be precise - or the DOS shell, - if you're on Win32). The following, for example, will give you - a directory listing.+
- <pre>
- <!--#exec cmd="ls" -->
- </pre> -The
-execfunction can run a shell command and + include its output in the page. On Unix-like systems, the + command is executed via/bin/sh; on Windows, via + the command shell.or, on Windows
-+
- <pre>
- <!--#exec cmd="dir" -->
- </pre> --<pre> +<!--#exec cmd="ls" --> +</pre>+You might notice some strange formatting with this directive - on Windows, because the output from
- -dircontains - the string ``<dir>'' in it, which confuses - browsers.Note that this feature is exceedingly dangerous, as it will - execute whatever code happens to be embedded in the -
-exectag. If you have any situation where users - can edit content on your web pages, such as with a - ``guestbook'', for example, make sure that you have this - feature disabled. You can allow SSI, but not the -execfeature, with theIncludesNOEXEC- argument to theOptionsdirective.++ The
execfeature is a significant security risk. It + executes arbitrary commands with the permissions of the web + server process. If users can edit content on your site, ensure + this feature is disabled by usingIncludesNOEXEC+ instead ofIncludesin theOptionsdirective. +Advanced SSI techniques ¶
-In addition to spitting out content, Apache SSI gives you - the option of setting variables, and using those variables in - comparisons and conditionals.
+Beyond simple content inclusion, SSI supports variables and + conditional expressions, making it possible to generate + different content based on the request context.
Setting variables
-Using the
-setdirective, you can set variables - for later use. We'll need this later in the discussion, so - we'll talk about it here. The syntax of this is as follows:+
- <!--#set var="name" value="Rich" --> -The
-setdirective defines variables for use later + in the page:In addition to merely setting values literally like that, you - can use any other variable, including environment variables or the variables - discussed above (like
+LAST_MODIFIED, for example) to - give values to your variables. You will specify that something is - a variable, rather than a literal string, by using the dollar sign - ($) before the name of the variable.-<!--#set var="name" value="Rich" -->++
<!--#set var="modified" value="$LAST_MODIFIED" --> -Variables can reference other variables (including + environment variables) using the dollar + sign (
-$) prefix:To put a literal dollar sign into the value of your - variable, you need to escape the dollar sign with a - backslash.
-+
- <!--#set var="cost" value="\$100" --> --<!--#set var="modified" value="$LAST_MODIFIED" -->+Finally, if you want to put a variable in the midst of a - longer string, and there's a chance that the name of the - variable will run up against some other characters, and thus be - confused with those characters, you can place the name of the - variable in braces, to remove this confusion. (It's hard to - come up with a really good example of this, but hopefully - you'll get the point.)
-+
- <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> -To include a literal dollar sign, escape it with a + backslash:
+ ++ +<!--#set var="cost" value="\$100" -->+When a variable name might be ambiguous within a longer + string, use braces to delimit it:
+ +<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->+Conditional expressions
-Now that we have variables, and are able to set and compare - their values, we can use them to express conditionals. This - lets SSI be a tiny programming language of sorts. -
+mod_includeprovides anif, -elif,else,endif- structure for building conditional statements. This allows you - to effectively generate multiple logical pages out of one - actual page.-
mod_includeprovidesif, +elif,else, andendif+ constructs for building conditional logic. This lets you + generate different output from a single physical page.The structure of this conditional construct is:
-+
- <!--#if expr="test_condition" -->
- <!--#elif expr="test_condition" -->
- <!--#else -->
- <!--#endif --> -The structure is:
-A test_condition can be any sort of logical - comparison - either comparing values to one another, or testing - the ``truth'' of a particular value. (A given string is true if - it is nonempty.) For a full list of the comparison operators - available to you, see the
- -mod_include- documentation.For example, if you wish to customize the text on your web page - based on the time of day, you could use the following recipe, placed - in the HTML page:
+-<!--#if expr="test_condition" -->+
+<!--#elif expr="test_condition" -->
+<!--#else -->
+<!--#endif -->+
- Good - <!--#if expr="%{TIME_HOUR} <12" -->
- morning!
- <!--#else -->
- afternoon!
- <!--#endif -->
-A test_condition can compare values or test whether a + variable is non-empty. See the
+ +mod_include+ documentation for the full list of comparison operators.For example, to display different greetings based on the time + of day:
+ +-Good +<!--#if expr="%{TIME_HOUR} <12" -->+
+morning!
+<!--#else -->
+afternoon!
+<!--#endif -->
+Any other variable (either ones that you define, or normal - environment variables) can be used in conditional statements. - See Expressions in Apache HTTP Server for - more information on the expression evaluation engine.
+Any variable — user-defined or from the environment — can be + used in conditional expressions. See + Expressions in Apache HTTP Server for + full details on the expression evaluation engine.
-With Apache's ability to set environment variables with the -
+SetEnvIfdirectives, and other related directives, - this functionality can let you do a wide variety of dynamic content - on the server side without resorting a full web application.Combined with httpd's ability to set environment variables + using
SetEnvIfand + related directives, conditional SSI can handle a wide variety of + dynamic content scenarios without a full application + framework.Conclusion ¶
-SSI is certainly not a replacement for CGI, or other - technologies used for generating dynamic web pages. But it is a - great way to add small amounts of dynamic content to pages, - without doing a lot of extra work.
+For sites that are mostly static but need a few dynamic + touches, SSI avoids the overhead of setting up a full + application stack. It requires only
mod_include+ and a few lines of configuration to get started.+Available Languages: en | diff --git a/docs/manual/howto/ssi.html.es b/docs/manual/howto/ssi.html.es index 74ba8307..0fc74195 100644 --- a/docs/manual/howto/ssi.html.es +++ b/docs/manual/howto/ssi.html.es @@ -31,6 +31,10 @@ ja | ko
Esta traducción podría estar + obsoleta. Consulte la versión en inglés de la + documentación para comprobar si se han producido cambios + recientemente.Los Server Side Includes (Inclusiones en la parte Servidor) facilitan un método para añadir contenido dinámico a documentos HTML existentes.
diff --git a/docs/manual/howto/ssi.html.fr.utf8 b/docs/manual/howto/ssi.html.fr.utf8 index 5a341cbd..935a9d9e 100644 --- a/docs/manual/howto/ssi.html.fr.utf8 +++ b/docs/manual/howto/ssi.html.fr.utf8 @@ -33,14 +33,17 @@Les SSI permettent d'ajouter du contenu dynamique à des documents -HTML préexistants.
+HTML préexistants sans nécessiter de cadriciel complet d’application. Ils +s’avèrent particulièrement utiles pour insérer des éléments courants — en-têtes, +pieds de page, navigation, horodatages — dans des pages qui, sans cela, seraient +statiques.
Introduction
Qu'est-ce que SSI ?
Configurer votre serveur pour permettre les SSI
Directives SSI de base
- -
Exemples additionnels
- +
Que puis-je configurer d'autre ?
Autres options de configuration
Exécution de commandes
Techniques SSI avancées
- @@ -50,180 +53,146 @@ HTML préexistants.
Conclusion
Introduction ¶
-
Modules Apparentés Directives Apparentées Cet article traite des Inclusions Côté Serveur (Server Side - Includes), plus communément appelés SSI. Vous trouverez ici la - manière de configurer votre serveur pour permettre les SSI, ainsi - qu'une introduction à quelques techniques SSI de base permettant - d'ajouter du contenu dynamique à vos pages HTML préexistantes.
- -La dernière partie de cet article sera consacrée aux - configurations SSI plus avancées, telles que les expressions - conditionnelles dans les directives SSI.
+Les SSI permettent d’insérer de simples directives dans les fichiers + HTML, que le serveur évaluera avant d’envoyer la page au client. Il s’agit + d’une manière simple de stocker du contenu partagé (comme un pied de page + global au site ou un horodatage de dernière modification) en un seul + endroit, sans nécessiter de moteur de modèle ou de serveur d’applications.
+Ce document décrit la manière de configurer httpd pour autoriser les + SSI, les directives SSI basiques pour les tâches courantes, ainsi que + quelques techniques plus avancées comme l’inclusion de variable et les + expressions conditionnelles.
+Qu'est-ce que SSI ? ¶
-SSI (Server Side Includes) est constitué de directives placées dans - des pages HTML, et évaluées par le serveur au moment où les pages - sont servies. Elles vous permettent d'ajouter du contenu généré - dynamiquement à une page HTML préexistante, sans avoir à servir la - page entière via un programme CGI, ou toute autre technologie de - contenu dynamique.
- -Par exemple, vous pouvez insérer la directive suivante dans une - page HTML existante :
- -+
- <!--#echo var="DATE_LOCAL" --> -Les directives SSI sont des commentaires HTML avec une syntaxe spécifique + que le module
-mod_includereconnaît et évalue avant que la + page ne soit envoyée au client. Elle sont de la forme suivante :Ainsi, lorsque la page sera servie, la directive sera évaluée et - remplacée par sa valeur :
++<!--#echo var="DATE_LOCAL" -->+Lorsque la page est servie, ce fragment est remplacé par sa valeur :
+-
- Tuesday, 15-Jan-2013 19:28:54 EST + Thursday, 18-Jun-2026 14:22:07 EDTLe choix entre l'utilisation des SSI et la génération entière de - la page par un programme quelconque, est en général dicté par la - proportion de contenu statique et de contenu devant être généré - chaque fois que la page est servie. SSI est idéal pour ajouter de - petites quantités d'information, comme l'heure courante dans - l'exemple précédent. Mais si la - plus grande partie de votre page est générée au moment où elle est - servie, vous devez vous tourner vers une autre solution.
+Les directives étant intégrées dans des commentaires HTML, les + navigateurs les ignoreront si les SSI ne sont pas activées (bien qu’elles + demeurent visibles dans le code source de la page).
Configurer votre serveur pour permettre les SSI ¶
-Pour permettre l'utilisation des SSI sur votre serveur, vous - devez ajouter la directive suivante dans votre fichier -
-httpd.conf, ou dans un fichier.htaccess- :Options +Includes+Pour activer le traitement des SSI, ajoutez la directive suivante à votre + fichier
+httpd.confou à un fichier.htaccess:-Options +Includes+Cette directive indique à Apache que vous désirez permettre la - recherche de directives SSI lors de l'interprétation des fichiers. - Notez cependant que la plupart des configurations contiennent de - nombreuses directives
+Options- qui peuvent s'écraser les unes les autres. Vous devrez probablement - appliquer ces directivesOptionsau répertoire - spécifique pour lequel vous voulez activer les SSI, afin d'être sûr - qu'elles y seront bien activées.Si cette option est définie, httpd va analyser les fichiers en y + recherchant des directives SSI. Comme la plupart des configurations + contiennent plusieurs directives
-Optionsqui peuvent s’outrepasser les unes les autres, + appliquez la directive d’activation au répertoire spécifique pour lequel + vous voulez activer les SSI.Tout fichier ne fera cependant pas l'objet de recherche de - directives SSI. Vous devez indiquer à Apache quels fichiers seront - concernés. Vous pouvez y parvenir en indiquant une extension, comme -
-.shtml, à l'aide des directives suivantes :AddType text/html .shtml -AddOutputFilter INCLUDES .shtml+Vous devez aussi indiquer à httpd les fichiers qu’il doit analyser. Pour + ce faire, il existe deux approches courantes.
+La première consiste à indiquer une extension de nom de fichier (en + général
-.shtml) pour les pages pour lesquelles les SSI sont + activées :Un des désavantages de cette approche réside dans le fait que si - vous voulez ajouter des directives SSI à une page préexistante, vous - devrez changer le nom de cette page, et donc tout lien qui la - contient, de façon à ce qu'elle possède l'extension -
+.shtml, condition nécessaire pour que les directives - SSI qu'elle contient soient traitées.-AddType text/html .shtml +AddOutputFilter INCLUDES .shtml+Une autre méthode consiste à utiliser la directive
-XBitHack:XBitHack on+Cette approche a pour désavantage de nécessiter, pour ajouter des SSI à + une page existante, de renommer le fichier (et de mettre à jour tous les + liens vers ce dernier) pour utiliser l’extension
+.shtml.La seconde approche consiste à utiliser la directive
-XBitHack:La directive
-XBitHack- indique à Apache qu'il doit rechercher des directivves SSI dans les - fichiers si leur bit d'exécution est positionné. Il n'est ainsi plus - nécessaire de changer le nom du fichier pour ajouter des directives - SSI à une page préexistante ; vous devez simplement attribuer les - droits d'exécution au fichier à l'aide dechmod.+
- chmod +x pagename.html --XBitHack on+Un bref commentaire sur ce qu'il ne faut pas faire. Certaines - personnes peuvent vous conseiller de tout simplement indiquer à - Apache de rechercher des directives SSI dans tous les fichiers -
- -.html, ce qui vous évite d'avoir à gérer les noms de - fichiers avec extension.shtml. Ils n'ont probablement - pas entendu parler de la directiveXBitHack. En effet, vous devez - garder à l'esprit qu'en faisant ceci, Apache va devoir rechercher - des directives SSI dans chaque fichier qu'il sert, même s'il n'en - contient aucune. Ce n'est donc pas une bonne idée car les - performances peuvent en être sensiblement affectées.Bien entendu, sous Windows, il n'y a pas de bit d'exécution à - positionner, ce qui limite un peu vos choix.
- -Dans sa configuration par défaut, Apache n'envoie pas la date de - dernière modification ou les en-têtes HTTP relatifs à la taille des - contenus dans les pages SSI, car ses valeurs sont difficiles à - calculer pour les contenus dynamiques. Ceci peut induire une - impression de diminution des performances côté client, en empêchant - la mise en cache de votre document. Il existe deux méthodes pour - résoudre ce problème :
+La directive
+ +XBitHackindique + à httpd qu’il doit analyser tout fichier dont le bit d’exécution est + positionné. Ainsi, pour activer les SSI pour une page existante, il suffit + de rendre le fichier exécutable :+ +chmod +x pagename.html++ ++ Évitez de configurer httpd pour analyser tous les fichiers +
.htmlpour y trouver des directives SSI. Cela force en effet le + serveur à parcourir tous les fichiers HTML qu’il sert, même ceux qui n’ont + pas de contenu SSI, ce qui ajoute une surcharge de travail inutile. +Sous Windows, il n’y a pas de bit d’exécution ; l’approche avec la + directive
+ +XBitHackn’est donc + pas valable dans ce cas. Vous devrez alors utiliser l’approche par extension + de nom de fichier.Par défaut, httpd n’envoie pas la date de dernière modification ou les + en-têtes content-length sur les pages SSI, car ces valeurs sont difficiles à + calculer pour un contenu dynamique. Cela peut empêcher la mise en cache et + induire un ressenti de performances plus lentes. Deux approches peuvent + aider :
-
- Utilisez la configuration
- -XBitHack Full. Elle - indique à Apache de déterminer la date de dernière modification en - ne regardant que la date du fichier à l'origine de la requête, - tout en ignorant la date de modification de tout fichier inclus.- Utilisez les directives fournies par le module -
+mod_expirespour définir de manière explicite la - date d'expiration de vos fichiers, laissant par la-même - aux navigateurs et aux mandataires le soin de déterminer s'il est - opportun ou non de les mettre en cache.- Utilisez la directive
+ +XBitHack Fullqui indique à httpd + qu’il doit déterminer la date de dernière modification à partir du fichier + initialement demandé, tout en ignorant les dates de dernière modification + des fichiers inclus.- Utilisez le module
+mod_expirespour définir un moment + d’expiration explicite, indiquant ainsi aux navigateurs et aux mandataires + que le contenu peut être mis en cache.@@ -245,245 +212,180 @@ AddOutputFilter INCLUDES .shtmlDirectives SSI de base ¶
-Les directives SSI adoptent la syntaxe suivante :
-- -
- <!--#fonction attribut=valeur attribut=valeur ... --> -Le format d'une directive SSI étant similaire à celui d'un - commentaire HTML, si vous n'avez pas activé correctement SSI, le - navigateur l'ignorera, mais elle sera encore visible dans le source - HTML. Si SSI est correctement configuré, la directive sera remplacée - par ses résultats.
+Les directives SSI utilisent la syntaxe suivante :
+-<!--#function attribute=value attribute=value ... -->+"fonction" peut prendre de nombreuses formes, et nous décrirons - plus précisément la plupart d'entre eux dans la prochaine version de - ce document. Pour le moment, voici quelques exemples de ce que vous - pouvez faire avec SSI.
+Si les SSI sont correctement configurées, la directive sera remplacée par + sa sortie. Dans le cas contraire, elle demeurera en tant que commentaire + HTML — invisible à l’utilisateur final, mais présente dans le code source de + la page.
La date courante
-+
- <!--#echo var="DATE_LOCAL" --> --<!--#echo var="DATE_LOCAL" -->+La fonction
+echopermet d'afficher la valeur d'une - variable. Il existe un grand nombre de variables standards, y - compris l'ensemble des variables d'environnement disponibles pour - les programmes CGI. De plus, vous pouvez définir vos propres - variables à l'aide de la fonctionset.La fonction
-echoa pour sortie la valeur d’une variable. Les + variables standard incluent le jeu complet de variables d’environnement + disponibles pour les programmes CGI, ainsi que les variables que vous pouvez + définir avecset.Si vous n'aimez pas le format sous lequel la date s'affiche, vous - pouvez utiliser la fonction
+configavec un attribut -timefmt, pour le modifier.Pour personnaliser le format de la date, utilisez la fonction +
-configavec l’attributtimefmt:+
- <!--#config timefmt="%A %B %d, %Y" -->
- Today is <!--#echo var="DATE_LOCAL" --> -<!--#config timefmt="%A %B %d, %Y" -->+
+Today is <!--#echo var="DATE_LOCAL" -->Date de modification du fichier
-+
- Dernière modification du document <!--#flastmod file="index.html" --> -Dernière modification du document <!--#flastmod file="index.html" -->+Le format peut là aussi être modifié à l'aide de l'attribut
@@ -231,13 +200,11 @@ AddOutputFilter INCLUDES .shtmltimefmt.Inclusion des résultats d'un programme CGI
-C'est le cas le plus courant d'utilisation des SSI - afficher les - résultats d'un programme CGI, comme l'universellement adoré - "compteur d'accès".
+Les SSI permettent d’inclure directement la sortie d’un programme CGI + dans la page :
-+
- <!--#include virtual="/cgi-bin/counter.pl" --> -<!--#include virtual="/cgi-bin/counter.pl" -->+Exemples additionnels ¶
-Vous trouverez dans ce qui suit quelques exemples spécifiques de - ce que vous pouvez faire de vos documents HTML avec SSI.
+Vous trouverez dans les exemples pratiques suivants des cas d’utilisation + courants des SSI.
Quand ce document a-t-il été modifié ?
-Nous avons mentionné plus haut que vous pouviez utiliser SSI pour - informer l'utilisateur de la date de dernière modification du - document. Cependant, la méthode pour y parvenir n'a pas été vraiment - abordée. Placé dans votre document HTML, le code suivant va insérer - un repère de temps dans votre page. Bien entendu, SSI devra avoir - été correctement activé, comme décrit plus haut.
-+
- <!--#config timefmt="%A %B %d, %Y" -->
- Dernière modification du fichier <!--#flastmod file="ssi.shtml" --> -Une des utilisations courantes des SSI est l’affichage d’un horodatage + « date de dernière modification » sur chaque page. Le code suivant utilise + la variable
-LAST_MODIFIED; vous pouvez donc coller le même + extrait dans tout fichier sans modifier son nom :Bien entendu, vous devez remplacer
-ssi.shtmlpar le - nom du fichier auquel vous faites référence. Ceci ne conviendra pas - si vous recherchez un morceau de code générique que vous pourrez - insérer dans tout fichier ; dans ce cas, il est préférable - d'utiliser la variableLAST_MODIFIED:+
- <!--#config timefmt="%D" -->
- This file last modified <!--#echo var="LAST_MODIFIED" --> --<!--#config timefmt="%D" -->+
+Date de dernière modification de ce fichier <!--#echo var="LAST_MODIFIED" -->Pour plus de détails sur le format
+timefmt, tapez -strftimedans votre moteur de recherche préferé. La - syntaxe est identique.Pour des détails à propos des chaînes de formatage de +
timefmt, voir la documentation destrftimedans le + manuel de référence de la bibliothèque C de votre système.Inclusion d'un pied de page standard
-Si le site que vous gérez comporte plus que quelques pages, vous - allez vite vous apercevoir qu'effectuer des modifications sur toutes - ces pages peut devenir très contraignant, en particulier si vous - voulez qu'elles conservent un aspect homogène.
- -Inclure un fichier pour un en-tête et/ou un pied de page peut - simplifier cette corvée de mises à jour. Il vous suffit de - confectionner un fichier de pied de page, et de l'inclure dans - chaque page à l'aide de l'élément SSI
-include. Pour - définir le fichier à inclure, la fonctionincludepeut - utiliser soit l'attributfile, soit l'attribut -virtual. L'attributfileest un chemin de - fichier relatif au répertoire courant. C'est à dire qu'il - ne peut ni avoir pour valeur un chemin absolu (commençant par /), ni - comporter "../" dans son chemin. L'attributvirtualest - probablement plus commode, et peut spécifier une URL relative au - document servi. Elle peut commencer par un /, mais le fichier inclus - et le fichier servi doivent résider sur le même serveur.+
- <!--#include virtual="/footer.html" --> -Sur un site qui comporte plus que quelques pages, maintenir un + en-tête ou un pied de page cohérent sur toutes les pages peut s’avérer + fastidieux. Les SSI résolvent ce problème en permettant de stocker le + contenu partagé dans un seul fichier et d’inclure ce dernier n’importe + où :
+ ++ +<!--#include virtual="/footer.html" -->+La fonction
+ +includeaccepte deux attributs : +filequi spécifie un chemin relatif au répertoire actuel (il ne + peut pas spécifier un chemin absolu ou contenant../), et +virtualqui spécifie un URL relatif au document servi (et qui + peut commencer par/, mais doit être sur le même serveur).Les directives SSI au sein des fichiers inclus sont évaluées normalement + et les inclusions peuvent être imbriquées. Cela signifie que vous pouvez + placer un horodatage
-LAST_MODIFIEDdans votre fichier de pied + de page, et qu’il sera évalué dans le contexte de chaque page qui l’inclut.Je combinerai souvent ces deux derniers points, en ajoutant une - directive
LAST_MODIFIEDdans un fichier de pied de page - destiné à être inclus. Le fichier inclus peut contenir des - directives SSI, et les inclusions peuvent être imbriquées - à - savoir, le fichier inclus peut inclure un autre fichier, etc...-+Que puis-je configurer d'autre ? ¶
+Autres options de configuration ¶
-En plus du format de date, vous pouvez utiliser l'élément -
+configpour configurer deux autres choses.En plus de
-timefmt, la fonctionconfigaccepte + deux autres attributs.En général, lorsque quelque chose se passe mal avec votre - directive SSI, vous recevez le message :
+L’attribut
errmsgmodifie le message d’erreur affiché + lorsqu’une directive SSI échoue. Le message par défaut est :-
- [an error occurred while processing this directive] +[an error occurred while processing this directive]Pour modifier ce message, vous pouvez utiliser l'attribut -
-errmsgavec la fonctionconfig:+
- <!--#config errmsg="[Il semblerait que vous ne sachiez pas - utiliser les SSI]" --> -Vous pouvez le remplacer par un contenu plus adapté à votre site :
+-<!--#config errmsg="[Content unavailable]" -->+Il est cependant probable que les utilisateurs finaux ne voient - jamais ce message, car vous aurez résolu tous les problèmes issus de - vos directives SSI avant que votre site ne soit mis en production. - (N'est-ce pas ?)
- -Vous pouvez aussi modifier le format sous lequel les tailles de - fichiers sont affichées à l'aide de l'attribut
-sizefmt. - Vous pouvez spécifierbytespour un affichage en - octets, ouabbrevpour un affichage plus concis en Ko - ou Mo, selon le cas.L’attribut
+sizefmtcontrôle la manière dont les tailles de + fichier sont spécifiées :bytespour un décompte en octets ou +abbrevpour une forme abrégée en Ko ou Mo.+Exécution de commandes ¶
-Voici autre chose que vous pouvez faire avec la fonction -
-exec. Vous pouvez vraiment faire exécuter une commande - par SSI en utilisant le shell (/bin/sh, pour être plus - précis - ou le shell DOS, si vous êtes sous Win32). Par exemple, ce - qui suit vous permet d'afficher le contenu d'un répertoire.- -
- <pre>
- <!--#exec cmd="ls" -->
- </pre> -ou, sous Windows
-+
- <pre>
- <!--#exec cmd="dir" -->
- </pre> -La fonction
-execpermet d’exécuter une commande du shell et + d’inclure sa sortie dans la page. Sur les systèmes de style Unix, la + commande est exécutée via/bin/sh, et sous Windows via + l’interpréteur de commande.Vous noterez probablement l'étrange formatage provoqué par cette - directive sous Windows, car la sortie de
- -dircontient - la chaîne de caractères "<dir>", ce qui trompe le - navigateur.Notez que cette fonctionnalité est très dangereuse, car elle va - permettre d'exécuter tout code associé à l'élément -
-exec. Si vous êtes dans la situation où les - utilisateurs peuvent éditer le contenu de vos pages web, dans le cas - d'un "livre d'or" par exemple, assurez-vous de désactiver cette - fonctionnalité. Vous pouvez, tout en permettant les SSI, désactiver - la fonctionnalitéexecà l'aide de l'argument -IncludesNOEXECde la directive -Options.+<pre> +<!--#exec cmd="ls" --> +</pre>+++ La fonctionnalité
execconstitue un risque de sécurité + significatif. En effet, elle exécute des commandes arbitraires avec les + privilèges du processus du serveur web. Si les utilisateurs peuvent éditer + du contenu sur votre site, assurez-vous que cette fonctionnalité soit + désactivée en spécifiantIncludesNOEXECau lieu de +Includesdans la définition de la directiveOptions. +Techniques SSI avancées ¶
-Outre l'affichage de contenu, les SSI d'Apache vous permettent de - définir des variables, et de les utiliser dans des comparaisons et - des conditions.
+Au-delà de la simple inclusion de contenu, les SSI prennent en charge les + variables et les expressions conditionnelles, rendant possible la génération + de contenus différents en fonction du contexte de la requête.
Définition de variables
-Avec l'élément
-set, vous pouvez définir des - variables pour un usage ultérieur. Comme nous en aurons besoin plus - loin, nous allons en parler tout de suite. La syntaxe se présente - comme suit :+
- <!--#set var="name" value="Rich" --> -La directive
-setpermet de définir des variables à utiliser + plus tard dans la page :Pour affecter une valeur à vos variables, en plus de la - définition littérale de l'exemple ci-dessus, vous pouvez utiliser - une autre variable, y compris les variables d'environnement, ou les variables - décrites plus haut (comme
+LAST_MODIFIEDpar exemple). - Pour indiquer qu'il s'agit d'une variable et non d'une chaîne, vous - devez utiliser le symbole dollar ($) devant le nom de la - variable.-<!--#set var="name" value="Rich" -->++
<!--#set var="modified" value="$LAST_MODIFIED" --> -Les variables peuvent référencer d’autres variables (y compris des variables d’environnement) en utilisant le signe dollar + (
-$) comme préfixe :Pour insérer un caractère $ dans la valeur de votre variable, - vous devez l'échapper à l'aide d'un backslash.
-+
- <!--#set var="cost" value="\$100" --> --<!--#set var="modified" value="$LAST_MODIFIED" -->+Enfin, si vous voulez insérer une variable dans une chaîne, et - s'il y a une chance pour que le nom de la variable se confonde avec - le reste de la chaîne, vous pouvez l'entourer d'accolades pour - eviter toute confusion (Il est difficile de trouver un bon exemple - pour illustrer ceci, mais j'espère que vous comprendrez).
-+
- <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> -Pour inclure un signe dollar littéral, protégez-le avec une + contre-oblique :
+ ++ +<!--#set var="cost" value="\$100" -->+Lorsqu'un nom de variable risque d'être ambigu au sein d'une chaîne plus + longue, utilisez des accolades pour le délimiter :
+ +<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->+Expressions conditionnelles
-Maintenent que nous avons des variables, et que nous pouvons - définir et comparer leurs valeurs, nous sommes à même de les - utiliser dans des expressions conditionnelles. Ceci confère à SSI le - statut de petit langage de programmation. -
+mod_includefournit une structureif, -elif,else,endifpour la - construction d'expressions conditionnelles, ce qui vous permet de - générer plusieurs pages logiques à partir d'une seule vraie - page.-
mod_includefournit les élémentsif, +elif,elseetendifpermettant de + construire une logique conditionnelle. Cette fonctionnalité permet de + générer des sorties différentes à partir d’une seule page physique.La structure de l'expression conditionnelle est :
-+
- <!--#if expr="condition" -->
- <!--#elif expr="condition" -->
- <!--#else -->
- <!--#endif --> -La structure est :
-Une condition peut revêtir la forme de toute comparaison - logique - soit une comparaison de valeurs avec une autre, soit une - vérification de la "vérité" d'une valeur particulière (Une chaîne - donnée est vraie si elle n'est pas vide). Pour une liste exhaustive - des opérateurs de comparaison disponibles, voir la documentation du - module
+mod_include.-<!--#if expr="test_condition" -->+
+<!--#elif expr="test_condition" -->
+<!--#else -->
+<!--#endif -->Par exemple, spour insérer l'heure du jour dans votre page web, - vous pouvez ajouter ces lignes dans la page HTML :
+Une test_condition peut comparer des valeurs ou vérifier si une + variable n’est pas vide. Voir la documentation de +
-mod_includepour la liste complète des opérateurs de + comparaison.- -
- Good - <!--#if expr="%{TIME_HOUR} <12" -->
- morning!
- <!--#else -->
- afternoon!
- <!--#endif -->
-Toute autre variable (que vous avez définie, ou une variable - d'environnement normale) peut être utilisée dans les expressions - conditionnelles. Voir le document Expressions - rationnelles dans le serveur HTTP Apache pour plus de détails à - propos du fonctionnement du moteur d'évaluation des expressions - rationnelles.
- -Associée à la possibilité avec Apache de définir - des variables d'environnement à l'aide de directives -
+SetEnvIf, ainsi que d'autres directives en rapport, - cette fonctionnalité vous permet d'ajouter une grande variété - de contenus dynamiques côté serveur sans avoir à concevoir une - application web de A à Z.Par exemple, pour afficher des salutations différentes en fonction de + l’heure du jour :
+ ++ +Good +<!--#if expr="%{TIME_HOUR} <12" -->+
+morning!
+<!--#else -->
+afternoon!
+<!--#endif -->
+Toute variable — définie par l’utilisateur ou issue de l’environnement + — peut être utilisée dans les expressions conditionnelles. Voir Les expressions dans le Serveur HTTP Apache pour des + détails complets à propos du moteur d’évaluation des expressions.
+ +Combinées avec la capacité de httpd à définir des variables + d’environnement en utilisant
SetEnvIfet les directives apparentées, + les SSI conditionnelles peuvent traiter une grande variété de scénarios de + contenu dynamique sans nécessiter de cadriciel complet d’applications.Conclusion ¶
-SSI ne remplace certainement pas CGI, ou d'autres technologies - utilisées pour la génération de pages web dynamiques. Mais c'est une - bonne méthode pour ajouter des petits contenus dynamiques à vos - pages, sans devoir fournir un gros effort supplémentaire.
+Pour les sites principalement statiques mais nécessitant quelques touches + dynamiques, les SSI évitent la surcharge de travail induite par la + configuration d’une pile complète d’applications. Elles ne requièrent que +
mod_includeet quelques lignes de configuration pour + fonctionner.-Langues Disponibles: en | diff --git a/docs/manual/images/README.md b/docs/manual/images/README.md new file mode 100644 index 00000000..198b1a6c --- /dev/null +++ b/docs/manual/images/README.md @@ -0,0 +1,97 @@ +# SVG Diagram Style Guide + +This documents the style conventions used for flowchart/diagram SVGs +in this directory, so that new diagrams are visually consistent. + +## Fonts + +- **Primary:** Arial, Helvetica, sans-serif +- **Title:** 12px, bold +- **Phase/section labels:** 11px, bold, fill `#444` +- **Body text:** 10px, fill `#333` +- **Edge labels (Yes/No):** 9px, fill `#555` +- **Annotations/italic notes:** 8px, fill `#666`, italic + +## Colors + +| Element | Fill | Stroke | Notes | +|---------|------|--------|-------| +| Process box (action) | `#e8e8e8` | `#333` | `rx:4 ry:4` rounded corners | +| Decision diamond | `#fff8dc` (cornsilk) | `#333` | | +| Terminal (start/done) | `#d4edda` (light green) | `#333` | `rx:12 ry:12` pill shape | +| Redirect / error | `#f8d7da` (light red) | `#333` or `#b33` | `rx:12 ry:12` pill shape | +| Phase box (grouping) | `#fafafa` | `#888` | `rx:8 ry:8`, contains related steps | +| Warning box | `#f8d7da` | `#b33` | `rx:4 ry:4`, stroke-width 1.5 | +| Lines/arrows | — | `#333` | stroke-width 1.2 | +| Dashed lines (loops) | — | `#333` | stroke-dasharray: 5,4 | + +## Arrowhead Marker + +```xml +
+ +``` + +## SVG Boilerplate + +```xml + + +``` + +## Generating PNGs from SVGs + +Use `rsvg-convert` (from `librsvg`): + +```bash +# Install (macOS): +brew install librsvg + +# Install (Fedora/RHEL/CentOS): +dnf install librsvg2-tools + +# Install (Debian/Ubuntu): +apt-get install librsvg2-bin + +# Convert at 1x (matching SVG viewBox dimensions): +rsvg-convert -o rewrite_l_flag_looping.png rewrite_l_flag_looping.svg + +# Or specify explicit dimensions: +rsvg-convert -w 520 -h 720 -o rewrite_l_flag_looping.png rewrite_l_flag_looping.svg +``` + +Existing PNGs in this directory are at 1x scale (matching their SVG +viewBox width/height). Keep PNGs at 1x for consistency with the rest +of the documentation build. + +## General Conventions + +- Diamonds for decisions, rounded rectangles for actions, pill shapes + for start/end terminals. +- Yes/No labels on decision branches (9px, gray). +- Phase boxes group related steps that occur in the same processing context. +- Dashed lines indicate loop-back paths or optional flows. +- Titles centered at the top of the SVG. +- Typical viewBox widths: 440–650px. Heights: 360–750px. diff --git a/docs/manual/images/rewrite_l_flag_looping.png b/docs/manual/images/rewrite_l_flag_looping.png new file mode 100644 index 00000000..47aabf8b Binary files /dev/null and b/docs/manual/images/rewrite_l_flag_looping.png differ diff --git a/docs/manual/images/rewrite_l_flag_looping.svg b/docs/manual/images/rewrite_l_flag_looping.svg new file mode 100644 index 00000000..bee5740c --- /dev/null +++ b/docs/manual/images/rewrite_l_flag_looping.svg @@ -0,0 +1,153 @@ + + diff --git a/docs/manual/images/rewrite_module_order.png b/docs/manual/images/rewrite_module_order.png new file mode 100644 index 00000000..fdde07dd Binary files /dev/null and b/docs/manual/images/rewrite_module_order.png differ diff --git a/docs/manual/images/rewrite_module_order.svg b/docs/manual/images/rewrite_module_order.svg new file mode 100644 index 00000000..bca2266c --- /dev/null +++ b/docs/manual/images/rewrite_module_order.svg @@ -0,0 +1,110 @@ + + diff --git a/docs/manual/images/rewrite_path_stripping.png b/docs/manual/images/rewrite_path_stripping.png new file mode 100644 index 00000000..cfc901b0 Binary files /dev/null and b/docs/manual/images/rewrite_path_stripping.png differ diff --git a/docs/manual/images/rewrite_path_stripping.svg b/docs/manual/images/rewrite_path_stripping.svg new file mode 100644 index 00000000..12d40924 --- /dev/null +++ b/docs/manual/images/rewrite_path_stripping.svg @@ -0,0 +1,142 @@ + + diff --git a/docs/manual/images/rewrite_simplified_overview.png b/docs/manual/images/rewrite_simplified_overview.png new file mode 100644 index 00000000..14bc1da7 Binary files /dev/null and b/docs/manual/images/rewrite_simplified_overview.png differ diff --git a/docs/manual/images/rewrite_simplified_overview.svg b/docs/manual/images/rewrite_simplified_overview.svg new file mode 100644 index 00000000..e960038c --- /dev/null +++ b/docs/manual/images/rewrite_simplified_overview.svg @@ -0,0 +1,113 @@ + + diff --git a/docs/manual/install.html.en b/docs/manual/install.html.en index bdf5d2b2..5526bc01 100644 --- a/docs/manual/install.html.en +++ b/docs/manual/install.html.en @@ -34,15 +34,16 @@+ This document covers compilation and installation of the Apache HTTP Server - on Unix and Unix-like systems only. For compiling and - installation on Windows, see Using Apache HTTP Server with Microsoft - Windows and Compiling Apache for Microsoft Windows. - For other platforms, see the platform documentation.
+The Apache HTTP Server is released as source code. This document + covers building and installing the server from source on Unix and + Unix-like systems. For Windows, see Using Apache HTTP Server with Microsoft + Windows and Compiling Apache httpd for Microsoft + Windows. For other platforms, see the platform documentation.
-Apache httpd uses
+libtoolandautoconf- to create a build environment that looks like many other Open Source - projects.If you install httpd from a distribution package (RPM, DEB, etc.), + configuration layout and defaults may differ from what is described here. + See third-party packages below, and consult your + distribution's documentation for platform-specific details.
If you are upgrading from one minor version to the next (for example, 2.4.66 to 2.4.67), please skip down to the upgrading section.
@@ -66,45 +67,6 @@Overview for the impatient ¶
-
sudo dnf install httpd - -# Start service -sudo systemctl start httpd - -# Stop service -sudo systemctl stop httpd - -# Restart service -sudo systemctl restart httpd- - -
sudo apt install apache2 - -# Start service -sudo systemctl start apache2 - -# Stop service -sudo systemctl stop apache2 - -# Restart service -sudo systemctl restart apache2- - -
| Téléchargement | -Téléchargez la dernière version depuis http://httpd.apache.org/download.cgi - | +Téléchargez la dernière version depuis https://httpd.apache.org/download.cgi + | |||||||||||||||||
| Extraction | -$ gzip -d httpd-NN.tar.gz |
+ $ tar xzf httpd-NN.tar.gz +$ cd httpd-NN+ |
|||||||||||||||||
| Related Modules | Related Directives |
|---|---|
| Related Modules | Related Directives |
|---|---|
The LogMessage
+ lets you create your own custom log messages to aid in debugging.
+
Available Languages: en | diff --git a/docs/manual/logs.html.fr.utf8 b/docs/manual/logs.html.fr.utf8 index 04356962..b1e0e809 100644 --- a/docs/manual/logs.html.fr.utf8 +++ b/docs/manual/logs.html.fr.utf8 @@ -83,7 +83,7 @@ certainement avoir accès à l'uid sous lequel le serveur est démarré, en l'occurrence habituellement root. N'accordez PAS aux utilisateurs l'accès en écriture au répertoire dans lequel les journaux sont stockés - sans savoir exactement quelles en seraient les conséquences ; voir le + sans savoir exactement quelles en seraient les conséquences ; voir le document conseils sur la sécurité pour plus de détails.
@@ -180,8 +180,8 @@Pour ce faire, vous devez spécifier le nom du module dans votre
directive LogLevel :
LogLevel info rewrite:trace5- +
LogLevel info rewrite:trace5+
Dans cet exemple, le niveau de journalisation général est défini
à info, et à trace5 pour mod_rewrite.
Différentes versions du démon Apache httpd utilisaient d'autres modules et directives pour contrôler la journalisation des accès, à l'instar de @@ -232,9 +233,9 @@
Voici une configuration typique pour le journal des accès :
-LogFormat "%h %l %u %t \"%r\" %>s %b" common -CustomLog logs/access_log common- +
LogFormat "%h %l %u %t \"%r\" %>s %b" common +CustomLog "logs/access_log" common+
Ici est définie l'identité common qui est
ensuite associée à une chaîne de format de journalisation particulière.
@@ -357,13 +358,14 @@ CustomLog logs/access_log common
200 (%>s)2326 (%b)LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
-CustomLog log/access_log combined
-
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
+CustomLog "log/access_log" combined
+Ce format est identique au Common Log Format, avec deux champs
supplémentaires. Chacun de ces deux champs utilise la directive
@@ -433,11 +435,11 @@ CustomLog log/access_log combined
comment simuler les effets des directives ReferLog et
AgentLog.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
-CustomLog logs/access_log common
-CustomLog logs/referer_log "%{Referer}i -> %U"
-CustomLog logs/agent_log "%{User-agent}i"
-
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+CustomLog "logs/access_log" common
+CustomLog "logs/referer_log" "%{Referer}i -> %U"
+CustomLog "logs/agent_log" "%{User-agent}i"
+Cet exemple montre aussi qu'il n'est pas obligatoire d'associer une chaîne de format à un alias au moyen de la directive @@ -462,31 +464,31 @@ CustomLog logs/agent_log "%{User-agent}i" la variable d'environnement est définie. Quelques exemples :
-# Marque les requêtes en provenance de l'interface loop-back +# Marque les requêtes en provenance de l'interface loop-back SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog # Marque les requêtes pour le fichier robots.txt SetEnvIf Request_URI "^/robots\.txt$" dontlog # Journalise toutes les autres requêtes -CustomLog logs/access_log common env=!dontlog- +CustomLog "logs/access_log" common env=!dontlog +Autre exemple, imaginons l'enregistrement des requêtes en provenance d'utilisateurs de langue anglaise dans un journal, et celles des autres utilisateurs dans un autre journal.
-SetEnvIf Accept-Language "en" english - CustomLog logs/english_log common env=english - CustomLog logs/non_english_log common env=!english- +SetEnvIf Accept-Language "en" english +CustomLog "logs/english_log" common env=english +CustomLog "logs/non_english_log" common env=!english+Dans le contexte d'une mise en cache, il peut être intéressant de connaître l'efficacité du cache. Pour y parvenir, on pourrait utiliser cette méthode simple :
-SetEnv CACHE_MISS 1 +valeurs de journalisation conditionnelles basées sur le code de la réponse HTTP : -SetEnv CACHE_MISS 1 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache -CustomLog logs/access_log common-cache- +CustomLog "logs/access_log" common-cache +
mod_cacheva s'exécuter avantmod_env, et si son action est couronnée de @@ -499,9 +501,9 @@ CustomLog logs/access_log common-cacheLogFormat "%400,501{User-agent}i" browserlog +LogFormat "%400,501{User-agent}i" browserlog LogFormat "%!200,304,302{Referer}i" refererlog- +Dans le premier exemple, le
User-agentsera enregistré si le code d'état HTTP est 400 ou 501. Dans le cas @@ -523,106 +525,105 @@ LogFormat "%!200,304,302{Referer}i" refererlogRotation des journaux ¶
-Même dans le cas d'un serveur modérément sollicité, la quantité - d'informations stockées dans les fichiers journaux est très importante. - Le fichier journal des accès grossit en général d'1 Mo ou plus toutes - les 10000 requêtes. Il est par conséquent nécessaire d'effectuer - périodiquement la rotation des journaux en déplaçant ou supprimant les - fichiers correspondants. On ne peut pas le faire pendant que le serveur - est en cours d'exécution, car Apache httpd va continuer à écrire dans l'ancien - fichier journal aussi longtemps qu'il le maintiendra ouvert. - C'est pourquoi le serveur doit être - redémarré après le déplacement ou la - suppression des fichiers journaux de façon à ce qu'il en ouvre - de nouveaux.
- -Avec un redémarrage graceful, on peut faire en sorte que le - serveur ouvre de nouveaux fichiers journaux sans perdre de connexions - existantes ou en cours avec les clients. Cependant, pour que ceci soit - possible, le serveur doit continuer à écrire dans les anciens fichiers - journaux pendant qu'il termine le traitement des requêtes en cours. - Il est donc nécessaire d'attendre un certain temps après le rédémarrage - avant d'effectuer tout traitement sur les fichiers journaux. Voici un - scénario typique dans lequel on effectue une simple rotation des - journaux en compressant les anciens fichiers correspondants afin - de gagner de l'espace disque :
+Même sur un serveur modérément sollicité, les fichiers journaux + grossissent rapidement — le journal des accès croît à peu près de 1 Mo ou + plus toutes les 10000 requêtes. Sans rotation, les journaux consomment de + plus en plus d’espace disque et deviennent difficiles à analyser. Il est + donc recommandé de configurer une rotation automatique des journaux dès le + départ.
-+
- mv access_log access_log.old
- mv error_log error_log.old
- apachectl graceful
- sleep 600
- gzip access_log.old error_log.old -Utilisation de rotatelogs (recommandé)
+ + +L’approche la plus simple consiste à utiliser le programme +
+ +rotatelogsintégré à httpd en utilisant la redirection des journaux. Ce programme permet une + rotation des journaux sans avoir à redémarrer le serveur et sans outil + externe. Pour une rotation des journaux toutes les 24 heures :+ +CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined +ErrorLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/error_log 86400"+Pour une rotation lorsque la taille du journal atteint une certaine + valeur (par exemple 100 Mo) :
+ +-CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 100M" combined+La section suivante présente une autre méthode de rotation des journaux - qui consiste à utiliser les - journaux redirigés.
+Vous pouvez aussi utiliser un motif de nom de fichier avec horodatage + sous forme d’une chaîne au format
+ +strftime:+ +CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log.%Y-%m-%d 86400" combined+Voir
+ + +rotatelogspour une description complète de ses + options, en particulier les temps de décalage, les limitations de nombre de + fichiers et la compression.Utilisation de logrotate ou de la gestion des journaux par le + système
+ + +La plupart des distributions de Linux fournissent le programme +
+ +logrotatequi effectue une rotation, une compression et une + expiration des fichiers journaux selon une planification. Si votre + distribution comporte déjà une configuration de logrotate pour httpd + (examinez/etc/logrotate.d/), elle gère peut-être déjà la + rotation pour vous.Lorsqu’on utilise un outil de rotation externe comme +
+ +logrotate, il faut faire en sorte que httpd réouvre ses + fichiers journaux quand les anciens ont été mis de côté. Pour ce faire, + l’approche standard est un redémarrage graceful :+ +/usr/sbin/apachectl graceful+Votre script
+ +postrotatedans la configuration de logrotate + doit contenir cette dernière commande (ou la commande équivalente +systemctl reload). Comme httpd continue d’écrire dans + l’ancien fichier jusqu’à ce qu’il reçoive le signal, tout post-traitement + des fichiers ayant subi une rotation doit prévoir un bref délai.
Nous avons vu que le démon httpd écrivait les informations de
- journalisation des erreurs et des accès dans un fichier journal ;
- il peut aussi
- rediriger ces informations vers un autre processus par l'intermédiaire d'un
- tube de communication (pipe). Cette fonctionnalité améliore
- considérablement la souplesse de la journalisation, sans ajouter de code
- au serveur principal. Pour rediriger les informations de journalisation
- vers un tube de communication, remplacez simplement le nom de fichier
- journal par
- le caractère pipe "|", suivi du nom de l'exécutable qui va
- recueillir les entrées de journal sur son entrée
- standard. Le serveur va
- lancer le processus de redirection des journaux au moment du démarrage du
- serveur, et le relancera s'il cesse de fonctionner
- pendant l'exécution du serveur.
- (Nous dénommons cette technique "journalisation
- redirigée fiable" grâce à cette dernière fonctionnalité.)
Les processus de journalisation redirigée sont lancés par le processus - httpd parent, et héritent de l'UID de ce dernier. Cela signifie que les - programmes de journalisation dirigée s'exécutent généralement en tant que - root. Il est donc très important que ces programmes soient simples et - sécurisés.
- -Un des grands avantages de la journalisation redirigée est la possibilité
- d'effectuer la rotation des journaux sans avoir à redémarrer le serveur. Pour
- accomplir cette tâche, le serveur HTTP Apache fournit un programme simple
- appelé rotatelogs. Par exemple, pour une rotation des
- journaux toutes les 24 heures, ajoutez ces lignes :
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common- - -
Notez que l'ensemble de la commande qui sera appelée par le tube de - communication a été placée entre guillemets. Bien que cet exemple - concerne le journal des accès, la même technique peut être utilisée - pour le journal des erreurs.
- -Comme la journalisation conditionnelle, la journalisation redirigée est - un outil très puissant, mais si elle existe, il est préférable d'utiliser - une solution plus simple comme le traitement à posteriori hors ligne.
- - -Par défaut, le processus de redirection du journal est lancé sans
- invoquer un shell. Pour invoquer un shell, utilisez "|$"
- au lieu de "|" (en général avec /bin/sh -c)
- :
# Invocation de "rotatelogs" en utilisant un shell -CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common- - - -
Il s'agissait du comportement par défaut sous Apache 2.2. Selon
- les spécificités du shell, ceci peut générer un processus shell
- supplémentaire pour toute la durée du programme de redirection du
- journal, et induire des problèmes de gestion de signaux au cours du
- redémarrage. La notation "||" est aussi supportée pour
- des raisons de compatibilité avec Apache 2.2 et est équivalente à
- "|".
httpd peut écrire dans les fichiers journaux des erreurs et des accès à
+ travers un tube (pipe) vers un autre processus, plutôt que d’écrire
+ directement dans un fichier. Pour mettre en œuvre cette redirection,
+ remplacez le nom du fichier par le caractère pipe "|", suivi de
+ la commande qui recevra les entrées du journal sur son entrée standard :
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined+
httpd démarre le processus de redirection des journaux au démarrage du
+ serveur et le redémarre automatiquement s’il se plante (ce comportement est
+ parfois nommé « journalisation redirigée fiable »). L’ensemble de la
+ commande à partir du caractère pipe doit être entourée de guillemets — cette
+ syntaxe fonctionne pour les deux directives CustomLog et ErrorLog.
Les processus de redirection des journaux sont lancés par le processus + httpd parent et héritent de son identifiant utilisateur. Cela signifie en + général qu’ils s’exécutent en tant que root ; faites donc en sorte que les + programmes de redirection des journaux restent simples et sécurisés.
+ +Par défaut, le processus de redirection des journaux est lancé
+ directement, sans passer par un shell. Vous pouvez utiliser
+ "|$" à la place de "|" pour effectuer ce lancement
+ via un shell (en général /bin/sh -c) :
CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/httpd/access_log 86400" combined+
La variante avec shell est parfois requise si votre commande redirigée + utilise des fonctionnalités du shell comme les caractères génériques ou le + développement de variable. Dans la plupart des cas, il est préférable + d’utiliser l’invocation directe (sans passer par un shell).
Notez que sous Windows, la mémoire allouée au bureau (desktop @@ -670,9 +671,9 @@ CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" commo journal, puis de séparer ultérieurement le journal en plusieurs journaux individuels. Considérons par exemple les directives suivantes :
-LogFormat "%v %p %h %l %u %t \"%r\" %>s %b" commonvhost -CustomLog logs/access_log commonvhost- +
LogFormat "%v %p %h %l %u %t \"%r\" %>s %b" commonvhost +CustomLog "logs/access_log" commonvhost+
Le champ %v sert à enregistrer le nom de l'hôte virtuel qui
traite la requête. Un programme tel que split-logfile peut ensuite être utilisé
@@ -682,7 +683,7 @@ CustomLog logs/access_log commonvhost
| Modules Apparentés | Directives Apparentées |
|---|---|
| Modules Apparentés | Directives Apparentées |
|---|---|
La directive LogMessage
+ vous permet de créer vos propres messages de journalisation
+ personnalisés pour faciliter vos opérations de débogage.
+
This page documents all the relevant standards that the - Apache HTTP Server follows, along with brief descriptions.
+This page documents the relevant standards that the + Apache HTTP Server implements or follows, along with brief + descriptions.
In addition to the information listed below, the following resources should be consulted:
This document is not yet complete.
-
HTTP Recommendations
HTML RecommendationsRegardless of what modules are compiled and used, Apache as a - basic web server complies with the following IETF recommendations:
+ basic web server complies with the following IETF standards:The following standards apply when mod_ssl is
+ enabled:
SSLStaplingCache).Regarding the Hypertext Markup Language, Apache complies with - the following IETF and W3C recommendations:
+Concerning the different methods of authentication:
mod_brotli.When mod_proxy is enabled:
Concerning the different methods of authentication, Apache - follows the following IETF recommendations:
+mod_proxy_wstunnel.When mod_dav is enabled:
The following links document ISO and other language and country - code information:
+Language and country codes used in content negotiation:
Cette page documente tous les standards applicables que suit le - serveur HTTP Apache, accompagnés d'une brève description.
+Cette page documente les standards applicables que le serveur HTTP Apache + implémente ou suit, avec une brève description.
Pour compléter les informations fournies ci-dessous, vous pouvez consulter les ressources suivantes :
Ce document n'est pas encore finalisé.
-
Recommandations HTTP
Recommandations HTML
AuthentificationSans tenir compte des modules compilés et utilisés, Apache en - tant que serveur web de base respecte les recommandations IETF + tant que serveur web de base respecte les normes IETF suivantes :
Les normes suivantes s’appliquent lorsque mod_ssl est
+ activé :
SSLStaplingCache).À propos des différentes méthodes d’authentification :
+ +mod_brotli.Quand mod_proxy est activé :
mod_proxy_wstunnel.En ce qui concerne le langage HTML, Apache respecte les - recommandations IETF et W3C suivantes :
+mod_cgi et mod_cgid.En ce qui concerne les différentes méthodes d'authentification, - Apache respecte les recommandations IETF suivantes :
+Quand mod_dav est activé :
Les liens suivants fournissent des informations à propos des - codes de langages et de pays aux normes ISO ou autres :
+Les codes de langages et de pays utilisés dans la négociation de contenu + :
ÀÌ ¹®¼¿¡´Â °£´ÜÇÑ ¼³¸í°ú ÇԲ² ¾ÆÆÄġ À¥¼¹ö°¡ µû¸£´Â ¸ðµç °ü·Ã ǥÁØÀ» ¿°ÅÇѴÙ.
diff --git a/docs/manual/misc/security_tips.html.en b/docs/manual/misc/security_tips.html.en index e5c6771f..e3f451e8 100644 --- a/docs/manual/misc/security_tips.html.en +++ b/docs/manual/misc/security_tips.html.en @@ -91,8 +91,10 @@RequestReadTimeout
- directive allows to limit the time a client may take to send the
- request.handshake stage times out clients that stall during the
+ TLS handshake.
TimeOut directive
should be lowered on sites that are subject to DoS attacks.
diff --git a/docs/manual/misc/security_tips.html.fr.utf8 b/docs/manual/misc/security_tips.html.fr.utf8
index 141c1d05..9b411cbe 100644
--- a/docs/manual/misc/security_tips.html.fr.utf8
+++ b/docs/manual/misc/security_tips.html.fr.utf8
@@ -98,7 +98,9 @@
RequestReadTimeout permet de
- limiter le temps que met le client pour envoyer sa requête.handshake met
+ hors délai les clients qui se figent lors de la négociation TLS.TimeOut doit être diminuée sur les
diff --git a/docs/manual/mod/core.html.fr.utf8 b/docs/manual/mod/core.html.fr.utf8
index e707c028..aadf35ce 100644
--- a/docs/manual/mod/core.html.fr.utf8
+++ b/docs/manual/mod/core.html.fr.utf8
@@ -33,8 +33,6 @@
ja |
tr
-| Description: | Fonctionnalités de base du serveur HTTP Apache toujours disponibles |
|---|---|
| Statut: | Noyau httpd |
Options.
- Bien que la liste des options disponibles dans les fichiers
- .htaccess puisse être limitée par cette directive, tant qu'un
- directive Options est
- autorisée, toute autre option héritée peut être désactivée en
- utilisant la syntaxe non-relative. En d'autres termes, ce
- mécanisme ne peut pas forcer une option spécifique à rester
- activée tout en permettant à toute autre option d'être
- activée.
-
Cette restriction ne contrôle que les options qu’un fichier
+ .htaccess peut activer. Elle n’empêche pas la
+ désactivation des options héritées.
Lorsqu’une directive Options dans
+ un fichier .htaccess utilise une syntaxe absolue (sans
+ préfixe + ou -), elle remplace la
+ totalité du jeu d’options héritées. Toute option auparavant active qui
+ n’est pas listée est implicitement désactivée—il en est de même pour
+ les options qui ne sont pas dans la liste AllowOverride des
+ options permises.
Par exemple, si la configuration définit :
+Options Indexes FollowSymLinks ExecCGI +AllowOverride Options=Indexes+ +
et si un fichier .htaccess contient :
Options Indexes+ +
les options FollowSymLinks et ExecCGI seront
+ implicitement désactivée pour le répertoire concerné, même si la ligne
+ AllowOverride ne fait que permettre la définition de l’option
+ Indexes.
En bref, ce mécanisme ne peut pas forcer une option spécifique à rester + définie tout en permettant la définition de toutes les autres.
+AllowOverride Options=Indexes,MultiViewsdiff --git a/docs/manual/mod/directive-dict.html.fr.utf8 b/docs/manual/mod/directive-dict.html.fr.utf8 index 0c6b9716..c2b236c5 100644 --- a/docs/manual/mod/directive-dict.html.fr.utf8 +++ b/docs/manual/mod/directive-dict.html.fr.utf8 @@ -30,8 +30,6 @@ ko | tr -
Ce document décrit les termes utilisés pour décrire chaque directive de configuration d'Apache.
@@ -39,7 +37,7 @@
Syntaxe
Défaut
Contexte
Surcharge/Écrasement
Surcharge .htaccess
Statut
Module
Compatibilité/chemin/vers/fichier.html. Le
- chemin-URL représente la ressource vue du web, et est
- différente de la représentation de cette même ressource vue du
- système de fichiers./path/to/file.html. chemin-URL représente la
+ ressource vue depuis le web, et est différente de la représentation de
+ cette même ressource vue depuis le système de fichiers.Les lieux de définition valides pour une directive résultent en
fait d'un
OU logique de tous les contextes spécifiés. En d'autres termes, une
- directive spécifiée comme valide dans "configuration globale,
+ directive spécifiée comme valide dans "configuration globale,
.htaccess" peut être utilisée dans le fichier
httpd.conf et dans les fichiers .htaccess,
mais pas dans un conteneur <Directory> ou <VirtualHost>.
Ce terme indique quelle autorisation de surcharge ("override") doit être +
Ce terme indique quelle autorisation de surcharge doit être
active pour que la directive puisse être traitée lorsqu'elle
apparaît dans un fichier .htaccess. Si le context de la directive ne lui permet pas
d'apparaître dans un fichier .htaccess, aucun contexte
@@ -264,7 +263,7 @@
--with-mpm=event to the configure
script's arguments when building the httpd.
+
+ When built as a DSO module, it can be loaded with:
+ +LoadModule mpm_event_module modules/mod_mpm_event.so+ +
configure lorsque vous compilez le programme
httpd.
+ Lorsque ce module est construit en tant que module DSO, il peut être +chargé à l’aide de la commande :
+ +LoadModule mpm_event_module modules/mod_mpm_event.so+ +
workerCe module MPM tente de résoudre le "problème keep
alive" de HTTP. Lorsqu'un client a effectué une première requête, il peut
- garder la connexion ouverte et envoyer les requêtes suivante en utilisant le
+ garder la connexion ouverte et envoyer les requêtes suivantes en utilisant le
même socket, ce qui diminue considérablement la charge qui aurait été
induite par la création de nouvelles connexions TCP. Cependant, le
fonctionnement du serveur HTTP Apache impose de réserver un couple processus
diff --git a/docs/manual/mod/mod_access_compat.html.en b/docs/manual/mod/mod_access_compat.html.en
index e7351eae..9a916107 100644
--- a/docs/manual/mod/mod_access_compat.html.en
+++ b/docs/manual/mod/mod_access_compat.html.en
@@ -32,7 +32,7 @@
Description: Group authorizations based on host (name or IP
address)
-Status: Extension
+Status: Deprecated
Module Identifier: access_compat_module
Source File: mod_access_compat.c
Compatibility: Available in Apache HTTP Server 2.3 as a compatibility module with
@@ -109,7 +109,7 @@ server
[host|env=[!]env-variable] ...
Context: directory, .htaccess
Override: Limit
-Status: Extension
+Status: Deprecated
Module: mod_access_compat
The Allow directive affects which hosts can
@@ -235,7 +235,7 @@ server
[host|env=[!]env-variable] ...
This directive allows access to the server to be restricted @@ -254,7 +254,7 @@ evaluated.
Order Deny,AllowSatisfy All<Limit> and <LimitExcept> in version 2.0.51 and
later| Description: | Autorisations de groupe à base de nom d'hôte (nom ou adresse IP) |
|---|---|
| Statut: | Extension |
| Statut: | |
| Identificateur de Module: | access_compat_module |
| Fichier Source: | mod_access_compat.c |
| Compatibilité: | Disponible dans la version 2.3 du serveur HTTP Apache @@ -116,7 +116,7 @@ d'environnement [hôte|env=[!]variable d'environnement] ... |
| Contexte: | répertoire, .htaccess |
| Surcharges autorisées: | Limit |
| Statut: | Extension |
| Statut: | |
| Module: | mod_access_compat |
La directive Allow permet de définir quels
@@ -247,7 +247,7 @@ d'environnement
[hôte|env=[!]variable d'environnement] ...
Cette directive permet de restreindre l'accès au serveur en
@@ -267,7 +267,7 @@ les directives Allow et
Order Deny,AllowSatisfy All<Limit> et <LimitExcept> à partir de la version
2.0.51| Description: | Exécution des scripts CGI en fonction du type de média ou de la méthode de requête. |
|---|---|
| Statut: | Base |
| Statut: | Base |
| Module: | mod_actions |
| Compatibilité: | Le modificateur virtual et le passage de
-gestionnaire ont été introduits dans Apache 2.1 |
Cette directive ajoute une action qui va activer script
- cgi lorsque type d'action est déclenché par la
- requête. script cgi est un chemin URL vers une ressource
- qui a été désignée comme script CGI à l'aide des directives
- ScriptAlias ou AddHandler. type d'action
- peut être soit un gestionnaire, soit
- un type de contenu MIME. L'URL
- et le chemin du document correspondant sont envoyés en utilisant
- les variables d'environnement CGI standards PATH_INFO
- et PATH_TRANSLATED. Le gestionnaire utilisé pour cette
- requête particulière est transmis à l'aide de la variable
+
Cette directive ajoute une action qui va activer script cgi
+ lorsque type d'action est déclenché par la requête. script
+ cgi est un chemin URL vers une ressource qui a été désignée comme
+ script CGI à l'aide des directives ScriptAlias ou AddHandler. type d'action peut être
+ soit un gestionnaire, soit un type de contenu MIME. L'URL et le chemin du
+ document correspondant sont envoyés en utilisant les variables
+ d'environnement CGI standards PATH_INFO
+ et PATH_TRANSLATED. Le gestionnaire utilisé pour cette requête
+ particulière est transmis à l'aide de la variable
REDIRECT_HANDLER.
# Requests for files of a particular MIME content type: diff --git a/docs/manual/mod/mod_brotli.html.fr.utf8 b/docs/manual/mod/mod_brotli.html.fr.utf8 index 5408129d..98185a15 100644 --- a/docs/manual/mod/mod_brotli.html.fr.utf8 +++ b/docs/manual/mod/mod_brotli.html.fr.utf8 @@ -29,8 +29,6 @@
| Description: | Compression du contenu via Brotli avant sa livraison au client |
|---|---|
| Statut: | Extension |
| Identificateur de Module: | brotli_module |
| Module: | mod_brotli |
La directive BrotliCompressionMaxInputBlock permet
- de spécifier la taille maximale du bloc de données en entrée entre 16 et 24,
- sachant que plus cette taille sera grande, plus grande sera la quantité de
- mémoire consommée.
# 2^20 = blocs de 1 Mo +BrotliCompressionMaxInputBlock 20+
La directive BrotliCompressionQuality permet de
spécifier la qualité de la compression (une valeur entre 0 et
11). Les valeurs les plus hautes correspondent à une compression de
- meilleure qualité mais plus lente.
+ meilleure qualité mais plus lente. La valeur par défaut 5 est un bon
+ compromis pour du contenu dynamique.
# La valeur de qualité 4 est à peu près équivalente à gzip niveau 6 +BrotliCompressionQuality 4+
# Meilleur taux de compression mais très lent — ne convient qu’à la mise en +# cache +BrotliCompressionQuality 11+
La directive BrotliCompressionWindow permet de
spécifier la taille de la fenêtre de compression glissante brotli (une
- valeur comprise entre 10 et 24). Une taille de fenêtre plus grande peut
- améliorer la qualité de la compression mais consomme d'avantage de mémoire.
# fenêtre de 1 Mo (2^20 octets) +BrotliCompressionWindow 20+
# fenêtre de 16 Mo (2^24 octets) — nécessite une quantité de mémoire +# significative pour chaque connexion +BrotliCompressionWindow 24+
BrotliFilterNote [type] notenameNone| Description: | CERN httpd metafile semantics |
|---|---|
| Status: | Extension |
| Status: | Deprecated |
| Module Identifier: | cern_meta_module |
| Source File: | mod_cern_meta.c |
MetaDir .webSpecifies the name of the directory in which Apache can find @@ -95,7 +95,7 @@ files
MetaFiles offTurns on/off Meta file processing on a per-directory basis.
@@ -110,7 +110,7 @@ meta informationMetaSuffix .metaSpecifies the file name suffix for the file containing the diff --git a/docs/manual/mod/mod_cern_meta.html.fr.utf8 b/docs/manual/mod/mod_cern_meta.html.fr.utf8 index 1253ccea..8af69c5f 100644 --- a/docs/manual/mod/mod_cern_meta.html.fr.utf8 +++ b/docs/manual/mod/mod_cern_meta.html.fr.utf8 @@ -32,7 +32,7 @@
| Description: | La sémantique des métafichiers du serveur httpd du CERN |
|---|---|
| Statut: | Extension |
| Statut: | |
| Identificateur de Module: | cern_meta_module |
| Fichier Source: | mod_cern_meta.c |
MetaDir .webSpécifie le nom du répertoire dans lequel Apache pourra trouver @@ -98,7 +98,7 @@ métainformations dans le style du CERN
MetaFiles offActive ou désactive le traitement des métafichiers pour certains @@ -114,7 +114,7 @@ style du CERN
MetaSuffix .metaSpécifie le suffixe du fichier contenant les métainformations. diff --git a/docs/manual/mod/mod_data.html.fr.utf8 b/docs/manual/mod/mod_data.html.fr.utf8 index e8a661fb..f6db1873 100644 --- a/docs/manual/mod/mod_data.html.fr.utf8 +++ b/docs/manual/mod/mod_data.html.fr.utf8 @@ -29,8 +29,6 @@
-| Description: | Convertit un corps de réponse en URL de type données RFC2397 |
|---|---|
| Statut: | Extension |
| Identificateur de Module: | data_module |
| Compatibilité: | Disponible depuis la version 2.3 du serveur HTTP Apache |
Ce module permet de convertir une réponse en URL de type données - RFC2397. +
Ce module permet de convertir une réponse en RFC 2397 (URL de type données.
Les URLs de type données peuvent être incluses en ligne dans les diff --git a/docs/manual/mod/mod_dbd.html.fr.utf8 b/docs/manual/mod/mod_dbd.html.fr.utf8 index 662a12b8..b55b786f 100644 --- a/docs/manual/mod/mod_dbd.html.fr.utf8 +++ b/docs/manual/mod/mod_dbd.html.fr.utf8 @@ -29,8 +29,6 @@
-| Description: | Gestion des connexions à une base de données SQL | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Statut: | Extension | ||||||||||||||||||||||||||||
| Identificateur de Module: | dbd_module |
| Description: | Comprime le contenu avant de le servir au client |
|---|---|
| Statut: | Extension |
| Description: | Taille du fragment que zlib devra comprimer en une seule + |
|---|---|
| Description: | Taille du fragment que zlib devra compresser en une seule fois |
| Syntaxe: | DeflateBufferSize valeur |
| Défaut: | DeflateBufferSize 8096 |
| Module: | mod_deflate |
La directive DeflateBufferSize permet de
- spécifier la taille en octets du fragment que zlib devra comprimer
+ spécifier la taille en octets du fragment que zlib devra compresser
en une seule fois. Si la taille de la réponse compressée est supérieure à
celle spécifiée par cette directive, httpd passera à un mode d'encodage
fragmenté (l'en-tête HTTP Transfer-Encoding prend la valeur
@@ -350,7 +347,7 @@ sortie
fins statistiques en enregistrant sa valeur dans votre journal des accès.
DeflateFilterNote ratio
-
+
LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
CustomLog "logs/deflate_log" deflate
Aucune limite, mais LimitRequestBody s'applique après la
compressionLa directive
- DeflateInflateLimitRequestBody permet de
- spécifier la taille maximale d'un corps de requête décompressé. Si
- elle n'est pas définie, c'est la valeur de la directive LimitRequestBody qui s'applique au corps
- de requête décompressé.
La directive DeflateInflateLimitRequestBody permet
+ de spécifier la taille maximale d'un corps de requête décompressé. Si elle
+ n'est pas définie, c'est la valeur de la directive LimitRequestBody qui s'applique au corps de
+ requête décompressé. Une valeur de 0 signifie qu’aucune limite
+ n’est imposée à la taille du corps décompressé (d’autres limites telles que
+ celles de la directive LimitRequestBody
+ peuvent cependant s’appliquer).
DeflateInflateRatioBurst valueDeflateInflateRatioBurst 3DeflateInflateRatioLimit valueDeflateInflateRatioLimit 200| Description: | Moniteur centralisé pour les serveurs d'origine mod_heartbeat |
|---|---|
| Statut: | Expérimental |
| Identificateur de Module: | heartmonitor_module |
| Description: | Server-side imagemap processing |
|---|---|
| Status: | Base |
| Status: | Deprecated |
| Module Identifier: | imagemap_module |
| Source File: | mod_imagemap.c |
ImapBase http://servername/The ImapBase directive sets the default
@@ -325,7 +325,7 @@ that are not explicitly mapped
ImapDefault nocontentThe ImapDefault directive sets the default
@@ -346,7 +346,7 @@ an imagemap
ImapMenu formattedThe ImapMenu directive determines the
diff --git a/docs/manual/mod/mod_imagemap.html.fr.utf8 b/docs/manual/mod/mod_imagemap.html.fr.utf8
index fca9b16b..5ab106c5 100644
--- a/docs/manual/mod/mod_imagemap.html.fr.utf8
+++ b/docs/manual/mod/mod_imagemap.html.fr.utf8
@@ -32,7 +32,7 @@
| Description: | Traitement des cartes des zones interactives d'une image (imagemaps) au niveau du serveur |
|---|---|
| Statut: | Base |
| Statut: | |
| Identificateur de Module: | imagemap_module |
| Fichier Source: | mod_imagemap.c |
ImapBase http://nom_serveur/La directive ImapBase permet de définir la
@@ -346,7 +346,7 @@ cible
ImapDefault nocontentLa directive ImapDefault permet de définir
@@ -368,7 +368,7 @@ lorsqu'on invoque un fichier imagemap
ImapMenu formattedLa directive ImapMenu permet de spécifier
diff --git a/docs/manual/mod/mod_log_config.html.fr.utf8 b/docs/manual/mod/mod_log_config.html.fr.utf8
index f26c3249..ab083125 100644
--- a/docs/manual/mod/mod_log_config.html.fr.utf8
+++ b/docs/manual/mod/mod_log_config.html.fr.utf8
@@ -32,8 +32,6 @@
ko |
tr
| Description: | Journalisation des requêtes envoyées au serveur | ||
|---|---|---|---|
| Statut: | Base |
| Description: | Définit le nom et le format du fichier journal | ||
|---|---|---|---|
| Syntaxe: | GlobalLogfile|pipe
+ |
| Description: | Ce module permet d'utiliser des macros dans les fichiers de configuration Apache. |
|---|---|
| Statut: | Base |
| Module: | mod_md |
- This is part of the 'server-status' HTML user interface and has nothing to
+ This is part of the 'server-status' HTML user interface and has nothing to
do with the core functioning itself. It defines the link offered on that
page for easy checking of a certificate monitor. The SHA256 fingerprint
of the certificate is appended to the configured url.
@@ -656,9 +657,11 @@
- Set the way MDChallengeDns01 command is invoked, e.g the number and
- types of arguments. See MDChallengeDns01
+ Set the way MDChallengeDns01
+ command is invoked, e.g the number and types of arguments.
+ See MDChallengeDns01
for the differences.
+
This setting is global and cannot be varied per domain.
@@ -807,8 +810,10 @@
- The mode `all` is the behavior as in all previous versions. Both ServerName
- and ServerAlias are inspected to find the MDomain matching a VirtualHost.
+ The mode `all` is the behavior as in all previous versions. Both
+ ServerName
+ and ServerAlias are inspected
+ to find the MDomain matching a VirtualHost.
This automatically detects coverage, even when you only have added
one of the names to an MDomain.
@@ -1182,18 +1187,18 @@ MDomain example2.org auto
This about a non-standard ACME extension by Let's Encrypt.
- Lets Encrypt supports Certificate Profiles in their CA. This, + Let's Encrypt supports Certificate Profiles in their CA. This, among some other details, let's you select the lifetime of the certificates you get. The "classic" profile is the default and will keep the 90 days, the "tlsserver" profile is also 90 days with a max of 25 Subject Alternative Names. The "shortlived" profile will issue certificates with only 6 days of validity.
- If you do not change your mod_md configuration, you will
+ If you do not change your mod_md configuration, you will
continue to get the 90 days certificates. Should you believe
that a shorter lifetime is beneficial for you (and take the
risk that the renewal time is way shorter),
-+ you can configure the profile to use via 'MDProfile shortlived'.
+ you can configure the profile to use via 'MDProfile shortlived'.
The profile names are defined by the CA. If a profile you configure is not available, no profile will be used and @@ -1214,6 +1219,7 @@ MDomain example2.org auto
Controls if a MDProfile
@@ -1272,7 +1278,7 @@ MDomain example2.org auto
En-/Disable certificate renewals triggered via the ACME ARI
extension (rfc9773). These renewals happen *in addition* to
- the mechanism controlled by MDRenewWindow.
+ the mechanism controlled by MDRenewWindow.
ACME ARI allows an ACME CA to somewhat shape incoming renewal traffic. More importantly though, it can inform clients of @@ -1292,7 +1298,7 @@ MDomain example2.org auto
- If the validity of the certificate falls below duration, mod_md
+ If the validity of the certificate falls below duration, mod_md
will get a new signed certificate.
Normally, certificates are valid for around 90 days and mod_md will renew @@ -1411,7 +1417,7 @@ MDRenewWindow 10%
The number of consecutive errors on renewing a certificate before
another CA is selected. This only applies to configurations that
- have more than one MDCertificateAuthority
+ have more than one MDCertificateAuthority
specified.
| Description: | Control if Managed Domain information is added to server-status. |
|---|---|
| Description: | Control if Managed Domain information is added to server-status. |
| Syntax: | MDServerStatus on|off |
| Default: | MDServerStatus on |
| Default: | MDServerStatus off |
| Context: | server config |
| Status: | Experimental |
| Module: | mod_md |
- Apaches 'server-status' handler allows you configure a resource to monitor
- what is going on. This includes now a section listing all Managed Domains
- with the DNS names, renewal status, lifetimes and main properties.
+ If enabled, adds a section to the
+ mod_status 'server-status' handler
+ output which lists all Managed Domains with the DNS
+ names, renewal status, lifetimes and main properties.
- You can switch that off using this directive.
+ As with 'md-status', the 'server-status' output
+ must be protected from public view
+ using appropriate authorization restrictions.
Enable this to use a lock file on server startup when
- MDStoreDir is synchronized with the server
+ MDStoreDir is synchronized with the server
configuration and renewed certificates are activated.
Locking is intended for setups in a cluster that have a shared
- file system for MDStoreDir. It will protect the activation of
+ file system for MDStoreDir.
+ It will protect the activation of
renewed certificates when cluster nodes are restarted/reloaded
at the same time. Under the condition that the shared file
system does support file locking.
@@ -1618,8 +1628,8 @@ MDRenewWindow 10%
window left. With the default, this mean 9 days for certificates from
Let's Encrypt.
- It also applies to Managed Domains with static certificate files (
- see MDCertificateFile).
+ It also applies to Managed Domains with static certificate files (see
+ MDCertificateFile).
- Il existe aussi un nouveau gestionnaire, "md-status", qui peut
+ Il existe aussi un nouveau gestionnaire,
+ « md-status », qui peut
vous fournir les informations à propos des domaines gérés à
- partir de "server-status" et au format JSON. Vous pouvez le
+ partir de « server-status » et au format JSON. Vous pouvez le
configurer comme suit sur votre serveur :
<Location "/md-status"> SetHandler md-status + Require host example.com </Location>
- Comme pour "server-status", vous devez
- ajouter les autorisations nécessaires.
+ sur votre serveur. Comme pour « server-status »,
+ vous devez protéger la sortie de
+ md-status de la vue du public en instaurant des
+ restrictions d’autorisation (telles que
+ mod_authz_host).
Si vous ne souhaitez recevoir l'état JSON que pour un domaine spécifique, ajoutez le simplement à votre URL d'état : @@ -279,7 +284,7 @@ </MDomain>
- et utilisez 'server-status' et/ou MDMessageCmd pour voir comment tout
+ et utilisez « server-status » et/ou MDMessageCmd pour voir comment tout
cela fonctionne. Vous pourrez alors vérifier si l'information
d'agrafage est présente, sa durée de validité, son origine et à
quel moment elle sera rafraîchie.
@@ -427,6 +432,8 @@
Cette directive est principalement utilisée dans les
@@ -522,13 +529,13 @@
Si vous spécifiez plusieurs URLs, chacune d'entre elles est
testée en mode tourniquet ("round-robin") après un certain
nombre d'échecs. Vous pouvez définir la rapidité de ce processus
- à l'aide des directives MDRetryDelay et
- MDRetryFailover. Par défaut, une demie
+ à l'aide des directives MDRetryDelay et
+ MDRetryFailover. Par défaut, une demie
journée d'essais infructueux est considérée comme un échec.
-
+
Tous les autres réglages s'appliquent à chacune de ces URLs. Il
est ainsi par exemple impossible d'en avoir deux avec des
- directives MDExternalAccountBinding
+ directives MDExternalAccountBinding
différentes.
A des fins de test, les CAs fournissent en général une seconde @@ -636,7 +643,8 @@
- Cette directive impacte l'interface utilisateur HTML 'server-status' et
+ Cette directive impacte l'interface utilisateur HTML
+ « server-status » et
n'a rien à voir avec le fonctionnement de mod_md proprement dit.
Elle permet de définir le lien qui s'affiche sur cette interface
pour accéder facilement à un moniteur de certificat. L'empreinte
@@ -753,7 +761,7 @@
Cette directive permet de définir de quelle manière est invoquée
- la commande MDChallengeDns01, à savoir le nombre et le type de
+ la commande MDChallengeDns01, à savoir le nombre et le type de
ses arguments. Voir MDChallengeDns01 pour les
différences.
Cette définition est globale et ne peut pas s'appliquer
@@ -888,12 +896,14 @@
Cette directive permet de spécifier un serveur http mandataire +
Utiliser l’URL du serveur http mandataire direct donné
pour se connecter à l'autorité de certification spécifiée via
MDCertificateAuthority. Vous
devez la définir si votre serveur web ne peut atteindre internet que
- via un serveur mandataire.
+ via un mandataire direct.
- Le mode `all` correspond au comportement de toutes les versions
- précédentes. ServerName et ServerAlias sont inspectés pour
- trouver le MDomain qui correspond à un serveur virtuel. Les
- recouvrements sont automatiquement détectés, même si vous n'avez
- ajouté qu'un des noms à un MDomain.
+ Le mode `all` correspond au comportement de toutes les versions
+ précédentes. ServerName et
+ ServerAlias sont inspectés
+ pour trouver le MDomain
+ qui correspond à un serveur virtuel. Les recouvrements sont
+ automatiquement détectés, même si vous n'avez ajouté qu'un des
+ noms à un MDomain.
Cet automatisme présente cependant des inconvénients avec les configurations plus complexes. Si vous définissez cette @@ -1370,7 +1382,7 @@ MDomain example2.org auto
Il s'agit d'une extension non standard d'ACME par Let's Encrypt.
- Lets Encrypt prend en charge les profiles de certificat dans + Let’s Encrypt prend en charge les profiles de certificat dans leurs CA. Cette fonctionnalité, entre autres détails, vous permet de définir la durée de validité des certificats que vous recevez. Le profile par défaut « classic » conserve la valeur de @@ -1379,7 +1391,7 @@ MDomain example2.org auto profile « shortlived » délivre des certificats dont la durée de validité est de 6 jours seulement.
- Si vous ne modifiez pas la configuration de votre module mod_md,
+ Si vous ne modifiez pas la configuration de votre module mod_md,
vous continuerez à recevoir des certificats d'une durée de
validité de 90 jours. Si vous pensez qu'une durée de validité
plus courte convient mieux à votre situation (et acceptez le
@@ -1405,6 +1417,8 @@ MDomain example2.org auto
Cette directive permet de contrôler si un MDProfile que vous définissez est
@@ -1469,7 +1483,7 @@ MDomain example2.org auto
déclenchement du renouvellement des certificats à l'aide de
l'extension ACME ARI (rfc9773). Ces renouvellements s'ajoutent à
ceux déclenchés par le mécanisme contrôlé à l'aide de la
- directive MDRenewWindow.
+ directive MDRenewWindow.
ACME ARI permet en quelque sorte à une CA ACME de façonner le trafic entrant des renouvellements. Plus important cependant, @@ -1490,7 +1504,7 @@ MDomain example2.org auto
- Lorsqu'un certificat arrive à expiration, mod_md va
+ Lorsqu'un certificat arrive à expiration, mod_md va
tenter d'en obtenir un nouveau signé.
Normalement, les certificats ont une validité de 90 jours, et @@ -1623,10 +1637,9 @@ MDRenewWindow 10% Apache
- Le nombre d'erreurs consécutives lors du renouvellement d'un
+ Le nombre d'erreurs consécutives lors du renouvellement d'un
certificat avant la sélection d'une autre CA. Ne s'applique
- qu'aux configurations pour lesquelles plusieurs
- MDCertificateAuthority ont été
+ qu'aux configurations pour lesquelles plusieurs MDCertificateAuthority ont été
spécifiées.
| Description: | Définit si les informations à propos des domaines gérés - sont ajoutés ou non à server-status. |
|---|---|
| Syntaxe: | MDServerStatus on|off |
| Défaut: | MDServerStatus on |
| Défaut: | MDServerStatus off |
| Contexte: | configuration globale |
| Statut: | Expérimental |
| Module: | mod_md |
- Le gestionnaire d'Apache "server-status" vous permet de - configurer une ressource pour monitorer le fonctionnement du - serveur. Cette ressource inclut maintenant une section indiquant - tous les domaines gérés avec leur nom DNS, l'état de - renouvellement du certificat, la durée de vie de ce dernier, - ainsi que d'autres propriétés fondamentales. -
- Cette directive permet d'activer/désactiver cette ressource. +
Si cette directive est activée, une section est ajoutée au
+ gestionnaire « server-status » de
+ mod_status, qui liste tous les domaines gérés avec
+ leur nom DNS, l'état de renouvellement du certificat, la durée de
+ vie de ce dernier, ainsi que d'autres propriétés fondamentales.
+
+ Comme avec « md-status », la sortie de
+ « server-status » doit être
+ protégée de la vue du public en instaurant des restrictions
+ d’autorisation appropriées.
- Définissez cette directive pour utiliser un fichier verrou au
- démarrage du serveur lorsque MDStoreDir
- est synchronisé avec la configuration du serveur et si les
- certificats renouvelés sont activés.
+ Définissez cette directive pour utiliser un fichier verrou au
+ démarrage du serveur lorsque MDStoreDir est synchronisé avec la
+ configuration du serveur et si les certificats renouvelés sont
+ activés.
Le verrouillage a été implémenté pour les configurations de
- cluster où MDStoreDir appartient à un système de fichiers
+ cluster où MDStoreDir appartient à un système de fichiers
partagé. L'activation des certificats renouvelés sera alors
protégée lorsque plusieurs noeuds du cluster sont redémarrés ou
reconfigurés simultanément ; ceci à condition bien entendu que
diff --git a/docs/manual/mod/mod_mime.html.fr.utf8 b/docs/manual/mod/mod_mime.html.fr.utf8
index ed1044aa..2ab8d35a 100644
--- a/docs/manual/mod/mod_mime.html.fr.utf8
+++ b/docs/manual/mod/mod_mime.html.fr.utf8
@@ -30,8 +30,6 @@
fr |
ja
| Description: | Associe les extensions des fichiers demandés avec l'action déclenchée par ces fichiers et avec leur contenu (type MIME, langage, jeu de caractère et codage) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Description: | Support for Solaris privileges and for running virtual hosts under different user IDs. | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module Identifier: | privileges_module | ||||||||||||||
| Source File: | mod_privileges.c | ||||||||||||||
| Compatibility: | Available in Apache 2.3 and up, on Solaris 10 and @@ -144,7 +144,7 @@ request-processing cycle. | ||||||||||||||
| Syntax: | DTracePrivileges On|Off | ||||||||||||||
| Default: | DTracePrivileges Off | ||||||||||||||
| Context: | server config | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM). | ||||||||||||||
| Syntax: | PrivilegesMode FAST|SECURE|SELECTIVE | ||||||||||||||
| Default: | PrivilegesMode FAST | ||||||||||||||
| Context: | server config, virtual host, directory | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM). | ||||||||||||||
| Syntax: | VHostCGIMode On|Off|Secure | ||||||||||||||
| Default: | VHostCGIMode On | ||||||||||||||
| Context: | virtual host | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM). | ||||||||||||||
| Syntax: | VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | ||||||||||||||
| Default: | None | ||||||||||||||
| Context: | virtual host | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM)
@@ -268,7 +268,7 @@ and when mod_privilege
| ||||||||||||||
| Default: | None | ||||||||||||||
| Context: | virtual host | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM)
@@ -337,7 +337,7 @@ for the virtualhost. | ||||||||||||||
| Syntax: | VHostSecure On|Off | ||||||||||||||
| Default: | VHostSecure On | ||||||||||||||
| Context: | virtual host | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM). | Default: | Inherits the userid specified in
|
||||||||||||
| Context: | virtual host | ||||||||||||||
| Status: | Experimental | ||||||||||||||
| Status: | Deprecated | ||||||||||||||
| Module: | mod_privileges | ||||||||||||||
| Compatibility: | Available on Solaris 10 and OpenSolaris with
non-threaded MPMs (prefork or custom MPM). |
| Description: | Support des privilèges de Solaris et de l'exécution des serveurs virtuels sous différents identifiants utilisateurs. |
|---|---|
| Statut: | Expérimental |
| Statut: | |
| Identificateur de Module: | privileges_module |
| Fichier Source: | mod_privileges.c |
| Compatibilité: | Disponible depuis la version 2.3 d'Apache sur les @@ -163,7 +163,7 @@ activés. |
| Syntaxe: | DTracePrivileges On|Off |
| Défaut: | DTracePrivileges Off |
| Contexte: | configuration globale |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | >Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -185,7 +185,7 @@ malicieux supportant les privilèges. |
| Syntaxe: | PrivilegesMode FAST|SECURE|SELECTIVE |
| Défaut: | PrivilegesMode FAST |
| Contexte: | configuration globale, serveur virtuel, répertoire |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec des
modules MPMs non threadés (comme prefork ou un module
@@ -231,7 +231,7 @@ dernier. |
| Syntaxe: | VHostCGIMode On|Off|Secure |
| Défaut: | VHostCGIMode On |
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -266,7 +266,7 @@ par un serveur virtuel. |
| Syntaxe: | VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... |
| Défaut: | Aucun |
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -304,7 +304,7 @@ serveur virtuel. |
| Défaut: | Hérite de l'identifiant du groupe spécifié par la directive
|
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -346,7 +346,7 @@ personnalisé). |
| Syntaxe: | VHostPrivs [+-]?nom-privilège [[+-]?nom-privilège] ... |
| Défaut: | Aucun |
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -381,7 +381,7 @@ pour les serveurs virtuels. |
| Syntaxe: | VHostSecure On|Off |
| Défaut: | VHostSecure On |
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
@@ -411,7 +411,7 @@ serveur virtuel. |
| Défaut: | Hérite de l'identifiant utilisateur spécifié par la directive
|
| Contexte: | serveur virtuel |
| Statut: | Expérimental |
| Statut: | |
| Module: | mod_privileges |
| Compatibilité: | Disponible sous Solaris 10 et OpenSolaris avec les
modules MPM non-threadés (prefork ou MPM
diff --git a/docs/manual/mod/mod_proxy.html.en b/docs/manual/mod/mod_proxy.html.en
index 2fd9a061..5196801e 100644
--- a/docs/manual/mod/mod_proxy.html.en
+++ b/docs/manual/mod/mod_proxy.html.en
@@ -733,8 +733,9 @@ NoProxy ".example.com" "192.168.112.0/21"
|
| Module: | mod_proxy |
Directives placed in <Proxy>
- sections apply only to matching proxied content. Shell-style wildcards are
- allowed.
For example, the following will allow only hosts in
yournetwork.example.com to access content via your proxy
@@ -754,6 +755,14 @@ NoProxy ".example.com" "192.168.112.0/21"
</Proxy>
+
A backend URL matches the configuration section if it begins with the
the wildcard-url string, even if the last path segment in the
@@ -981,6 +990,14 @@ proxied resources
identical to the <Proxy> directive, except that it matches URLs
using regular expressions.
From 2.4.8 onwards, named groups and backreferences are captured and written to the environment with the corresponding name prefixed with "MATCH_" and in upper case. This allows elements of URLs to be referenced @@ -2028,6 +2045,13 @@ ProxyRemote "ftp" "http://ftpproxy.mydomain:8080" sent without first waiting for the remote proxy to send a Basic authentication challenge. The Proxy-Chain-Auth environment variable has no effect if this argument is used.
+ +When a forward (remote) proxy is configured, DNS resolution of
+ the origin/backend hostname is only performed on the forward proxy.
+ Any ProxyBlock rules
+ which restrict access to specific IP addresses must be configured
+ at the forward proxy.
Les directives situées dans une section <Proxy> ne s'appliquent qu'au contenu
- mandaté concerné. Les jokers de style shell sont autorisés.
Les directives situées dans une section <Proxy> ne s'appliquent qu'au contenu mandaté
+ concerné en utilisant une recherche de correspondance simple entre le
+ préfixe de type chaîne et l’URL. Les jokers de style shell sont
+ autorisés.
Par exemple, les lignes suivantes n'autoriseront à accéder à un contenu via votre serveur mandataire que les hôtes appartenant à @@ -843,6 +845,15 @@ mandatées </Proxy> +
Une URL d'arrière-plan sera concernée par le conteneur Proxy si
elle commence par la url-avec-jokers, même si le
@@ -1096,6 +1107,15 @@ mandatées correspondant à une expression rationnelle
identique à la directive <Proxy>, à l'exception qu'elle définit
les URLs auxquelles elle s'applique en utilisant une expression rationnelle.
A partir de la version 2.4.8, les groupes nommés et les références arrières sont extraits et enregistrés dans l'environnement avec leur nom en majuscules et préfixé par "MATCH_". Ceci permet @@ -2307,6 +2327,13 @@ ProxyRemote "ftp" "http://ftpproxy.mydomain:8080" d'authentification. La variable d'environnement Proxy-Chain-Auth n'est plus prise en compte si cet argument est utilisé.
+Lorsqu’un mandataire direct (distant) est configuré, la résolution DNS du
+ nom d’hôte originel/dorsal n’est effectuée que sur le mandataire direct.
+ Toute règle ProxyBlock qui limite
+ l’accès à des adresses IP spécifiques doit être définie au niveau du
+ mandataire direct.
| Description: | Module fournissant le support de la passerelle SCGI à
mod_proxy |
|---|---|
| Statut: | Extension |
| Description: | Websockets support module for
mod_proxy |
|---|---|
| Status: | Extension |
| Status: | Deprecated |
| Module Identifier: | proxy_wstunnel_module |
| Source File: | mod_proxy_wstunnel.c |
| Compatibility: | Available in httpd 2.4.5 and later |
ProxyWebsocketFallbackToProxyHttp On|OffProxyWebsocketFallbackToProxyHttp On| Description: | Module pour mod_proxy supportant les
websockets |
|---|---|
| Statut: | Extension |
| Statut: | |
| Identificateur de Module: | proxy_wstunnel_module |
| Fichier Source: | mod_proxy_wstunnel.c |
| Compatibilité: | Disponible à partir de la version 2.4.5 du serveur HTTP @@ -112,7 +112,7 @@ gérer la requête |
| Syntaxe: | ProxyWebsocketFallbackToProxyHttp On|Off |
| Défaut: | ProxyWebsocketFallbackToProxyHttp On |
| Contexte: | configuration globale, serveur virtuel |
| Statut: | Extension |
| Statut: | |
| Module: | mod_proxy_wstunnel |
| Compatibilité: | Disponible à partir de la version 2.4.48 du serveur HTTP Apache |
mod_rewrite provides a flexible and powerful way to
- manipulate URLs using an unlimited number of rules. Each rule can have an
+
It provides a flexible and powerful way to manipulate URLs using an + unlimited number of rules. Each rule can have an unlimited number of attached rule conditions, to allow you to rewrite URLs based on server variables (including HTTP headers, connection details, and timestamps), environment variables, - or other request properties.
- -mod_rewrite can operate on the full URL-path, or any
- portion of it, including the PATH_INFO or QUERY_STRING.
A rewrite rule can be invoked in the server configuration files, or in per-directory context. The substitution @@ -73,7 +74,10 @@ URLs on the fly
RewriteOptions
RewriteRuleIf the CondPattern is prefixed with a ! the
- condition is determined to be true only if the the
+ condition is determined to be true only if the
CondPattern does not match.
TestString is a string which can contain the following expanded constructs in addition to plain text:
-$N
+
+
+
+
+ $N — RewriteRule backreferences$N
(0 <= N <= 9). $1 to $9 provide access to the grouped
parts (in parentheses) of the pattern, from the
RewriteRule which is subject to the current
set of RewriteCond conditions. $0 provides
- access to the whole string matched by that pattern.
-
- !, no backreferences are ever defined.%N
+ access to the whole string matched by that pattern.
+
+ %N — RewriteCond backreferences%N
(0 <= N <= 9). %1 to %9 provide access to the grouped
parts (again, in parentheses) of the pattern, from the last matched
RewriteCond in the current set
of conditions. %0 provides access to the whole string matched by
- that pattern.
-
- !, no backreferences are ever defined.${mapname:key|default}.
- See the documentation for
- RewriteMap for more details.
- %{ NAME_OF_VARIABLE
- }
- where NAME_OF_VARIABLE can be a string taken
- from the following list:
+ that pattern.
+
+
+ !, no backreferences are ever defined.
+ See How the
+ Ruleset is Applied for more details on the order in which
+ patterns are matched and backreferences populated.These are expansions of the form ${mapname:key|default}.
+ See the documentation for
+ RewriteMap for more details.
These are variables of the form
+ %{ NAME_OF_VARIABLE
+ }
+ where NAME_OF_VARIABLE can be a string taken
+ from the following list:
| Description: | Ce module fournit un moteur de réécriture à base de règles permettant de réécrire les URLs des requêtes à la volée |
|---|---|
| Statut: | Extension |
| Module: | mod_rewrite |
La directive RewriteBase permet de
- spécifier le préfixe d'URL à utiliser dans un contexte de
- répertoire (htaccess) pour les directives
- RewriteRule qui réécrivent vers un chemin
+
La directive RewriteBase permet de spécifier le
+ préfixe d'URL à utiliser dans un contexte de
+ répertoire (htaccess) pour les directives RewriteRule qui réécrivent vers un chemin
relatif.
Cette directive est obligatoire si vous utilisez un - chemin relatif dans une substitution, et dans un contexte de - répertoire (htaccess), sauf si au moins une de ces conditions est - vérifiée :
+Cette directive est obligatoire si vous utilisez un chemin + relatif dans une substitution, et dans un contexte de répertoire (htaccess), sauf si + au moins une de ces conditions est vérifiée :
DocumentRoot (c'est à
dire que pour y accéder, il n'est pas nécessaire d'utiliser
une directive telle qu'Alias).RewriteRule, suffixé par
- la substitution relative est aussi valide en tant qu'URL sur
- le serveur (ce qui est rare).RewriteRule s’applique, suffixé par
+ la substitution relative est aussi valable en tant que chemin d'URL
+ sur le serveur (ce qui est rare).mod_userdir.Dans l'exemple ci-dessous, la directive
-RewriteBase est nécessaire afin d'éviter une
-réécriture en http://example.com/opt/myapp-1.2.3/welcome.html car la
-ressource n'était pas relative à la racine des documents. Cette erreur
-de configuration aurait conduit le serveur à rechercher un répertoire
-"opt" à la racine des documents.
DocumentRoot "/var/www/example.com" -AliasMatch "^/myapp" "/opt/myapp-1.2.3" -<Directory "/opt/myapp-1.2.3"> - RewriteEngine On - RewriteBase "/myapp/" - RewriteRule "^index\.html$" "welcome.html" -</Directory>- - @@ -185,7 +164,7 @@ AliasMatch "^/myapp" "/opt/myapp-1.2.3" la réécriture soit effectuée
RewriteCond
- chaîne_de_test expression_de_comparaison [drapeaux]Si CondPattern est préfixé par un !, la condition
+ ne sera évaluée à vrai que si CondPattern ne correspond pas.
TestString est une chaîne qui peut contenir les extensions suivantes en plus du texte simple :
-$N (0 <= N <= 9). $1 à $9
- permettent d'accéder aux parties regroupées (entre
- parenthèses) du modèle, issues de la RewriteRule
- concernée par le jeu de conditions RewriteCond
- courant. $0 donne accès à l'ensemble de la chaîne
- correspondant au modèle.%N (0 <= N <= 9). %1 à %9
- permettent d'accéder aux parties regroupées (entre
- parenthèses) du modèle, issues de la dernière
- condition RewriteCond satisfaite du jeu de conditions RewriteCond
- courant. %0 donne accès à l'ensemble de la chaîne
- correspondant au modèle.${nomTable:clé|défaut}. Voir la href="#mapfunc">documentation sur RewriteMap
- pour plus de détails.
- %{ NAME_OF_VARIABLE },
- où NOM_DE_VARIABLE peut contenir une chaîne issue
- de la liste suivante :
+
+
+
+
+ $N — Références arrières des
+ règles RewriteRule$N (0 <= N <=
+ 9). $1 à $9 permettent d'accéder aux parties regroupées (entre
+ parenthèses) du modèle, issues de la RewriteRule concernée
+ par le jeu de conditions RewriteCond courant. $0 donne
+ accès à l'ensemble de la chaîne correspondant au modèle.%N — Références arrières des
+ conditions RewriteCond%N (0 <= N <=
+ 9). %1 à %9 permettent d'accéder aux parties regroupées (entre
+ parenthèses) du modèle, issues de la dernière condition
+ RewriteCond satisfaite du jeu de conditions
+ RewriteCond courant. %0 donne accès à l'ensemble de la
+ chaîne correspondant au modèle.!, aucune référence arrière
+ ne sera donc définie. Voir le document La manière dont le jeu de
+ règles est appliqué pour plus de détails à propos de l’ordre dans
+ lequel les motifs sont mis en correspondance et les références arrières
+ définies.Développement des mappages RewriteMap
+ +Ce sont des développements de la forme
+ ${mapname:key|default}. Voir la documentation de RewriteMap pour plus de détails.
Le serveur et les variables CGI
+ +Ce sont des variables de la forme %{
+ NAME_OF_VARIABLE } où
+ NAME_OF_VARIABLE peut être une des chaînes de la liste suivante :
| Description: | Définit les règles pour le moteur de réécriture | |
|---|---|---|
| Syntaxe: | RewriteRule
- Modèle Substitution [drapeaux] | |
| Contexte: | configuration globale, serveur virtuel, répertoire, .htaccess | |
| Surcharges autorisées: | FileInfo | |
| Statut: | Extension | |
| B | -Echappe les caractères non-alphanumériques dans les références + | Echappe les caractères non-alphanumériques dans les références arrières avant d'appliquer la transformation. Pour un échappement similaire des variables du serveur, voir la fonction de mappage "escape".détails ... |
| END | -Stoppe le processus de réécriture immédiatement et - n'applique plus aucune règle. Empêche aussi l'application - ultérieure de règles de réécriture dans les contextes de - répertoire et de fichier .htaccess (disponible à partir de la - version 2.3.9 du serveur HTTP Apache). détails ... | +Stoppe le processus de réécriture immédiatement et n'applique plus + aucune règle. Empêche aussi l'application ultérieure de règles de + réécriture dans les contextes de répertoire et de fichier .htaccess + (disponible à partir de la version 2.3.9 du serveur HTTP Apache). détails ... |
| env|E=[!]VAR[:VAL] | @@ -1492,10 +1533,10 @@ substitution !||
| last|L | -Arrête le processus de réécriture immédiatement et n'applique - plus aucune règle. Prêtez une attention particulière aux mises - en garde concernant les contextes de niveau répertoire et - .htaccess (voir aussi le drapeau END). détails ... | +Arrête le processus de réécriture immédiatement et n'applique plus + aucune règle. Prêtez une attention particulière aux mises en garde + concernant les contextes de niveau répertoire (voir aussi le drapeau END). + détails ... |
| next|N | @@ -1569,7 +1610,7 @@ substitution !||
| UnsafeAllow3F | -Autorise les substitutions à partir d'URL potentiellement non + | Autorise les substitutions à partir d’URL potentiellement non fiables. détails ... | @@ -1577,7 +1618,7 @@ substitution !
| UnsafePrefixStat | Autorise les substitutions potentiellement non fiables à partir
- d'une variable de tête ou d'une référence arrière vers un chemin du
+ d’une variable de tête ou d’une référence arrière vers un chemin du
système de fichiers.
détails ... Disponible à partir de la version 2.4.60 du serveur HTTP Apache. @@ -1588,8 +1629,8 @@ substitution ! |
Empêche la fusion des slashes de début multiples tels que ceux utilisés
dans les chemins UNC de Windows.
- détails ... - Disponible à partir de la version 2.4.62 du serveur HTTP Apache. + details ... + Disponible à partir de la version 2.4.62 du serveur HTTP Apache. |
RewriteRule
Voici toutes les combinaisons de substitution et leurs significations :
-Dans la configuration au niveau du serveur principal
- (httpd.conf)
- pour la requête ``GET
- /chemin/infochemin'':
-
En dehors de la configuration au niveau du répertoire pour la requête ``GET
+ /chemin/infochemin'':
| Règle | @@ -1668,13 +1706,10 @@ redondant)
|---|
Dans une configuration de niveau répertoire pour
- /chemin
- (/chemin/physique/vers/chemin/.htacccess, avec
- RewriteBase "/chemin")
- pour la requête ``GET
- /chemin/chemin-local/infochemin'':
-
Dans une configuration de niveau répertoire pour /chemin
+ (par exemple, .htaccess ou <Directory>,
+ avec RewriteBase "/chemin")
pour la requête ``GET
+ /chemin/chemin-local/infochemin'':
| Règle | diff --git a/docs/manual/mod/mod_socache_redis.html.fr.utf8 b/docs/manual/mod/mod_socache_redis.html.fr.utf8 index 95e574ad..54f696ef 100644 --- a/docs/manual/mod/mod_socache_redis.html.fr.utf8 +++ b/docs/manual/mod/mod_socache_redis.html.fr.utf8 @@ -79,9 +79,9 @@ (plateformes threadées seulement).|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Description: | Fournit une variable d'environnement contenant un identifiant unique pour chaque requête | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Statut: | Extension | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <Else> | core | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Contient des directives qui ne s'appliquent que si la
+
AuthConfigdiff --git a/docs/manual/mod/prefork.html.en b/docs/manual/mod/prefork.html.en index a578590b..286ef63d 100644 --- a/docs/manual/mod/prefork.html.en +++ b/docs/manual/mod/prefork.html.en @@ -52,6 +52,12 @@ to handle as many simultaneous requests as you expect to receive, but small enough to assure that there is enough physical RAM for all processes. + +When built as a DSO module, it can be loaded with: + +LoadModule mpm_prefork_module modules/mod_mpm_prefork.so+ + Topics
Bugfix checklistSee also | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Açıklama: | Evresiz ön çatallamalı HTTP sunucusu oluşturur | |||||||
|---|---|---|---|---|---|---|---|---|
| Durum: | MPM | |||||||
| Modül Betimleyici: | mpm_prefork_module | |||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports that are allowed to CONNECT through the
@@ -408,7 +408,7 @@ nicht auf andere Weise ermitteln kann. | ||||||||
| DeflateMemLevel value | 9 | sv | E | |||||
| How much memory should be used by zlib for compression | ||||||||
| DeflateWindowSize value | 15 | sv | E | |||||
| Zlib compression window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts are denied access to the server | ||||||||
| <Directory Verzeichnispfad> ... </Directory> | sv | C | ||||||
| Umschließt eine Gruppe von Direktiven, die nur auf @@ -429,7 +429,7 @@ a directory | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| Toggle trailing slash redirects on or off | ||||||||
| DocumentRoot Verzeichnis | /usr/local/apache/h + | sv | C | |||||
| Verzeichnis, welches den Haupt-Dokumentenbaum bildet, der im Web sichtbar ist. | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -562,10 +562,10 @@ werden | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | svdh | E | ||||||
| contains version dependent configuration | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | B | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | D | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | D | |||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | D | |||||
| Action if no coordinates are given when calling an imagemap | ||||||||
| Include Dateiname|Verzeichnis | svd | C | ||||||
| Fügt andere Konfigurationsdateien innerhalb der Server-Konfigurationsdatei ein | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sv | C | |||||
| Controls whether the server merges consecutive slashes in URLs. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Determines whether trailers are merged into headers | ||||||||
| MetaDir directory | .web | svdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | svdh | D | |||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | svdh | D | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | D | |||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sv | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | ||||||||
| Options [+|-]Option [[+|-]Option] ... | All | svdh | C | |||||
| Definiert, welche Eigenschaften oder Funktionen in einem bestimmten Verzeichnis verfügbar sind | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | D | |||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | X | ||||||
| Sed command for filtering response content | svdh | B | ||||||
| Passes environment variables from the shell | ||||||||
| PidFile Dateiname | logs/httpd.pid | s | M | |||||
| Datei, in welcher der Server die Prozess-ID des Daemons ablegt | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | D | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | Off | sv | X | |||||
| Turn the echo server on or off | ||||||||
| ProxyTimeout seconds | sv | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | D | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| RLimitNPROC Zahl|max [Zahl|max] | svdh | C | ||||||
| Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet werden können, der ihrerseits von Apache-Kinprozessen gestartet wurden | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | D | |||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile Dateipfad | logs/apache_status | s | M | |||||
| Ablageort der Datei, die zur Speicherung von Daten zur Koordinierung der Kindprozesse verwendet wird | ||||||||
| UserDir directory-filename [directory-filename] ... | sv | B | ||||||
| Location of the user-specific directories | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | D | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | D | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root diff --git a/docs/manual/mod/quickreference.html.en b/docs/manual/mod/quickreference.html.en index 77604655..d1a7e6bb 100644 --- a/docs/manual/mod/quickreference.html.en +++ b/docs/manual/mod/quickreference.html.en @@ -121,7 +121,7 @@ type | ||||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports that are allowed to CONNECT through the
@@ -407,7 +407,7 @@ which no other media type configuration could be found.
| ||||||||
| DeflateMemLevel value | 9 | sv | E | |||||
| How much memory should be used by zlib for compression | ||||||||
| DeflateWindowSize value | 15 | sv | E | |||||
| Zlib compression window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts are denied access to the server | ||||||||
| <Directory directory-path> ... </Directory> | sv | C | ||||||
| Enclose a group of directives that apply only to the @@ -426,7 +426,7 @@ the contents of file-system directories matching a regular expression. | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| Toggle trailing slash redirects on or off | ||||||||
| DocumentRoot directory-path | "/usr/local/apache/ + | sv | C | |||||
| Directory that forms the main document tree visible from the web | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -556,10 +556,10 @@ presence or absence of a specific module | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | svdh | E | ||||||
| contains version dependent configuration | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | B | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | D | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | D | |||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | D | |||||
| Action if no coordinates are given when calling an imagemap | ||||||||
| Include file-path|directory-path|wildcard | svd | C | ||||||
| Includes other configuration files from within the server configuration files | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sv | C | |||||
| Controls whether the server merges consecutive slashes in URLs. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Determines whether trailers are merged into headers | ||||||||
| MetaDir directory | .web | svdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | svdh | D | |||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | svdh | D | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | D | |||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sv | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | ||||||||
| Options [+|-]option [[+|-]option] ... | FollowSymlinks | svdh | C | |||||
| Configures what features are available in a particular directory | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | D | |||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | X | ||||||
| Sed command for filtering response content | svdh | B | ||||||
| Passes environment variables from the shell | ||||||||
| PidFile filename | logs/httpd.pid | s | M | |||||
| File where the server records the process ID of the daemon | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | D | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | Off | sv | X | |||||
| Turn the echo server on or off | ||||||||
| ProxyTimeout seconds | sv | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | D | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| RLimitNPROC number|max [number|max] | svdh | C | ||||||
| Limits the number of processes that can be launched by processes launched by Apache httpd children | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | D | |||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile file-path | logs/apache_runtime + | s | M | |||||
| Location of the file used to store coordination data for the child processes | ||||||||
| UserDir directory-filename [directory-filename] ... | sv | B | ||||||
| Location of the user-specific directories | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | D | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | D | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root diff --git a/docs/manual/mod/quickreference.html.es b/docs/manual/mod/quickreference.html.es index 441b489f..735c21c0 100644 --- a/docs/manual/mod/quickreference.html.es +++ b/docs/manual/mod/quickreference.html.es @@ -124,7 +124,7 @@ type | ||||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports that are allowed to CONNECT through the
@@ -410,7 +410,7 @@ which no other media type configuration could be found.
| ||||||||
| DeflateMemLevel value | 9 | sv | E | |||||
| How much memory should be used by zlib for compression | ||||||||
| DeflateWindowSize value | 15 | sv | E | |||||
| Zlib compression window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts are denied access to the server | ||||||||
| <Directory directory-path> ... </Directory> | sv | C | ||||||
| Enclose a group of directives that apply only to the @@ -429,7 +429,7 @@ the contents of file-system directories matching a regular expression. | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| Toggle trailing slash redirects on or off | ||||||||
| DocumentRoot directory-path | /usr/local/apache/h + | sv | C | |||||
| Directory that forms the main document tree visible from the web | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -559,10 +559,10 @@ presence or absence of a specific module | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | svdh | E | ||||||
| contains version dependent configuration | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | B | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | D | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | D | |||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | D | |||||
| Action if no coordinates are given when calling an imagemap | ||||||||
| Include [optional|strict] file-path|directory-path|wildcard | svd | C | ||||||
| Includes other configuration files from within the server configuration files | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sv | C | |||||
| Controls whether the server merges consecutive slashes in URLs. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Determines whether trailers are merged into headers | ||||||||
| MetaDir directory | .web | svdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | svdh | D | |||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | svdh | D | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | D | |||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sv | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | ||||||||
| Options [+|-]option [[+|-]option] ... | All | svdh | C | |||||
| Configures what features are available in a particular directory | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | D | |||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | X | ||||||
| Sed command for filtering response content | svdh | B | ||||||
| Passes environment variables from the shell | ||||||||
| PidFile filename | logs/httpd.pid | s | M | |||||
| File where the server records the process ID of the daemon | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | D | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | Off | sv | X | |||||
| Turn the echo server on or off | ||||||||
| ProxyTimeout seconds | sv | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | D | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| RLimitNPROC number|max [number|max] | svdh | C | ||||||
| Limits the number of processes that can be launched by processes launched by Apache httpd children | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | D | |||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile file-path | logs/apache_runtime + | s | M | |||||
| Location of the file used to store coordination data for the child processes | ||||||||
| UserDir directory-filename [directory-filename] ... | sv | B | ||||||
| Location of the user-specific directories | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | D | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | D | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root diff --git a/docs/manual/mod/quickreference.html.fr.utf8 b/docs/manual/mod/quickreference.html.fr.utf8 index d5124f3c..251645af 100644 --- a/docs/manual/mod/quickreference.html.fr.utf8 +++ b/docs/manual/mod/quickreference.html.fr.utf8 @@ -134,7 +134,7 @@ en faisant intervenir les expressions rationnelles | ||||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Associer le chemin entier à l'alias dans une section location. | ||||||||
| Allow from all|hôte|env=[!]variable d'environnement -[hôte|env=[!]variable d'environnement] ... | dh | E | ||||||
| Spécifie quels hôtes peuvent accéder à une certaine zone du +[hôte|env=[!]variable d'environnement] ... | dh | |||||||
| Spécifie quels hôtes peuvent accéder à une certaine zone du serveur | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports autorisés à se CONNECTer à travers le
@@ -491,7 +491,7 @@ autre type de média n'avait été trouvé.
| ||||||||
| Define nom-paramètre [valeur-paramètre] | svd | C | ||||||
| Permet de définir une variable | ||||||||
| DeflateAlterETag AddSuffix|NoChange|Remove | AddSuffix | sv | E | |||||
| Comment l'en-tête sortant ETag doit être modifié au cours de la compression | ||||||||
| DeflateBufferSize valeur | 8096 | sv | E | |||||
| Taille du fragment que zlib devra comprimer en une seule + | ||||||||
| DeflateBufferSize valeur | 8096 | sv | E | |||||
| Taille du fragment que zlib devra compresser en une seule fois | ||||||||
| DeflateCompressionLevel valeur | sv | E | ||||||
| Le niveau de compression que nous appliquons à la sortie | ||||||||
| DeflateWindowSize valeur | 15 | sv | E | |||||
| Taille de la fenêtre de compression zlib | ||||||||
| Deny from all|hôte|env=[!]variable d'environnement -[hôte|env=[!]variable d'environnement] ... | dh | E | ||||||
| Définit quels hôtes ne sont pas autorisés à accéder au +[hôte|env=[!]variable d'environnement] ... | dh | |||||||
| Définit quels hôtes ne sont pas autorisés à accéder au serveur | ||||||||
| <Directory chemin répertoire> ... </Directory> | sv | C | ||||||
| Regroupe un ensemble de directives qui ne s'appliquent @@ -529,7 +529,7 @@ du système de fichiers correspondant à une expression rationnelle< fin" | ||||||||
| DocumentRoot chemin répertoire | "/usr/local/apache/ + | sv | C | |||||
| Racine principale de l'arborescence des documents visible depuis Internet | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Détermine si les privilèges requis par dtrace sont + | ||||||||
| DTracePrivileges On|Off | Off | s | ||||||
| Détermine si les privilèges requis par dtrace sont activés. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Enregistre toutes les entrées dans le journal des erreurs | ||||||||
| ForceType type médium|None | dh | C | ||||||
| Force le type de médium spécifié dans le champ d'en-tête HTTP Content-Type pour les fichiers correspondants | ||||||||
| ForensicLog nom-fichier|pipe | sv | E | ||||||
| Définit le nom de fichier du journal légal | ||||||||
GlobalLogfile|pipe
+| GlobalLog file|pipe
format|nickname
[env=[!]environment-variable|
expr=expression] | s | B | Définit le nom et le format du fichier journal | | ||||
| <IfVersion [[!]opérateur] version> ... </IfVersion> | svdh | E | ||||||
| Contient des portions de configuration dépendantes de la version | ||||||||
| ImapBase map|referer|URL | http://nom_serveur/ + | svdh | B | |||||
Valeur par défaut de la directive base des
+ | ||||||||
| ImapBase map|referer|URL | http://nom_serveur/ + | svdh | ||||||
Valeur par défaut de la directive base des
fichiers imagemap | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Action à entreprendre par défaut lorsqu'un fichier imagemap + | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | ||||||
| Action à entreprendre par défaut lorsqu'un fichier imagemap est invoqué avec des coordonnées qui ne correspondent à aucune cible | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action à entreprendre si aucune coordonnée n'est fournie + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | ||||||
| Action à entreprendre si aucune coordonnée n'est fournie lorsqu'on invoque un fichier imagemap | ||||||||
| Include chemin-fichier|chemin-répertoire|wildcard | svd | C | ||||||
| Inclut d'autres fichiers de configuration dans un des fichiers de configuration du serveur | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Temps d'attente avant de réessayer, doublé à chaque erreur consécutive | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| Le nombre d'erreurs avant de se tourner vers un autre CA | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Définit si les informations à propos des domaines gérés - sont ajoutés ou non à server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Définit si les informations à propos des domaines gérés
+ sont ajoutés ou non à server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Active l'agrafage pour les certificats non gérés par mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Active l'agrafage pour un ou plusieurs domaines. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Détermine si les données supplémentaires (trailers) sont fusionnées avec les en-têtes | ||||||||
| MetaDir répertoire | .web | svdh | E | |||||
| Le nom du répertoire où trouver les fichiers de + | ||||||||
| MetaDir répertoire | .web | svdh | ||||||
| Le nom du répertoire où trouver les fichiers de métainformations dans le style du CERN | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Active le traitement des métafichiers du CERN | ||||||||
| MetaSuffix suffixe | .meta | svdh | E | |||||
| Suffixe du fichier contenant les métainformations dans le + | ||||||||
| MetaFiles on|off | off | svdh | ||||||
| Active le traitement des métafichiers du CERN | ||||||||
| MetaSuffix suffixe | .meta | svdh | ||||||
| Suffixe du fichier contenant les métainformations dans le style du CERN | ||||||||
| MimeMagicFile chemin-fichier | sv | E | ||||||
| Active la détermination du type MIME en se basant sur le contenu du fichier et en utilisant le fichier magique @@ -999,7 +999,7 @@ connexion SSL à la demande | ||||||||
| Options [+|-]option [[+|-]option] ... | FollowSymlinks | svdh | C | |||||
| Définit les fonctionnalités disponibles pour un répertoire particulier | ||||||||
| Order ordre | Deny,Allow | dh | E | |||||
| Définit le statut d'accès par défaut et l'ordre dans lequel + | ||||||||
| Order ordre | Deny,Allow | dh | ||||||
Définit le statut d'accès par défaut et l'ordre dans lequel
les directives Allow et
Deny sont évaluées. | ||||||||
| OutputSed commande-sed | dh | |||||||
| Commande sed pour le filtrage des contenus de type @@ -1009,7 +1009,7 @@ réponse | ||||||||
| PidFile nom fichier | logs/httpd.pid | s | M | |||||
| Ficher dans lequel le serveur enregistre l'identificateur de processus du démon | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Fait un compromis entre d'une part l'efficacité et la + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | ||||||
| Fait un compromis entre d'une part l'efficacité et la vitesse de traitement et d'autre part la sécurité à l'encontre des codes malicieux supportant les privilèges. | ||||||||
| Protocol protocole | sv | C | ||||||
| Protocole pour une socket d'écoute | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information fournie dans l'en-tête de réponse HTTP
Via pour les requêtes mandatées | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Demande à ce module de laisser mod_proxy_http
+ | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | ||||||
Demande à ce module de laisser mod_proxy_http
gérer la requête | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Vérifie si la variable d'environnement REDIRECT_URL est pleinement qualifiée | ||||||||
| RewriteBase chemin_URL | dh | E | ||||||
| Définit l'URL de base pour les réécritures au niveau répertoire | ||||||||
| RewriteCond - chaîne_de_test expression_de_comparaison [drapeaux] | svdh | E | ||||||
| Définit une condition qui devra être satisfaite pour que + TestString [!]CondPattern [flags] | svdh | E | ||||||
| Définit une condition qui devra être satisfaite pour que la réécriture soit effectuée | ||||||||
| RewriteEngine on|off | off | svdh | E | |||||
| Active ou désactive l'exécution du @@ -1230,14 +1230,14 @@ recherche de mots-clés | ||||||||
| RewriteOptions Options | svdh | E | ||||||
| Configure certaines options spéciales pour le moteur de réécriture | ||||||||
| RewriteRule - Modèle Substitution [drapeaux] | svdh | E | ||||||
| Définit les règles pour le moteur de réécriture | svdh | E | ||||||
| Définit les règles pour le moteur de réécriture | ||||||||
| RLimitCPU secondes|max [secondes|max] | svdh | C | ||||||
| Limite le temps CPU alloué aux processus initiés par les processus enfants d'Apache httpd | ||||||||
| RLimitMEM octets|max [octets|max] | svdh | C | ||||||
| Limite la mémoire allouée aux processus initiés par les processus enfants d'Apache httpd | ||||||||
| RLimitNPROC nombre|max [nombre|max] | svdh | C | ||||||
| Limite le nombre de processus qui peuvent être initiés par les processus initiés par les processus enfants d'Apache httpd | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction entre le contrôle d'accès en fonction de l'hôte + | ||||||||
| Satisfy Any|All | All | dh | ||||||
| Interaction entre le contrôle d'accès en fonction de l'hôte et l'authentification utilisateur | ||||||||
| ScoreBoardFile chemin fichier | logs/apache_runtime + | s | M | |||||
| Chemin du fichier où sont stockées les données concernant la coordination des processus enfants | ||||||||
| UserDir nom-répertoire [nom-répertoire] ... | sv | B | ||||||
| Chemin des répertoires propres à un utilisateur | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Détermine si le serveur virtuel peut exécuter des + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | ||||||
| Détermine si le serveur virtuel peut exécuter des sous-processus, et définit les privilèges disponibles pour ces dernier. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assigne des privilèges au choix aux sous-processus créés + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | |||||||
| Assigne des privilèges au choix aux sous-processus créés par un serveur virtuel. | ||||||||
| VHostGroup identifiant-groupe-unix | v | X | ||||||
| Définit l'identifiant du groupe sous lequel s'exécute un + | ||||||||
| VHostGroup identifiant-groupe-unix | v | |||||||
| Définit l'identifiant du groupe sous lequel s'exécute un serveur virtuel. | ||||||||
| VHostPrivs [+-]?nom-privilège [[+-]?nom-privilège] ... | v | X | ||||||
| Assigne des privilèges à un serveur virtuel. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Détermine si le serveur s'exécute avec une sécurité avancée + | ||||||||
| VHostPrivs [+-]?nom-privilège [[+-]?nom-privilège] ... | v | |||||||
| Assigne des privilèges à un serveur virtuel. | ||||||||
| VHostSecure On|Off | On | v | ||||||
| Détermine si le serveur s'exécute avec une sécurité avancée pour les serveurs virtuels. | ||||||||
| VHostUser identifiant-utilisateur-unix | v | X | ||||||
| Définit l'identifiant utilisateur sous lequel s'exécute un + | ||||||||
| VHostUser identifiant-utilisateur-unix | v | |||||||
| Définit l'identifiant utilisateur sous lequel s'exécute un serveur virtuel. | ||||||||
| VirtualDocumentRoot répertoire-interpolé|none | none | sv | E | |||||
| Permet une configuration dynamique de la racine des documents d'un serveur virtuel donné | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| パス末尾のスラッシュでリダイレクトするかどうかのオンオフをトグルさせる | ||||||||
| DocumentRoot directory-path | /usr/local/apache/h + | sv | C | |||||
| ウェブから見えるメインのドキュメントツリーになる ディレクトリ | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| エラーログにすべての入力データをダンプ | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| エラーログにすべての出力データをダンプ | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -531,10 +531,10 @@ if file exists at startup | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | svdh | E | ||||||
| バージョン依存の設定を入れる | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | B | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | D | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | D | |||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | D | |||||
| Action if no coordinates are given when calling an imagemap | ||||||||
| Include file-path|directory-path | svd | C | ||||||
| サーバ設定ファイル中から他の設定ファイルを取り込む | ||||||||
| IncludeOptional file-path|directory-path|wildcard | svd | C | ||||||
| Includes other configuration files from within @@ -712,7 +712,7 @@ simultaneously | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sv | C | |||||
| Controls whether the server merges consecutive slashes in URLs. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Determines whether trailers are merged into headers | ||||||||
| MetaDir directory | .web | svdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | svdh | D | |||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | svdh | D | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | D | |||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sv | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | svdh | B | ||||||
| シェルからの環境変数を渡す | ||||||||
| PidFile filename | logs/httpd.pid | s | M | |||||
| デーモンのプロセス ID をサーバが記録するためのファイル | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | D | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | Off | sv | X | |||||
| エコーサーバの有効無効を設定します。 | ||||||||
| ProxyTimeout seconds | 300 | sv | E | |||||
| プロキシされたリクエストのネットワークタイムアウト | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
プロキシされたリクエストの Via HTTP 応答ヘッダ
により提供される情報 | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | D | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| User unix-userid | #-1 | s | B | |||||
| The userid under which the server will answer requests | ||||||||
| UserDir directory-filename [directory-filename] ... | sv | B | ||||||
| ユーザ専用ディレクトリの位置 | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | D | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | D | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root diff --git a/docs/manual/mod/quickreference.html.ko.euc-kr b/docs/manual/mod/quickreference.html.ko.euc-kr index 4fd2ab85..294be676 100644 --- a/docs/manual/mod/quickreference.html.ko.euc-kr +++ b/docs/manual/mod/quickreference.html.ko.euc-kr @@ -117,7 +117,7 @@ type | ||||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports that are allowed to CONNECT through the
@@ -387,7 +387,7 @@ which no other media type configuration could be found.
| ||||||||
| DeflateMemLevel value | 9 | sv | E | |||||
| zlibÀÌ ¾ÐÃàÇҶ§ »ç¿ëÇϴ ¸® | ||||||||
| DeflateWindowSize value | 15 | sv | E | |||||
| Zlib ¾ÐÃà window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | D | ||||||
| Controls which hosts are denied access to the server | ||||||||
| <Directory directory-path> ... </Directory> | sv | C | ||||||
| Enclose a group of directives that apply only to the @@ -405,7 +405,7 @@ the contents of file-system directories matching a regular expression. | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| ¸¶Áö¸· ½½·¡½¬ ¸®´ÙÀ̷º¼ÇÀ» Ű°í ²ö´Ù | ||||||||
| DocumentRoot directory-path | "/usr/local/apache/ + | sv | C | |||||
| Directory that forms the main document tree visible from the web | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -715,7 +715,7 @@ simultaneously | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| Options [+|-]option [[+|-]option] ... | FollowSymlinks | svdh | C | |||||
| Configures what features are available in a particular directory | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | D | |||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | X | ||||||
| Sed command for filtering response content | svdh | B | ||||||
| ½©¿¡¼ ȯ°溯¼ö¸¦ °¡Á®¿´Ù | ||||||||
| PidFile filename | logs/httpd.pid | s | M | |||||
| File where the server records the process ID of the daemon | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | D | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | sv | X | ||||||
| echo ¼¹ö¸¦ Ű°í ²ö´Ù | ||||||||
| ProxyTimeout seconds | sv | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | D | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| RLimitNPROC number|max [number|max] | svdh | C | ||||||
| Limits the number of processes that can be launched by processes launched by Apache httpd children | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | D | |||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile file-path | logs/apache_runtime + | s | M | |||||
| Location of the file used to store coordination data for the child processes | ||||||||
| User unix-userid | #-1 | s | B | |||||
| The userid under which the server will answer requests | ||||||||
| UserDir directory-filename | public_html | sv | B | |||||
| »ç¿ëÀں° µð·ºÅ丮 À§ġ | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | D | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | D | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root diff --git a/docs/manual/mod/quickreference.html.tr.utf8 b/docs/manual/mod/quickreference.html.tr.utf8 index be1d9955..9b8b8099 100644 --- a/docs/manual/mod/quickreference.html.tr.utf8 +++ b/docs/manual/mod/quickreference.html.tr.utf8 @@ -125,7 +125,7 @@ type | ||||||||
| AliasPreservePath OFF|ON | OFF | skd | T | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | K | ||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sk | E | |||||
Ports that are allowed to CONNECT through the
@@ -411,7 +411,7 @@ türünü belirlerdi. | ||||||||
| DeflateMemLevel value | 9 | sk | E | |||||
| How much memory should be used by zlib for compression | ||||||||
| DeflateWindowSize value | 15 | sk | E | |||||
| Zlib compression window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | K | ||||||
| Controls which hosts are denied access to the server | ||||||||
<Directory dizin-yolu>
... </Directory> | sk | Ç | ||||||
| Sadece ismi belirtilen dosya sistemi dizininde ve bunun @@ -430,7 +430,7 @@ server | sk | Ç | ||||||
| Bir düzenli ifade ile eşleşen dosya sistemi dizinlerinin içeriklerine uygulanacak bir yönerge grubunu sarmalar. | ||||||||
| DirectorySlash On|Off | On | skdh | T | |||||
| Bölü çizgisi ile biten yönlendirmeleri açar/kapar. | ||||||||
DocumentRoot dizin-yolu | "/usr/local/apache/ + | sk | Ç | |||||
| İstemciye görünür olan ana belge ağacının kök dizinini belirler. | ||||||||
| DTracePrivileges On|Off | Off | s | D | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | K | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | skdh | Ç | ||||||
Önceki bir <If> veya <ElseIf> bölümünün koşulu, çalışma anında bir istek tarafından yerine getirilmediği takdirde uygulanacak yönergeleri içerir | skdh | Ç | ||||||
| Belirtilen bölüm adının varlığı veya yokluğuna bağlı olarak çalıştırılacak yönergeleri sarmalar. | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | skdh | E | ||||||
| contains version dependent configuration | ||||||||
| ImapBase map|referer|URL | http://servername/ | skdh | T | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | skdh | T | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | skdh | K | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | skdh | K | |||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | skdh | T | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | skdh | K | |||||
| Action if no coordinates are given when calling an imagemap | ||||||||
Include dosya-yolu|dizin-yolu|joker | skd | Ç | ||||||
| Sunucu yapılandırma dosyalarının başka dosyaları içermesini sağlar. | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | D | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | D | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | D | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | D | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | D | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | D | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | D | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | D | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sk | Ç | |||||
| Sunucunun URL'lerde ardışık bölü çizgilerini birleştirip birleştirmeyeceğini denetler. | ||||||||
| MergeTrailers [on|off] | off | sk | Ç | |||||
| Trailer alanlarının başlığa dahil edilip edilmeyeceğini belirler | ||||||||
| MetaDir directory | .web | skdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | skdh | K | |||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | skdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | skdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | skdh | K | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | skdh | K | |||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sk | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | ||||||||
Options
[+|-]seçenek [[+|-]seçenek] ... | FollowSymlinks | skdh | Ç | |||||
| Belli bir dizinde geçerli olacak özellikleri yapılandırır. | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | K | |||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | D | ||||||
| Sed command for filtering response content | ||||||||
| PassEnv ortam-değişkeni [ortam-değişkeni] ... | skdh | T | ||||||
| Ortam değişkenlerini kabuktan aktarır. | ||||||||
| PidFile dosya | logs/httpd.pid | s | M | |||||
| Ana sürecin süreç kimliğinin (PID) kaydedileceği dosyayı belirler. | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | skd | D | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | skd | K | |||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
Protocol protokol | sk | Ç | ||||||
| Dinlenen bir soket için protokol | ||||||||
| ProtocolEcho On|Off | Off | sk | D | |||||
| Turn the echo server on or off | ||||||||
| ProxyTimeout seconds | sk | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sk | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sk | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sk | K | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | skd | Ç | |||||
| REDIRECT_URL ortam değişkeninin tamamen nitelenmiş olup olmayacağını denetler | ||||||||
ReadBufferSize bayt-sayısı | 8192 | skd | Ç | |||||
| Veriyi okumakta kullanılacak tampon sayısı | ||||||||
RLimitNPROC sayı|max [sayı|max] | skdh | Ç | ||||||
| Apache httpd alt süreçleri tarafından çalıştırılabilecek süreç sayısına sınırlama getirir. | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | K | |||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile dosya-yolu | logs/apache_runtime + | s | M | |||||
| Çocuk süreçler için eşgüdüm verisini saklamakta kullanılan dosyanın yerini belirler. | ||||||||
| User unix-kullanıcısı | #-1 | s | T | |||||
| İsteklere yanıt verecek sunucunun ait olacağı kullanıcıyı belirler. | ||||||||
| UserDir dizin [dizin] ... | sk | T | ||||||
| Kullanıcıya özel dizinlerin yeri | ||||||||
| VHostCGIMode On|Off|Secure | On | k | D | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | k | K | |||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | k | D | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | k | K | ||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | k | D | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | k | D | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | k | D | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | k | K | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | k | K | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | k | K | |||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | k | D | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | k | K | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot hesaplanan-dizin|none | none | sk | E | |||||
| Bir sanal konağın belge kök dizinini devingen olarak yapılandırır. | ||||||||
| VirtualDocumentRootIP hesaplanan-dizin|none | none | sk | E | |||||
| Bir sanal konağın belge kök dizinini devingen olarak yapılandırır. diff --git a/docs/manual/mod/quickreference.html.zh-cn.utf8 b/docs/manual/mod/quickreference.html.zh-cn.utf8 index 01e11188..95c01be0 100644 --- a/docs/manual/mod/quickreference.html.zh-cn.utf8 +++ b/docs/manual/mod/quickreference.html.zh-cn.utf8 @@ -116,7 +116,7 @@ type | ||||||||
| AliasPreservePath OFF|ON | OFF | svd | B | |||||
| Map the full path after the alias in a location. | ||||||||
| Allow from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts can access an area of the +[host|env=[!]env-variable] ... | dh | |||||||
| Controls which hosts can access an area of the server | ||||||||
| AllowCONNECT port[-port] [port[-port]] ... | 443 563 | sv | E | |||||
Ports that are allowed to CONNECT through the
@@ -402,7 +402,7 @@ which no other media type configuration could be found.
| ||||||||
| DeflateMemLevel value | 9 | sv | E | |||||
| How much memory should be used by zlib for compression | ||||||||
| DeflateWindowSize value | 15 | sv | E | |||||
| Zlib compression window size | ||||||||
| Deny from all|host|env=[!]env-variable -[host|env=[!]env-variable] ... | dh | E | ||||||
| Controls which hosts are denied access to the +[host|env=[!]env-variable] ... | dh | |||||||
| Controls which hosts are denied access to the server | ||||||||
| <Directory directory-path> ... </Directory> | sv | C | ||||||
| Enclose a group of directives that apply only to the @@ -421,7 +421,7 @@ the contents of file-system directories matching a regular expression. | ||||||||
| DirectorySlash On|Off | On | svdh | B | |||||
| Toggle trailing slash redirects on or off | ||||||||
| DocumentRoot directory-path | "/usr/local/apache/ + | sv | C | |||||
| Directory that forms the main document tree visible from the web | ||||||||
| DTracePrivileges On|Off | Off | s | X | |||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DTracePrivileges On|Off | Off | s | ||||||
| Determines whether the privileges required by dtrace are enabled. | ||||||||
| DumpIOInput On|Off | Off | s | E | |||||
| Dump all input data to the error log | ||||||||
| DumpIOOutput On|Off | Off | s | E | |||||
| Dump all output data to the error log | ||||||||
| <Else> ... </Else> | svdh | C | ||||||
| Contains directives that apply only if the condition of a @@ -551,10 +551,10 @@ presence or absence of a specific module | ||||||||
| <IfVersion [[!]operator] version> ... </IfVersion> | svdh | E | ||||||
| contains version dependent configuration | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | B | |||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | B | |||||
| Default action when an imagemap is called with coordinates + | ||||||||
| ImapBase map|referer|URL | http://servername/ | svdh | ||||||
Default base for imagemap files | ||||||||
| ImapDefault error|nocontent|map|referer|URL | nocontent | svdh | ||||||
| Default action when an imagemap is called with coordinates that are not explicitly mapped | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | B | |||||
| Action if no coordinates are given when calling + | ||||||||
| ImapMenu none|formatted|semiformatted|unformatted | formatted | svdh | ||||||
| Action if no coordinates are given when calling an imagemap | ||||||||
| Include file-path|directory-path|wildcard | svd | C | ||||||
| Includes other configuration files from within the server configuration files | ||||||||
| MDRequireHttps off|temporary|permanent | off | s | X | |||||
| Redirects http: traffic to https: for Managed Domains. | ||||||||
| MDRetryDelay duration | 30s | s | X | |||||
| Time length for first retry, doubled on every consecutive error. | ||||||||
| MDRetryFailover number | 13 | s | X | |||||
| The number of errors before a failover to another CA is triggered | ||||||||
| MDServerStatus on|off | on | s | X | |||||
| Control if Managed Domain information is added to server-status. | ||||||||
| MDServerStatus on|off | off | s | X | |||||
Control if Managed Domain information is added to server-status. | ||||||||
| MDStapleOthers on|off | on | s | X | |||||
| Enable stapling for certificates not managed by mod_md. | ||||||||
| MDStapling on|off | off | s | X | |||||
| Enable stapling for all or a particular MDomain. | ||||||||
| MDStaplingKeepResponse duration | 7d | s | X | |||||
| Controls when old responses should be removed. | ||||||||
| MergeSlashes ON|OFF | ON | sv | C | |||||
| Controls whether the server merges consecutive slashes in URLs. | ||||||||
| MergeTrailers [on|off] | off | sv | C | |||||
| Determines whether trailers are merged into headers | ||||||||
| MetaDir directory | .web | svdh | E | |||||
| Name of the directory to find CERN-style meta information + | ||||||||
| MetaDir directory | .web | svdh | ||||||
| Name of the directory to find CERN-style meta information files | ||||||||
| MetaFiles on|off | off | svdh | E | |||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | E | |||||
| File name suffix for the file containing CERN-style + | ||||||||
| MetaFiles on|off | off | svdh | ||||||
| Activates CERN meta-file processing | ||||||||
| MetaSuffix suffix | .meta | svdh | ||||||
| File name suffix for the file containing CERN-style meta information | ||||||||
| MimeMagicFile file-path | sv | E | ||||||
| Enable MIME-type determination based on file contents using the specified magic file | ||||||||
| Options [+|-]option [[+|-]option] ... | FollowSymlinks | svdh | C | |||||
| Configures what features are available in a particular directory | ||||||||
| Order ordering | Deny,Allow | dh | E | |||||
| Controls the default access state and the order in which + | ||||||||
| Order ordering | Deny,Allow | dh | ||||||
Controls the default access state and the order in which
Allow and Deny are
evaluated. | ||||||||
| OutputSed sed-command | dh | X | ||||||
| Sed command for filtering response content | svdh | B | ||||||
| Passes environment variables from the shell | ||||||||
| PidFile filename | logs/httpd.pid | s | M | |||||
| File where the server records the process ID of the daemon | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | X | |||||
| Trade off processing speed and efficiency vs security against + | ||||||||
| PrivilegesMode FAST|SECURE|SELECTIVE | FAST | svd | ||||||
| Trade off processing speed and efficiency vs security against malicious privileges-aware code. | ||||||||
| Protocol protocol | sv | C | ||||||
| Protocol for a listening socket | ||||||||
| ProtocolEcho On|Off | Off | sv | X | |||||
| Turn the echo server on or off | ||||||||
| ProxyTimeout seconds | sv | E | ||||||
| Network timeout for proxied requests | ||||||||
| ProxyVia On|Off|Full|Block | Off | sv | E | |||||
Information provided in the Via HTTP response
header for proxied requests | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | E | |||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| ProxyWebsocketFallbackToProxyHttp On|Off | On | sv | ||||||
Instructs this module to let mod_proxy_http handle the request | ||||||||
| QualifyRedirectURL On|Off | Off | svd | C | |||||
| Controls whether the REDIRECT_URL environment variable is fully qualified | ||||||||
| ReadBufferSize bytes | 8192 | svd | C | |||||
| Size of the buffers used to read data | ||||||||
| RLimitNPROC number|max [number|max] | svdh | C | ||||||
| Limits the number of processes that can be launched by processes launched by Apache httpd children | ||||||||
| Satisfy Any|All | All | dh | E | |||||
| Interaction between host-level access control and + | ||||||||
| Satisfy Any|All | All | dh | ||||||
| Interaction between host-level access control and user authentication | ||||||||
| ScoreBoardFile file-path | logs/apache_runtime + | s | M | |||||
| Location of the file used to store coordination data for the child processes | ||||||||
| UserDir directory-filename [directory-filename] ... | sv | B | ||||||
| Location of the user-specific directories | ||||||||
| VHostCGIMode On|Off|Secure | On | v | X | |||||
| Determines whether the virtualhost can run + | ||||||||
| VHostCGIMode On|Off|Secure | On | v | ||||||
| Determines whether the virtualhost can run subprocesses, and the privileges available to subprocesses. | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to subprocesses created + | ||||||||
| VHostCGIPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | |||||||
| Assign arbitrary privileges to subprocesses created by a virtual host. | ||||||||
| VHostGroup unix-groupid | v | X | ||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | X | ||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | X | |||||
| Determines whether the server runs with enhanced security + | ||||||||
| VHostGroup unix-groupid | v | |||||||
| Sets the Group ID under which a virtual host runs. | ||||||||
| VHostPrivs [+-]?privilege-name [[+-]?privilege-name] ... | v | |||||||
| Assign arbitrary privileges to a virtual host. | ||||||||
| VHostSecure On|Off | On | v | ||||||
| Determines whether the server runs with enhanced security for the virtualhost. | ||||||||
| VHostUser unix-userid | v | X | ||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VHostUser unix-userid | v | |||||||
| Sets the User ID under which a virtual host runs. | ||||||||
| VirtualDocumentRoot interpolated-directory|none | none | sv | E | |||||
| Dynamically configure the location of the document root for a given virtual host | ||||||||
| VirtualDocumentRootIP interpolated-directory|none | none | sv | E | |||||
Dynamically configure the location of the document root
diff --git a/docs/manual/mod/worker.html.en b/docs/manual/mod/worker.html.en
index 54fca061..659a3f84 100644
--- a/docs/manual/mod/worker.html.en
+++ b/docs/manual/mod/worker.html.en
@@ -52,6 +52,12 @@
MaxRequestWorkers, which
controls the maximum total number of threads that may be
launched.
+
+ When built as a DSO module, it can be loaded with: + +LoadModule mpm_worker_module modules/mod_mpm_worker.so+ + Topics
Bugfix checklistSee also | ||||||||
| Açıklama: | Çok evreli ve çok süreçli melez bir HTTP sunucusu oluşturan çok süreçlilik modülü. | ||
|---|---|---|---|
| Durum: | MPM | ||
| Flag | +Purpose | +Effect | +Common combos | +
|---|---|---|---|
| Flow Control | |||
| [L] | +Last rule | +Stop processing rules (this pass) | +[R=301,L] [F] [G] | +
| [END] | +Full stop | +Stop all rewrite processing (no re-entry in .htaccess) | +[R=301,END] | +
| [S=N] | +Skip | +Skip next N rules (if/else logic) | ++ |
| [N] | +Next (loop) | +Restart ruleset from the top (caution: loop risk) | ++ |
| [C] | +Chain | +Tie rule to the next; if this fails, skip chained rules | ++ |
| Redirection and Proxying | |||
| [R=code] | +Redirect | +External redirect (default 302). Consider Redirect/RedirectMatch for simple cases | +[R=301,L] [R=302,L] | +
| [P] | +Proxy | +Reverse proxy to target (requires mod_proxy) |
+ [P,QSA] | +
| Access Control | |||
| [F] | +Forbidden | +Return 403 (implies [L]) | ++ |
| [G] | +Gone | +Return 410 (implies [L]) | ++ |
| URL / Query String | |||
| [QSA] | +Query string append | +Append original query string to substitution | +[QSA,L] [P,QSA] | +
| [QSD] | +Query string discard | +Drop original query string entirely | +[R=301,QSD,L] | +
| [B] | +Escape backrefs | +Re-encode special chars in backreferences | +[B,PT] | +
| [NE] | +No escape | +Don't escape special chars in output (pass #, ? through) | +[R=301,NE,L] | +
| Metadata and Handlers | |||
| [E] | +Set env var | +Set an environment variable | +[E=VAR:val,L] | +
| [T] | +MIME type | +Force content type | ++ |
| [H] | +Handler | +Force a content handler | ++ |
| [PT] | +Pass through | +Pass result to next handler (needed with Alias/ScriptAlias) | +[PT,L] | +
| Cookie | |||
| [CO] | +Set cookie | +Set an HTTP cookie on the response | +[CO=name:val:.domain,R=302,L] | +
Exercise care when constructing the argument from backreferences or other +variable expansion. If any part of the argument is derived from user input, +a malicious request may include delimeters or other unexpected values.
+If a literal ':' character is needed in any of the cookie fields, an alternate syntax is available. To opt-in to the alternate syntax, the cookie "Name" should be preceded with a ';' character, and field separators should be diff --git a/docs/manual/rewrite/flags.html.fr.utf8 b/docs/manual/rewrite/flags.html.fr.utf8 index d26678d3..682ca998 100644 --- a/docs/manual/rewrite/flags.html.fr.utf8 +++ b/docs/manual/rewrite/flags.html.fr.utf8 @@ -26,14 +26,13 @@
-Ce document décrit les drapeaux disponibles dans la directive
RewriteRule, en fournissant
des explications détaillées et des exemples.
Introduction
Référence rapide des drapeaux
B (échappement dans les références arrières)
BNP|backrefnoplus (ne pas échapper
l'espace en +)
UnsafePrefixStat
UNCLes drapeaux qui modifient les métadonnées associées à la requête -(T=, H=, E=) n'ont aucun effet dans un contexte de répertoire ou de -fichier htaccess, lorsqu'une substitution (autre que '-') est effectuée -au cours de la même passe du processus de réécriture. -
+Les drapeaux qui modifient les métadonnées associées à la requête (T=, H=, +E=) n'ont aucun effet dans un contexte de +répertoire ou de fichier htaccess, lorsqu'une substitution (autre que +'-') est effectuée au cours de la même passe du processus de réécriture.
Chaque drapeau disponible est présenté ici, avec un exemple d'utilisation.
+Les drapeaux peuvent être combinés : [R=301,L], [P,QSA],
+[E=VAR:val,L]. Cette table les groupe par fonction et les trie
+selon la fréquence de leur utilisation.
| Drapeau | +Fonction | +Effet | +Combinaisons courantes | +
|---|---|---|---|
| Contrôle de flux | |||
| [L] | +Dernière règle | +Arrête le traitement des règles (pour cette passe) | +[R=301,L] [F] [G] | +
| [END] | +Arrêt complet | +Arrête tout le processus de réécriture (pas de réentrance dans .htaccess) | +[R=301,END] | +
| [S=N] | +Saut | +Sauter les N prochaines règles (logique if/else) | ++ |
| [N] | +Instance suivante de la boucle | +Redémarrer le traitement du jeu de règles à partir de la première + (attention : risque de boucle infinie) | ++ |
| [C] | +Chaînage | +Chaîner la règle actuelle à la prochaine ; si la règle actuelle échoue, + sauter les règles chaînées | ++ |
| Redirection et mandatement | |||
| [R=code] | +Redirection | +Redirection externe (par défaut 302). Utilisez Redirect/RedirectMatch pour + les cas simple | +[R=301,L] [R=302,L] | +
| [P] | +Mandatement | +Mandatement inverse vers une cible (nécessite mod_proxy) |
+ [P,QSA] | +
| Contrôle d’accès | |||
| [F] | +Interdiction | +Renvoie 403 (implique [L]) | ++ |
| [G] | +Parti | +Renvoie 410 (implique [L]) | ++ |
| URL / chaîne de paramètres | |||
| [QSA] | +Ajout de la chaîne de paramètres | +Ajout de la chaîne de paramètres originelle à la substitution | +[QSA,L] [P,QSA] | +
| [QSD] | +Suppression de la chaîne de paramètres | +Supprime entièrement la chaîne de paramètres | +[R=301,QSD,L] | +
| [B] | +Échappement des références arrières | +Réencode les caractères spéciaux dans les références arrières | +[B,PT] | +
| [NE] | +Pas d’échappement | +Pas d’échappement des caractères spéciaux dans la sortie (pass #, ? through) | +[R=301,NE,L] | +
| Metadonnées et gestionnaires | |||
| [E] | +Définition d’une variable d’environnement | +Définit une variable d’environnement | +[E=VAR:val,L] | +
| [T] | +Type MIME | +Forçage du type de contenu | ++ |
| [H] | +Gestionnaire | +Forçage d’un gestionnaire de contenu | ++ |
| [PT] | +Transmission résultat | +Transmission du résultat au gestionnaire suivant (requis pour Alias/ScriptAlias) | +[PT,L] | +
| Cookie | |||
| [CO] | +Définir un cookie | +Définir un cookie HTTP pour la réponse | +[CO=name:val:.domain,R=302,L] | +
Pour définir la liste des caractères à échapper de cette manière, voir #flag_bne et #flag_bctls
+Voir Encodage et décodage des URLs pour une +explication détaillée de la manière dont httpd décode les URIs avant la mise en +correspondance des motifs.
+Ce drapeau est disponible à partir de la version 2.4.26 du serveur HTTP Apache.
+Voir Encodage et décodage des URLs pour +découvrir la manière dont l’encodage est géré dans le tube (pipeline) de +réécriture.
+# Réécrire les URLs des anciens produits vers la nouvelle application du +# catalogue, et ajouter un paramètre de traçage — mais seulement pour ceux qui +# sont réécrits. +RewriteRule "^/products/([0-9]+)$" "/catalog/item/$1" [C] +RewriteRule "^/catalog/(.*)$" "/catalog/$1?via=legacy" [QSA]+ + +
Sans le drapeau [C], la seconde règle s’appliquerait aux requêtes qui
+arrivent directement à /catalog/. Le chaînage des deux règles
+permet de s’assurer que la seconde règle ne s’appliquera que si la première
+s’applique.
Avec le drapeau DPI, la partie PATH_INFO de l'URI -réécrit est supprimée.
-Ce drapeau est disponible dans les versions 2.2.12 et supérieures.
-Dans un contexte de répertoire, l'URI mis en comparaison par chaque
-règle RewriteRule est la concaténation des
-valeurs courantes de l'URI et de PATH_INFO.
L'URI courant peut être l'URI initial tel qu'il a été fourni par le +
Avec le drapeau DPI, la partie PATH_INFO +qui a été ajoutée au chemin d’URL réécrit est +supprimée.
+ +Dans un contexte de répertoire, le
+chemin d’URL que compare chaque
+RewriteRule est la concaténation des valeurs courantes du
+chemin d’URL et de PATH_INFO.
Le chemin d’URL actuel peut être le chemin initial tel qu'il a été fourni par le client, le résultat d'une passe précédente du processus de réécriture, -ou le résultat de la règle précédente dans le processus courant de +ou le résultat de la règle précédente de la passe actuelle du processus de réécriture.
-Par contre, la partie PATH_INFO ajoutée à l'URI avant chaque règle ne -reflète que la valeur de PATH_INFO avant la passe courante du processus -de réécriture. En conséquence, si de larges portions de l'URI -correspondent et sont traduites via plusieurs directives +
Par contre, la partie PATH_INFO ajoutée au chemin d’URL avant chaque règle ne
+reflète que la valeur de PATH_INFO avant la passe actuelle du processus
+de réécriture. En conséquence, si de larges portions du chemin d’URL
+correspondent et sont copiées dans une substitution via plusieurs directives
RewriteRule, sans prendre en compte
-quelles parties de l'URI provenaient du PATH_INFO courant, l'URI final
+quelles parties du chemin d’URL provenaient du PATH_INFO actuel, le chemin d’URL final
pourra se voir ajouter plusieurs copies de PATH_INFO.
Utilisez ce drapeau pour toute substitution où la présence du PATH_INFO qui @@ -331,6 +486,17 @@ débute est oublié. PATH_INFO ne sera pas recalculé tant que courante du processus de réécriture ne sera pas achevée. Les règles suivantes de cette passe ne verront que le résultat direct des substitutions, sans aucun PATH_INFO ajouté.
+ +# Requête : /app/script.php/extra/path (PATH_INFO contient /extra/path) +# Sans le drapeau DPI, la substitution serait "script.php/extra/path" et +# pourrait par accident copier PATH_INFO dans le résultat. +RewriteRule "^script\.php(.*)$" "/new-app/handler$1" [DPI]+ + +
Le drapeau DPI supprime /extra/path, de sorte que seul le
+résultat de la substitution est transmis aux règles suivantes ou à la requête
+finale.
L'exemple suivant définit une variable d'environnement nommée 'image' -avec une valeur de '1' si l'URI de la requête correspond à un fichier +avec une valeur de '1' si le chemin d’URL de la requête correspond à un fichier image. Cette variable d'environnement est ensuite utilisée pour exclure une telle requête du journal des accès.
@@ -382,16 +548,82 @@ CustomLog "logs/access_log" combined env=!imageNotez que le même effet peut être obtenu à l'aide de la directive
SetEnvIf. Cette technique
est présentée à titre d'exemple et non de recommandation.
Définir des variables d’environnement pour tracer les réécritures
+ +Parfois, nous souhaitons être au courant de l’état de la situation lorsque +nous effectuons une réécriture. Par exemple, vous voudriez prendre note +que vous avez effectué cette réécriture, de sorte que vous pourriez +ultérieurement voir si une requête est arrivée par l’intermédaire de cette +réécriture. Une solution pour y parvenir est la définition d’une variable +d’environnement.
+ +RewriteEngine on +RewriteRule "^/horse/(.*)" "/pony/$1" [E=rewritten:1]+ + +
Dans la suite de votre jeu de règles, vous pouvez consulter cette variable +d’environnement en utilisant une RewriteCond :
+ +RewriteCond "%{ENV:rewritten}" =1
+
+
+Notez que les variables d’environnements ne survivent pas à une redirection +externe. Vous devez alors utiliser le drapeau [CO] pour définir un cookie.
+ +Dans un contexte de répertoire,
+ une substitution réussie déclenche une redirection interne. Lorsque cela se
+ produit, toutes les variables d’environnement définies au cours de la passe
+ précédente — y compris celles créées avec [E=VAR:VAL] — sont
+ renommées par l’ajout du préfixe REDIRECT_. Une variable que
+ vous avez nommée rewritten devient ainsi
+ REDIRECT_rewritten dans la requête redirigée.
Pour tester la variable renommée, référencez-la avec le préfixe :
+RewriteRule "^/horses/(.*)" "/ponies/$1" [E=rewritten:1]
+
+# À la passe suivante, la variable a été renommée :
+RewriteCond "%{ENV:REDIRECT_rewritten}" =1
+RewriteRule "^/ponies/(.*)" "-" [E=seen_redirect:1,L]
+
+
+ Si la requête est redirigée plusieurs fois, le préfixe est empilé :
+ REDIRECT_REDIRECT_rewritten, et ainsi de suite. Voir Variables REDIRECT_ pour la description
+ complète de ce mécanisme.
L'utilisation du drapeau [END] permet non seulement de terminer le processus de réécriture en cours (comme [L]), mais aussi d'empêcher tout -processus de réécriture ultérieur dans un contexte de répertoire -(htaccess).
+processus de réécriture ultérieur dans un contexte +de répertoire, ce qui en fait le drapeau préféré pour la plupart des +règles de niveau répertoire. + +Dans un contexte de serveur virtuel ou global, [END] et [L] se comportent de +manière identique. La différence entre les deux se situe dans un contexte de +répertoire où [L] interrompt la passe actuelle, mais où le jeu de règles est à +nouveau appliqué à l’URL réécrit. Cela peut provoquer des boucles infinies. +[END] empêche tout processus de réécriture ultérieur en interrompant le cycle.
+ +# Dans .htaccess : routage de toutes les requêtes vers un contrôleur frontal
+# ici, [L] proquerait une boucle infine, pas [END]
+RewriteCond "%{REQUEST_FILENAME}" !-f
+RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteRule "^(.*)$" "/index.php" [END]
+
Ceci ne s'applique pas aux nouvelles requêtes résultant d'une redirection externe.
+ +Voir la discussion Réécritures dans un contexte +de répertoire pour une explication détaillée de la raison pour laquelle [L] +se comporte différemment dans un contexte de répertoire, et des cas où [END] +constitue le bon choix.
+RewriteRule "\.exe" "-" [F]-
Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce -qui signifie que l'URI de la requête n'est pas modifié. Il n'y a aucune -raison de réécrire un URI, si vous avez l'intention d'interdire la +
Cet exemple utilise la syntaxe "-" pour la cible de réécriture, ce qui +signifie que le chemin d’URL de la requête n'est pas modifié. Il n'y a aucune +raison de réécrire un chemin d’URL, si vous avez l'intention d'interdire la requête.
Lorsqu'on utilise [F], [L] est implicite - c'est à dire que la
@@ -476,30 +708,11 @@ traitée. Ce drapeau correspond à la commande Perl last
-
Si vous utilisez des règles RewriteRule dans des fichiers
-.htaccess ou des sections <Directory>, il est important d'avoir quelques
-notions sur la manière dont les règles sont traitées. Pour simplifier,
-une fois les règles traitées, la requête réécrite est passée à nouveau
-au moteur d'interprétation des URLs afin que ce dernier puisse la
-traiter. Il est possible qu'au cours du traitement de la requête
-réécrite, le fichier .htaccess ou la section <Directory> soient à nouveau
-rencontrés, entraînant un nouveau traitement du jeu de règles depuis le
-début. Cette situation se présente le plus souvent lorsqu'une des règles
-provoque une redirection - interne ou externe - ce qui réinitialise le
-traitement de la requête.
Si vous utilisez des directives RewriteRule dans un de ces contextes,
-il importe par conséquent de prévoir explicitement des étapes permettant
-d'éviter un bouclage infini sur les règles,
-et de ne pas compter seulement sur
-le drapeau [L] pour terminer l'exécution d'une série de règles, comme
-décrit ci-dessous.
Un autre drapeau, [END], permet non seulement d'interrompre le cycle -courant du processus de réécriture, mais aussi d'empêcher toute -réécriture ultérieure dans le contexte de répertoire (htaccess). Ceci ne -s'applique pas aux nouvelles requêtes résultant de redirections -externes.
+Dans un contexte de répertoire, [L] +arrête la passe actuelle du jeu de règles, mais la requête réécrite peut être +traitée à nouveau depuis le début du jeu de règles — ce qui peut provoquer des +boucles infinies. Pour éviter ce problème, utilisez le drapeau [END], ou consultez le document Réécritures au niveau répertoire pour une +description détaillée du problème et des solutions alternatives.
Dans l'exemple donné ici, toute requête est réécrite en
index.php, la requête originale étant ajoutée comme chaîne
@@ -532,25 +745,21 @@ ceci jusqu'il n'y ait plus de A à remplacer.
Vous pouvez vous représenter ce traitement comme une boucle
while : tant que le modèle de la règle correspond (c'est à
-dire, tant que l'URI contient un A),
+dire, tant que le chemin d’URL contient un A),
effectuer la substitution (c'est à dire, remplacer le A par
un B).
A partir de la version 2.4.8, ce module renvoie une erreur après -10000 itérations afin d'éviter les boucles infinies. Ce nombre maximum -d'itération peut être modifié via le drapeau N.
-# On veut remplacer 1 caractère à chaque itération de la boucle -RewriteRule "(.+)[><;]$" "$1" [N=32000] -# ... ou s'arrêter après 10 itérations -RewriteRule "(.+)[><;]$" "$1" [N=10]- +
À utiliser avec d’extrêmes précautions. Si aucune condition d’arrêt n’est +définie, ce drapeau fait que la règle boucle à l’infini. Dans la plupart des +cas, il est préférable d’utiliser [L] à la place de [N], à moins que vous n’ayez +vraiment l’intention de configurer un traitement itératif.
Avec le drapeau [NC], le modèle de la règle RewriteRule est comparé à la requête de
manière insensible à la casse. C'est à dire que cette comparaison
-s'effectue sans tenir compte des majuscules/minuscules dans l'URI
+s'effectue sans tenir compte des majuscules/minuscules dans le chemin URL
comparé.
Dans l'exemple suivant, toute requête pour un fichier image sera @@ -592,6 +801,10 @@ aurait été converti en son équivalent hexadécimal, < qui aurait provoqué un code d'erreur "404 Not Found".
+Voir Encodage et décodage des URLs pour une +description complète de la manière dont httpd encode et décode les URLs lors de +la réécriture.
+# Ne réécrire que les requêtes directes vers le contrôleur frontal, pas les
+# sous-requêtes des inclusions SSI ou de mod_dir.
+RewriteCond "%{REQUEST_FILENAME}" !-f
+RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteRule "^(.*)$" "/app/index.php?page=$1" [NS,L]
+
+
-Vous devez vous assurer que la chaîne de substitution soit un URI valide
+Vous devez vous assurer que la chaîne de substitution soit un URL valide
(commençant typiquement par http://nom-serveur)
qui puisse être traitée par le module mod_proxy. Dans
le cas contraire, le module mandataire vous renverra une erreur.
@@ -647,12 +868,17 @@ local.
Lors de la construction de l'URL cible de la règle, il convient - de prendre en compte l'impact en matière de sécurité qu'aura le - fait de permettre au client d'influencer le jeu d'URLs pour - lesquelles votre serveur agira en tant que mandataire. - Assurez-vous que la partie protocole://nom-serveur de l'URL soit - fixe, ou ne permette pas au client de l'influencer induement.
+Lors de la construction de l'URL cible de la règle, il convient de + prendre en compte l'impact en matière de sécurité qu'aura le fait de + permettre au client d'influencer le jeu d'URLs pour lesquelles votre + serveur agira en tant que mandataire. Si une partie de l’URL cible est + dérivée de l’entrée de l’utilisateur (références arrières, chaînes de + paramètres, etc.), un attaquant pourra être capable de faire que votre + serveur génère des requêtes vers des hôtes internes ou externes + arbitraires. Cette vulnérabilité est connue sous le nom de falsification + de requête côté serveur (Server-Side Request Forgery — SSRF). Assurez-vous + que la partie protocole://nom-serveur de l'URL soit fixe, ou ne permette + pas au client de l'influencer indument.
Par défaut, la cible (ou chaîne de substitution) d'une règle
RewriteRule est sensée être un chemin de fichier. Avec le drapeau [PT],
-par contre, elle est traitée comme un URI. Autrement dit, avec le
+par contre, elle est traitée comme un chemin URL. Autrement dit, avec le
drapeau [PT], le résultat de la règle RewriteRule est passé à nouveau au
système de mise en correspondance des URLs avec le système de fichiers,
de façon à ce que les systèmes de mise en correspondance basés sur les
@@ -714,7 +940,7 @@ réécrire vers -.
-Quand l'URI de remplacement contient une chaîne de requête, le
+Quand l'URL de remplacement contient une chaîne de requête, le
comportement par défaut de la règle RewriteRule est de supprimer la
query string (il s'agit des paramètres éventuellement passés dans l'URL après le
caractère ?, usuellement pour les formulaires traités par la
@@ -737,10 +963,10 @@ autrement dit, la chaîne de requête (query string) exis
-Lorsque l'URI de la requête contient une chaîne de paramètres, et si
+Lorsque l'URL de la requête contient une chaîne de paramètres, et si
l'URI cible n'en contient pas, le comportement par défaut de la
directive RewriteRule consiste à copier cette
-chaîne de paramètres dans l'URI cible. Avec le drapeau [QSD], la chaîne
+chaîne de paramètres dans l'URL cible. Avec le drapeau [QSD], la chaîne
de paramètres est supprimée.
-Si l'URI cible possède une chaîne de paramètres, le comportement par +Si l'URL cible possède une chaîne de paramètres, le comportement par défaut sera respecté - c'est à dire que la chaîne de paramètres originale sera supprimée et remplacée par la chaîne de paramètres de -l'URI cible. +l'URL cible.
+# Redirection des anciens URLs « search » vers le nouveau chemin en supprimant +# la chaîne de paramètres. /search?q=term&page=2 devient /find (chaîne de +# paramètres supprimée) +RewriteRule "^/search" "/find" [QSD,R=301,L]+ +
Par exemple, si une application patrimoniale attend une chaîne de paramètres +qui contient elle-même un point d’interrogation :
+ +# Associe /lookup/foo?bar à /app?type=foo?bar +# Sans [QSL], le premier ? dans la substitution couperait le chemin, en +# produisant incorrectement /app avec la chaîne de paramètres type=foo?bar. +# Avec [QSL], le DERNIER ? est utilisé comme délimiteur. +RewriteRule "^/lookup/(.*)" "/app?type=$1" [QSL,PT]+ + +
Sans [QSL], la substitution /app?type=foo?bar serait coupée au
+premier ?, perdant de ce fait le point d’interrogation littéral de
+la valeur.
Ce drapeau est disponible à partir de la version 2.4.19 du serveur HTTP Apache.
@@ -804,7 +1050,7 @@ codes de redirection en utilisant leurs noms symboliques :
Vous utiliserez presque toujours [R] en conjonction avec [L] (c'est à
-dire [R,L]), car employé seul, le drapeau [R] préfixe l'URI avec
+dire [R,L]), car employé seul, le drapeau [R] préfixe le chemin URL avec
http://cet-hôte[:ce-port], mais passe ensuite cette adresse
à la règle suivante, ce qui provoquera le plus souvent des
avertissements 'Invalid URI in request'.
@@ -814,19 +1060,32 @@ avertissements 'Invalid URI in request'.
spécification de HTTP. Utiliser un code d'état non reconnu provoquera une erreur
500 et l'enregistrement d'un message dans le journal des erreurs.
Lorsqu’un code d’état en dehors de l’intervalle 300-399 est spécifié (par
+exemple [R=403] ou [R=410]), la chaîne de substitution
+est ignorée. L’URL que vous avez saisi comme cible n’est pas servi au client. À
+la place, httpd renvoie le code d’état spécifié et le traite de la manière
+habituelle pour les réponses d'erreur (entre autres tout ErrorDocument configuré). Si vous souhaitez interdire
+l’accès, les drapeaux [F] et [G]
+sont des solutions plus adaptées pour exprimer la même intention.
# Redirection des requêtes pour l’ancien chemin de la documentation vers le +# nouvel emplacement. +RewriteRule "^/docs/(.*)$" "http://docs.example.com/$1" [R=301,L]+ +
Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir
-exécuter. La syntaxe du drapeau [S] est [S=N], où
-N correspond au nombre de règles à sauter (sous
-réserve que la règle RewriteRule corresponde et qu'au moins
-une condition RewriteCond
-préalable soit vérifiée).
-Ceci peut s'interpréter comme une instruction
-goto dans votre jeu de règles de réécriture. Dans
-l'exemple suivant, nous ne voulons exécuter la règle RewriteRule que si l'URI demandé ne
-correspond pas à un fichier existant.
Le drapeau [S] sert à sauter des règles que vous ne voulez pas voir exécuter.
+La syntaxe du drapeau [S] est [S=N], où N correspond au nombre
+de règles à sauter (sous réserve que la règle RewriteRule corresponde et qu'au moins une
+condition RewriteCond préalable soit
+vérifiée). Ceci peut s'interpréter comme une instruction goto
+dans votre jeu de règles de réécriture. Dans l'exemple suivant, nous ne voulons
+exécuter la règle RewriteRule que si
+le chemin URL demandé ne correspond pas à un fichier existant.
# La requête concerne-t-elle un fichier qui n'existe pas ?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
@@ -837,8 +1096,6 @@ RewriteRule "(.*\.gif)" "images.php?$1"
RewriteRule "(.*\.html)" "docs.php?$1"
-
-
Cette technique trouve son utilité dans le fait qu'une directive
RewriteCond ne s'applique
qu'à la règle qui la suit immédiatement. Ainsi, si vous voulez
@@ -909,9 +1166,31 @@ utiliser le drapeau L pour terminer la séquence
Il est nécessaire de définir ce drapeau pour permettre à une réécriture - de continuer si la requête HTTP en cours d'écriture possède un point d'interrogation encodé, « %3f », et si le résultat réécrit contient un « ? » dans - la substitution. Cela protège d'une URL malveillante tirant avantage d'une - capture et d'une resubstitution du point d'interrogation encodé.
+ de continuer si la requête HTTP en cours d'écriture possède un point + d'interrogation encodé, « %3f », et si le résultat réécrit + contient un « ? » dans la substitution. Cela protège d'une URL + malveillante tirant avantage d'une capture et d'une resubstitution du point + d'interrogation encodé. + +# Un contrôleur frontal PHP qui route toutes les requêtes via un élément de la
+# chaîne de paramètres.
+# Sans UnsafeAllow3F, une requête comme /page%3Fname=test renverrait 403 Forbidden,
+# car le substitution réécrite contient '?' alors que la requête originelle
+# contient un caractère encodé '%3F'.
+RewriteCond "%{REQUEST_FILENAME}" !-f
+RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteRule "(.+)" "index.php?route=$1" [L,QSA,UnsafeAllow3F]
+
+
+%3F saisi par l’utilisateur dans la requête ne peut pas être
+exploité pour manipuler la chaîne de paramètres de la cible de substitution.
+Préférez autant que possible la restructuration des URLs pour éviter les points
+d’interrogation encodés.
+L pour terminer la séquence
l'échelle du serveur qui commencent par une variable ou une référence
arrière et se résolvent en un chemin du système de fichiers. Ces
substitutions ne sont pas préfixées par la racine des documents. Cela protège
- d'une URL malveillante faisant correspondre la substitution expansée à un
+ d'un URL malveillant faisant correspondre la substitution développée à un
emplacement non souhaité du système de fichiers.
Disponible à partir de la version 2.4.60 du serveur HTTP Apache.
-# Cette règle lance la substitution avec une référence arrière. +# Depuis la version 2.4.60, cette opération est rejetée par défaut pour empêcher +# le chemin développé de s’échapper de la racine des documents (CVE-2024-38475). +# N’ajoutez UnsafePrefixStat qu’après avoir vérifié que la substitution ne peut +# pas se résoudre en un chemin du système de fichiers en dehors de la racine des +# documents de votre site. +RewriteRule "^/mirror/(.+)$" "$1" [PT,UnsafePrefixStat]+ + +
Définir ce drapeau empêche la fusion des slashes de début multiples tels
@@ -931,7 +1228,22 @@ utiliser le drapeau L pour terminer la séquence
nécessaire lorsque la substitution de la règle commence par des slashes
multiples littéraux.
Disponible à partir de la version 2.4.62 du serveur HTTP Apache.
+Disponible à partir de la version 2.4.63 du serveur HTTP Apache.
+ +# Sous Windows, réécriture vers un partage de fichiers UNC
+# en utilisant une variable
+# Sans [UNC], les barres obliques de tête dans la substitution seraient
+# fusionnées (//server/share deviendrait /server/share).
+RewriteCond "%{HTTP_HOST}" "^(.+)\.internal$"
+RewriteRule "^/shared/(.*)$" "//%1/fileshare/$1" [UNC]
+
+
+Ce drapeau n’est pertinent que sous Windows. Il empêche httpd de fusionner
+les doubles barres obliques de tête (//) qui sont présentes dans un
+chemin UNC lorsque ce dernier a été construit à partir d’une référence arrière
+ou d’une variable. Si la substitution commence par des doubles barres obliques
+littérales, aucun drapeau n’est nécessaire.
Langues Disponibles: en |
diff --git a/docs/manual/rewrite/htaccess.html.en b/docs/manual/rewrite/htaccess.html.en
index 8c61ec14..f63a597f 100644
--- a/docs/manual/rewrite/htaccess.html.en
+++ b/docs/manual/rewrite/htaccess.html.en
@@ -104,6 +104,11 @@ In .htaccess context, the directory prefix is
products/widget - no leading slash, no
/app/ prefix.
+ 
+ Figure: Per-directory path stripping and RewriteBase pipeline
+
This means you must write your patterns differently depending on where the rule lives:
@@ -216,6 +221,11 @@ After the substitution is made, Apache re-processes the request from the top - including re-applying the.htaccess rules.
This can lead to infinite loops.
+
+ ![Flowchart showing how the [L] flag causes looping in per-directory context by triggering a subrequest that re-enters the ruleset](../images/rewrite_l_flag_looping.png)
+ Figure: Per-directory [L] flag looping behavior
+
Consider this rule:
# In .htaccess - this may loop!
diff --git a/docs/manual/rewrite/htaccess.html.fr.utf8 b/docs/manual/rewrite/htaccess.html.fr.utf8
index 6d1057c5..b0ade924 100644
--- a/docs/manual/rewrite/htaccess.html.fr.utf8
+++ b/docs/manual/rewrite/htaccess.html.fr.utf8
@@ -6,7 +6,7 @@
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
-mod_rewrite et les fichiers .htaccess - Serveur HTTP Apache Version 2.4
+Réécritures au niveau répertoire - Serveur HTTP Apache Version 2.4
@@ -20,25 +20,416 @@

Ce document est un complément de la documentation de référence du module
-mod_rewrite. Il décrit les changements apportés aux règles
-lorsqu'on utilise mod_rewrite dans les fichiers .htaccess, et comment
-travailler avec ces changements.
Utiliser mod_rewrite dans les fichiers
+.htaccess est une des configurations dans un contexte de répertoire les plus courantes — et les
+plus sujettes à confusion. Ce document expose les principales différences entre
+l’utilisation de règles de réécriture dans un contexte global au serveur et leur
+utilisation dans les fichiers .htaccess, et fournit un guide
+pratique pour éviter les pièges les plus courants.
Pour des détails techniques de bas niveau à propos de la manière dont
+mod_rewrite traite les règles dans un contexte de répertoire,
+voir le document Détails techniques.
Prérequis : AllowOverride
Quel URL la règle voit-elle ?
Quand avez-vous besoin de RewriteBase ?
Le drapeau [L] et les boucles infinies
RewriteMap ne peut pas être déclarée
+dans un fichier .htaccess
Quels contextes peuvent accueillir des
+règles de réécriture ?
Héritage des règles avec RewriteOptions
Débogage des règles de réécriture dans les
+fichiers .htaccess
Mise en cache des « 301 redirects » au niveau du
+navigateurPour que des directives de mod_rewrite dans un fichier
+.htaccess puissent être traitées, la configuration du serveur doit
+tout d’abord les autoriser de la manière suivante :
<Directory "/var/www/htdocs"> + AllowOverride FileInfo +</Directory>+ + +
Si au minimum AllowOverride FileInfo (ou AllowOverride
+All) n’est pas présente, toute directive de mod_rewrite
+dans les fichiers .htaccess sera silencieusement ignorée. Si vos
+règles semblent ne pas fonctionner, il s’agit de la première chose à vérifier.
En outre, soit Options FollowSymLinks, soit Options
+SymLinksIfOwnerMatch doit être activée pour le répertoire en question.
+Comme une règle RewriteRule peut
+associer un URL à un chemin arbitraire du système de fichiers
+— fonctionnellement équivalent à un lien symbolique
+— mod_rewrite refusera d’opérer dans un contexte de répertoire
+si aucune de ces options n’est définie. Vous verrez alors l’erreur suivante :
+AH00670: Options FollowSymLinks and SymLinksIfOwnerMatch are both off,
+so the RewriteRule directive is also forbidden due to its similar
+ability to circumvent directory restrictions
+
Cette restriction s’applique aux fichiers .htaccess et aux
+sections <Directory>.
Dans un contexte de serveur virtuel ou global au serveur, le motif de la
+règle RewriteRule est comparé à
+l’ensemble du chemin d’URL, en commençant par une barre oblique. Dans un
+contexte de fichier .htaccess, le préfixe du répertoire est
+supprimé.
Par exemple, si votre fichier .htaccess est dans
+/var/www/htdocs/app/ et si une requête arrive pour
+/app/products/widget, la règle RewriteRule ne voit que
+products/widget — pas de barre oblique en tête, pas de préfixe
+/app/.
+ 
+ Figure : Suppression du chemin dans un contexte de répertoire
+ et pipeline de RewriteBase
+
Cela signifie que vous devez écrire vos motifs différemment en fonction de +l’emplacement des règles :
+ +| Emplacement de la règle | +Règle | +
|---|---|
| Section VirtualHost | +RewriteRule "^/app/products/(.+)$" "/app/shop.php?item=$1" |
+
| .htaccess dans /var/www/htdocs/app/ | +RewriteRule "^products/(.+)$" "shop.php?item=$1" |
+
Notez que la version pour .htaccess n’a de barre oblique de tête
+ni dans le motif, ni dans la substitution. Il s’agit de la source de confusion
+la plus courante avec la réécriture dans un contexte de répertoire.
Lorsqu’une substitution est effectuée dans un contexte de répertoire, httpd
+génère une nouvelle sous-requête interne avec l’URL réécrit en redémarrant le
+traitement de la requête depuis le début. Si la substitution est un chemin
+relatif, la directive RewriteBase
+détermine le préfixe à ajouter au chemin d’URL. Ce mécanisme de sous-requête
+peut aussi être à l’origine d’un bouclage infini des règles — voir ci-après.
Étant donné que le préfixe du répertoire (y compris la barre oblique de fin)
+est supprimé avant la mise en correspondance, les motifs dans un contexte de répertoire ne correspondront
+jamais avec une adresse commençant par une barre oblique. Un motif
+commençant par ^/ ne correspondra jamais dans ce contexte. Une
+règle telle que RewriteRule "^/foo" ... placée dans un fichier
+.htaccess échouera silencieusement à s’appliquer à quelque requête
+que ce soit.
Si vous devez faire une recherche de correspondance avec le chemin d’URL
+original complet (y compris le préfixe de répertoire), utilisez
+%{REQUEST_URI} dans une directive RewriteCond :
RewriteCond "%{REQUEST_URI}" "^/admin/"
+RewriteRule "^.*$" "-" [F]
+
+
+Quand mod_rewrite effectue une substitution dans un fichier
+.htaccess, il doit retransformer le résultat relatif en un chemin
+d’URL complet. La directive RewriteBase lui indique quel préfixe il doit
+ajouter.
Par défaut, RewriteBase est
+définie avec le chemin physique du fichier .htaccess. Dans la
+plupart des cas, cela correspond aux attentes, et vous n’avez pas besoin de la
+définir explicitement. Il y a cependant des situations où vous devrez le faire :
Alias ou un lien
+symbolique, le chemin d’URL et le chemin du système de fichiers diffèrent, et la
+directive RewriteBase doit être
+définie avec le chemin d’URL..htaccess dans un
+sous-répertoire (par exemple /var/www/htdocs/myapp/) et de router
+toutes les requêtes vers un contrôleur frontal :# Dans /var/www/htdocs/myapp/.htaccess
+RewriteEngine On
+RewriteBase "/myapp/"
+RewriteCond "%{REQUEST_FILENAME}" !-f
+RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteRule "^(.*)$" "index.php" [L]
+
+
+Sans la ligne RewriteBase "/myapp/", l’URL réécrit risque de se
+résoudre incorrectement, car mod_rewrite ajouterait comme
+préfixe le chemin du système de fichiers au lieu du chemin d’URL.
Si vous utilisez des URLs absolus (commençant par / ou
+http://) dans vos substitutions, RewriteBase n’aura aucun effet, car elle ne
+s’applique qu’aux substitutions relatives.
Dans le contexte global du serveur, le drapeau [L] signifie
+« arrêter le traitement du jeu de règles ». Dans le contexte des fichiers
+.htaccess, il a une signification subtilement différente :
+« arrêter le traitement du jeu de règles pour cette passe ». Une fois
+la substitution effectuée, httpd traite à nouveau la requête depuis le début du
+jeu de règles — tout en appliquant à nouveau les règles du fichier
+.htaccess. Cela peut provoquer des boucles infinies.
+ ![Organigramme montrant la manière dont le drapeau [L] provoque une boucle infinie dans un contexte de répertoire en déclenchant une sous-requête qui réexécute le jeu de règles](../images/rewrite_l_flag_looping.png)
+ Figure: Risque de boucle infinie avec le drapeau [L] dans un
+ contexte de répertoire
+
Considérez cette règle :
+ +# Dans .htaccess - risque de boucle infinie ! +RewriteRule "^(.*)$" "/index.php?q=$1" [L]+ + +
À la première passe, une requête pour /hello est réécrite en
+/index.php?q=hello. Puis la requête est traitée à nouveau, et
+là, index.php correspond encore à ^(.*)$, et la
+requête est réécrite en /index.php?q=index.php. Ce processus
+continue jusqu’à ce que httpd atteigne sa limite de redirections internes et
+renvoie une erreur 500. Le message suivant sera alors enregistré dans le journal
+des erreurs :
+AH00124: Request exceeded the limit of 10 internal redirects due to
+probable configuration error. Use 'LimitInternalRecursion' to increase
+the limit if necessary. Use 'LogLevel debug' to get a backtrace.
+
Il existe plusieurs méthodes pour interrompre la boucle infinie :
+ +Option 1 : utiliser le drapeau [END] (recommandé)
+ +RewriteRule "^(.*)$" "/index.php?q=$1" [END]+ + +
Le drapeau [END] (disponible depuis la version 2.3.9 de httpd)
+arrête tout processus de réécriture ultérieur, y compris les passes
+suivantes. Il s’agit de la méthode la plus propre pour prévenir les boucles
+infinies.
Option 2 : ajouter une condition pour empêcher le traitement des URLs déjà réécrits
+ +RewriteCond "%{REQUEST_FILENAME}" !-f
+RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteRule "^(.*)$" "/index.php?q=$1" [L]
+
+
+Étant donné que index.php existe en tant que fichier, la
+condition !-f fait que la règle est sautée à la seconde passe.
Option 3 : vérifier la variable THE_REQUEST
+ +RewriteCond "%{THE_REQUEST}" "!index\.php"
+RewriteRule "^(.*)$" "/index.php?q=$1" [L]
+
+
+La variable %{THE_REQUEST} contient la requête originelle telle
+qu’elle a été envoyée par le client et non modifiée par
+mod_rewrite. Sa vérification empêche la règle de s’appliquer aux
+URLs réécrits.
La directive RewriteMap ne peut
+être déclarée que dans un contexte de serveur virtuel ou global au serveur, pas
+dans les fichiers .htaccess ou les sections <Directory>. Cependant, lorsqu’un mappage
+est déclaré dans la configuration globale du serveur, vous pouvez
+l’utiliser dans un fichier .htaccess :
# Dans httpd.conf ou dans un VirtualHost +RewriteMap product2id "txt:/etc/apache2/productmap.txt"+ + +
# Dans .htaccess - utilisation du mappage déclaré ci-avant
+RewriteEngine On
+RewriteRule "^product/(.+)$" "/prods.php?id=${product2id:$1|NOTFOUND}" [PT]
+
+
+Cette restriction existe, car les fichiers .htaccess sont
+analysés pour chaque requête, et la répétition de l’initialisation du mappage
+(en particulier pour les types de mappage dbm:, dbd:
+et prg:) serait d’un coût prohibitif en ressources.
Les règles de réécriture sont prises en charge dans les contextes de répertoire (fichiers .htaccess et sections <Directory> et <If>).
Bien que les règles de réécriture soient syntaxiquement autorisées dans les
+sections <Location> et
+<Files> (et dans leurs
+équivalents avec expressions rationnelles), cela n’est pas pris en charge et ne
+devrait jamais être nécessaire. Les substitutions relatives, en particulier,
+sont susceptibles d’échouer dans ces contextes.
Placer une règle RewriteRule dans
+une section <Directory>,
+<If> ou <Location> — même dans un
+<VirtualHost> dans la
+configuration globale du serveur — fait silencieusement adopter un
+comportement de contexte de répertoire.
+Cela signifie que la barre oblique de tête est supprimée de l’URL avant la
+comparaison avec le motif, que les substitutions déclenchent une redirection
+interne (avec risque de boucle infinie), et que le drapeau [L] n’arrête plus strictement le
+traitement — utilisez plutôt le drapeau [END].
Par défaut, les règles de mod_rewrite ne sont pas
+héritées par les sous-répertoires. Si vous définissez des règles dans
+/var/www/htdocs/.htaccess, elles ne s’appliqueront qu’au
+répertoire correspondant. Un fichier .htaccess dans un
+sous-répertoire contient initial un jeu de règles initial vide, à moins que vous
+n’activiez explicitement l’héritage.
La directive RewriteOptions
+permet d’effectuer cette activation :
RewriteOptions InheritRewriteOptions InheritBeforeInherit, excepté que les règles du parent sont
+traitées avant celles de l’enfant. Cela s’avère utile lorsque le parent définit
+un motif de contrôleur frontal et que l’enfant doit ajouter des exceptions.
+Disponible depuis la version 2.4.8 de httpd.RewriteOptions InheritDownInherit.
+Disponible depuis la version 2.4.8 de httpd.RewriteOptions InheritDownBeforeInheritDown, excepté que les règles du parent sont
+traitées avant celles des enfants. Disponible depuis la version 2.4.8 de httpd.RewriteOptions IgnoreInheritInheritDown
+d’un parent. Disponible depuis la version 2.4.8 de httpd.RewriteOptions MergeBaseRewriteBase de chaque
+contexte s’applique aux règles définies dans ce contexte, au lieu que la
+directive RewriteBase de l’enfant s’applique à toutes les règles
+héritées. Disponible depuis la version 2.4.26 de httpd.Lorsque les règles de réécriture dans les fichiers .htaccess ne
+fonctionnent pas comme vous le souhaitez, le journal des réécritures est votre
+meilleur ami. Activez-le avec le niveau approprié :
LogLevel alert rewrite:trace3+ + +
Avec cette directive, le journal des erreurs montre exactement comment chaque +règle est traitée — à quoi les motifs ont été comparés, les conditions ont-elles +été satisfaites ou non et quelles substitutions ont été effectuées. Le +comportement du contexte de répertoire et la suppression d’une partie du +chemin sera visible dans ces entrées du journal.
+ +Quand vous renvoyez une redirection 301 Moved Permanently (via
+[R=301] ou Redirect permanent), le navigateur est autorisé à mettre en cache
+cette réponse indéfiniment. Cela signifie que même lorsque vous aurez corrigé
+une règle de redirection incorrecte dans votre configuration, les clients qui
+font à nouveau la même requête pourront se voir redirigés vers l’ancienne
+destination (incorrecte) sans jamais contacter à nouveau votre serveur.
Lors d’un débogage de règles de redirection, utilisez [R=302]
+(redirection temporaire) à la place de [R=301]. Ne repassez à 301
+que lorsque vous avez confirmé que la règle est correcte. Si vous avez déjà
+renvoyé un code 301, les clients affectés devront vider le cache de leur
+navigateur (ou utiliser une fenêtre privée/incognito) pour voir un comportement
+correct.
Le point fort de mod_rewrite réside dans le fait qu'il possède toutes les +capacités de configuration et la flexibilité de Sendmail ;mais c'est aussi son +point faible. +-- Brian Behlendorf
+ +Malgré la multitude d'exemples et de documentations, mod_rewrite est de +la magie noire. De la magie noire très "cool", mais de la magie noire +quand-même.
mod_rewrite permet de modifier les requêtes
entrantes dynamiquement, en fonction de règles manipulant des expressions rationnelles. Vous pouvez
ainsi relier des URLs arbitraires à votre propre structure d'URLs
interne comme vous le souhaitez.
Il fournit un - mécanisme de manipulation d'URL particulièrement souple et - puissant en supportant un nombre illimité de règles et de - conditions attachées à chaque règle. Les manipulations d'URLs - peuvent dépendre de tests variés : les URLs peuvent - être finement caractérisées en fonction de variables du serveur, - de variables d'environnement, d'en-têtes HTTP, de repères - temporels, de recherches dans des bases de données - externes, ou même de requêtes vers des bases de données externes - et de différents gestionnaires ou programmes externes.
+Ce guide est un complément du manuel de +référence avec des exemples commentés, des explications conceptuelles et des +conseils pratiques. Il est organisé comme suit :
+ +Les règles de réécriture peuvent agir sur l'ensemble des URLs (la partie chemin
- et la chaîne de paramètres) et peuvent être utilisées dans le contexte du serveur principal
- (httpd.conf), mais aussi dans le contexte des
- serveurs virtuels (sections <VirtualHost>), ou dans le
- contexte des répertoires (fichiers .htaccess et blocs
- <Directory>. Le résultat
- réécrit peut conduire vers d'autres règles à un
- traitement secondaire interne, une redirection vers une requête
- externe ou même l'envoi vers un serveur mandataire, en fonction
- des drapeaux que vous attachez aux
- règles
mod_rewrite étant très puissant, il peut par
- conséquent être très complexe. Ce guide
- complète la documentation de
- référence du module mod_rewrite, et est sensé alléger un
- peu cette complexité, et présenter des exemples largement
- commentés, ainsi que des situations courantes que vous
- pourrez traiter avec mod_rewrite. Mais nous voulons aussi vous
- montrer des situations où vous ne devrez pas utiliser
- mod_rewrite, et lui préférer d'autres
- fonctionnalités standard d'Apache, évitant ainsi
- d'entrer dans une complexité inutile.
mod_rewrite configuration, since
it will tell you exactly how each rule is processed.
+
+ 
+ Figure: Simplified overview of how
+ mod_rewrite processes a request. See
+ Technical Details for the full
+ processing model including phases, flags, and looping.
+
- 
+ 
Figure 1: The back-reference flow through a rule.
In this example, a request for /test/1234 to host admin.example.com would be transformed into /admin.foo?page=test&id=1234&host=admin.example.com, provided that %{DOCUMENT_ROOT}/test is not an existing file.
mod_request paired with a custom filter.
- 
+ 
Figure 2: Syntax of the RewriteRule directive.
- 
+ 
Figure 3: Syntax of the RewriteCond directive
Ce document est un complément à la documentation de référence du module
mod_rewrite. Il décrit les concepts de base dont la
@@ -44,9 +42,10 @@ pieds.
Conditions de réécriture
Tables de réécriture
Fichiers .htaccess
Considérations en matière de sécuritémod_rewrite est à ce prix car vous verrez alors
exactement comment chaque règle est traitée.
+
+ 
+ Figure : Présentation simplifiée de la manière dont
+mod_rewrite traite une requête. Voir Détails techniques pour une description complète du
+traitement avec les phases, les drapeaux et le bouclage.
+
mod_rewrite utilise le vocabulaire des Expressions rationnelles compatibles Perl. +
mod_rewrite utilise le vocabulaire des Expressions
+rationnelles compatibles avec Perl à l’aide de la bibliothèque PCRE2.
Ce document n'a pas pour prétention d'être une référence détaillée des
-expressions rationnelles. A cet effet, nous recommandons les pages de manuel de PCRE, la page de manuel des
-expressions rationnelles Perl, et l'ouvrage Mastering
+expressions rationnelles. A cet effet, nous recommandons la documentation de
+PCRE2, la page de manuel des
+expressions rationnelles de Perl, et l'ouvrage Mastering
Regular Expressions, par Jeffrey Friedl (la troisième édition date
de 2006, mais la syntaxe des expressions rationnelles n'a pas vraiment
changé, et cet ouvrage reste la référence en la matière).
c/t
Avec mod_rewrite, le caractère ! peut
+
Le caractère ! (Not) peut
préfixer une expression rationnelle afin d'en exprimer la négation.
Autrement dit, une chaîne ne correspondra que si elle ne correspond pas
à l'expression située après le !.
Notez que lorsqu’on utilise ! pour inverser un motif, les références arrières (par exemple $1,
+$2) ne sont pas disponibles, car le motif ne correspond plus.
La règle suivante, par exemple, redirige toute requête qui ne commence
+pas par /admin
RewriteRule "!^/admin" "/xyz.html" [R,L]+ +
Vous devez vous souvenir d'une chose importante : chaque fois
- que vous utilisez des parenthèses dans un Modèle ou dans
+ que vous utilisez des parenthèses dans un Motif ou dans
un des modèles de conditions, des références arrières
sont créées en interne et peuvent être rappelées via les chaînes
$N et %N (voir ci-dessous). Ces
@@ -184,13 +201,18 @@ arrières dans les expressions rationnelles
elles vous paraissent un peu exotiques au premier abord.
- 
+ 
Figure 1 : Le cheminement d'une référence arrière à
travers une règle.
- Dans cet exemple, une requête pour /test/1234 serait
+ Dans cet exemple, une requête pour /test/1234 vers l’hôte admin.example.com serait
transformée en
- /admin.foo?page=test&id=1234&host=admin.example.com.
+ /admin.foo?page=test&id=1234&host=admin.example.com,
+ sous réserve que %{DOCUMENT_ROOT}/test ne soit pas un fichier
+ existant.
Voir aussi Détails techniques + pour un diagramme montrant le cheminement des références arrières avec des + conditions multiples.
@@ -199,27 +221,42 @@ arrières dans les expressions rationnellesUne règle de réécriture RewriteRule est constituée de trois
arguments séparés par des espaces. Les arguments sont :
Le Modèle est une expression -rationnelle. Au sein de la première règle de réécriture, ou jusqu'à -ce qu'une substitution survienne, elle est comparée au chemin de -l'URL de la requête entrante (la -partie située après le nom d'hôte mais avant tout point d'interrogation -qui indique le début d'une chaîne de paramètres de -requête) ou, dans un contexte de répertoire, au chemin de la -requête relativement au répertoire pour lequel la -règle est définie. Lorsqu'une substitution a eu lieu, les -règles suivantes effectuent leurs comparaisons par rapport à la valeur -substituée.
+Le Motif est une expression
+rationnelle. Dans un contexte de serveur virtuel ou de serveur global, il
+est comparé au chemin d’URL %-décodé
+de la requête entrante — la partie après le nom d’hôte et le port, en
+excluant la chaîne de paramètres (par exemple /app/index.html).
+Dans un contexte de répertoire, le motif
+est comparé au chemin de la requête relatif au répertoire pour lequel la règle
+est définie (avec le préfixe de répertoire supprimé — voir Réécritures par répertoire pour les
+détails).
+
Lorsqu’une substitution a été effectuée, toute règle qui suit est comparée à +la valeur substituée.
+ +Le Motif n’est comparé qu’au chemin d’URL — à l’exclusion
+des nom d’hôte, port ou chaîne de paramètres. Pour une comparaison incluant ces
+derniers, utilisez une condition RewriteCond avec les variables
+%{HTTP_HOST}, %{SERVER_PORT} ou
+%{QUERY_STRING}, respectivement.
mod_rewrite opère exclusivement sur le chemin d’URL et les
+en-têtes HTTP. Il ne peut pas inspecter le corps de la requête (par exemple, les
+données POST). Si vous devez prendre des décisions de routage en fonction du
+contenu du corps de la requête, traitez le problème à l’aide de la logique de
+votre application ou utilisez un module tel que mod_request
+associé à un filtre personnalisé.
- 
+ 
Figure 2 : Syntaxe de la directive RewriteRule.
La chaîne de Substitution peut aussi contenir des références arrières vers des parties du chemin d'URL entrant -correspondant au Modèle. Considérons ce qui suit :
+correspondant au Motif. Considérons ce qui suit :RewriteRule "^/produits/(.*)/view$" "/var/web/produitsdb/$1"
La variable $1 sera remplacée par tout texte
correspondant à l'expression située entre les parenthèses dans le
-Modèle. Par exemple, une requête pour
+Motif. Par exemple, une requête pour
http://example.com/produits/r14df/vue correspondra au
chemin /var/web/produitsdb/r14df.
- 
+ 
Figure 3 : Syntaxe de la directive RewriteCond
La réécriture est en général définie au niveau de la configuration du
-serveur principal (en dehors de toute section <Directory>) ou dans une section <VirtualHost>. Il s'agit là de la
-manière la plus simple de mettre en oeuvre la réécriture et nous la
-recommandons. Il est possible, cependant, de mettre en oeuvre la
-réécriture au sein d'une section <Directory> ou d'un fichier .htaccess ; ce type de
-configuration est cependant plus complexe. Cette technique est appelée
-réécriture par répertoire.
La principale différence avec les réécritures au niveau du serveur réside
-dans le fait que le préfixe du chemin du répertoire contenant le fichier
-.htaccess est supprimé avant la mise en correspondance dans
-la règle RewriteRule. De
-plus, on doit utiliser la directive RewriteBase pour s'assurer que la
-requête est correctement mise en correspondance.
Il est possible d’utiliser des règles de réécriture dans un contexte de répertoire (fichiers .htaccess et sections <Directory>), mais dans ce cas, les
+règles se comportent différemment — en particulier, le préfixe du répertoire est
+supprimé de l’URL avant la recherche de correspondance. Voir le document Réécritures dans un contexte de
+répertoire pour une explication détaillée. Notez que les sections <If> et <Location> adoptent aussi le comportement du contexte
+de répertoire — voir Quels
+contextes prennent en charge les règles de réécriture ?.
mod_rewrite est un outil de manipulation d’URL puissant,
+mais qui dit puissance dit risque d’erreurs liées à la sécurité. Cette section
+met en lumière les pièges en matière de sécurité courants à éviter lors de
+la rédaction de règles de réécritures.
Si une règle RewriteRule
+construit un URL de redirection en utilisant une entrée utilisateur non validée,
+un attaquant pourra fabriquer un lien qui redirige les visiteurs vers un site
+malveillant semblant provenir de votre domaine. Cette vulnérabilité est connue
+sous le nom de redirection ouverte.
Par exemple, cette règle est dangereuse :
+ +# DANGEREUX - permet une redirection ouverte
+RewriteRule "^/redirect" "%{QUERY_STRING}" [R,L]
+
+
+Un attaquant pourrait en effet utiliser
+https://yoursite.com/redirect?https://evil.com pour rediriger les
+utilisateurs vers un site malveillant. Assurez vous de toujours valider ou
+contraindre les cibles de redirection. Si la destination doit être sur votre
+propre site, assurez vous que la substitution commence par / (un
+chemin relatif) plutôt que de permettre à l’utilisateur d’entrer un URL complet.
Lorsqu’on utilise la drapeau [P] (proxy),
+mod_rewrite fait que le serveur
+effectue une requête HTTP vers l’URL de substitution de la part du client. Si
+une partie de cet URL est dérivée de l’entrée du client — références arrières,
+chaînes de paramètres ou en-têtes — un attaquant pourrait faire que votre
+serveur effectue des requêtes vers des services internes arbitraires ou des
+hôtes externes.
Par exemple :
+ +# DANGEREUX - l’utilisateur contrôle la cible du mandataire
+RewriteCond "%{QUERY_STRING}" "target=(.+)"
+RewriteRule "^/fetch" "http://%1" [P]
+
+
+Un attaquant pourrait utiliser cette configuration pour tester des services +réseau internes qui autrement ne seraient pas accessibles depuis l’Internet. +Utilisez toujours un nom d’hôte fixe dans les cibles de mandataire et limitez +les références arrières à la partie chemin seulement.
+ + + +Des règles de réécriture qui associent directement des composants du chemin +fournis par l’utilisateur au système de fichier ouvrent la voie à des attaques +de traversée de chemin si l’entrée n’est pas correctement contrainte. Par +exemple :
+ +# DANGEREUX - permet une traversée de chemin +RewriteRule "^/files/(.+)" "/var/data/$1" [L]+ + +
Une requête pour /files/../../etc/passwd pourrait accéder à des
+fichiers en dehors du répertoire souhaité. Utilisez des motifs restreints dans
+votre règle RewriteRule (par exemple
+[a-zA-Z0-9_-]+ au lieu de .+), et utilisez les
+protections intégrées d’Apache httpd (restrictions Options et <Directory>) pour une défense en profondeur.
Ce document est un complément de la documentation de référence du module
-mod_rewrite. Il décrit comment utiliser le drapeau [P]
-de la directive RewriteRule pour mandater un contenu vers un autre
-serveur. Plusieurs recettes décrivant des scénarios courants sont
-fournies.
ProxyPass. Il sera supprimé
+dans une prochaine version de cette documentation.
- mod_rewrite implémente le drapeau [P] qui permet de passer des URLs,
- via mod_proxy, à un autre serveur. Deux exemples sont fournis ici.
- Dans le premier, une URL est passée directement à un autre serveur,
- et servie comme si c'était une URL locale. Dans le deuxième, nous
- mandatons un contenu manquant vers un serveur d'arrière-plan.
Pour passer une URL à un autre serveur, on utilise le drapeau - [P] comme suit :
- -RewriteEngine on -RewriteBase "/produits/" -RewriteRule "^widget/(.*)$" "http://produits.example.com/widget/$1" [P] -ProxyPassReverse "/produits/objet/" "http://produits.example.com/objet/"- - -
Dans le deuxième exemple, nous ne mandatons la requête que si nous - ne trouvons pas la ressource localement. Ceci peut s'avérer très - utile lorsque vous effectuez une migration d'un serveur vers un - autre, et que vous n'êtes pas certain que tout le contenu a déjà été - migré.
- -RewriteCond "%{REQUEST_FILENAME}" !-f
-RewriteCond "%{REQUEST_FILENAME}" !-d
-RewriteRule "^/(.*)" "http://ancien.exemple.com/$1" [P]
-ProxyPassReverse "/" "http://ancien.exemple.com/"
-
- Dans les deux cas, on ajoute une directive ProxyPassReverse afin de s'assurer
- que toute redirection en provenance du serveur d'arrière-plan est
- renvoyée correctement au client.
Chaque fois que cela est possible, préférez l'utilisation de la
- directive ProxyPass ou
- ProxyPassMatch à
- mod_rewrite.
Ce document est un complément à la Documentation de référence de
@@ -37,27 +35,26 @@ correspondance une requête. Il contient de
nombreux exemples d'utilisation courante de mod_rewrite avec une
description détaillée de leur fonctionnement.
De l'ancienne à la nouvelle URL (en interne)
Forcer HTTPS
Exempter les requêtes de défi ACME de la redirection HTTPS
Normalisation de la barre oblique de fin
Contrôleur frontal / Routage d’pplication
De l'ancien au nouveau (en externe)
Ressource déplacée vers un autre serveur
De statique à dynamique
Compatibilité ascendante dans le cadre d'une modification
d'extension de nom de fichier
Noms d'hôtes canoniques
Recherche de pages dans plus d'un répertoire
Redirection vers des serveurs géographiquement distribués
Contenu dépendant du navigateur
URLs canoniques
Déplacement du répertoire DocumentRoot
Ressource par défaut
Rewrite query string
Répertoires utilisateur structurés
Redirection vers une ancre
Réécriture dépendant du temps
Régénération du contenu à la voléeRewriteEngine on RewriteRule "^/foo\.html$" "/bar.html" [PT]+ + + + +
Rediriger toutes les requêtes HTTP vers HTTPS. C’est un des
+ emplois les plus courants de mod_rewrite, mais dans la
+ plupart des cas, on y parvient d’une meilleur façon sans lui.
L’approche préférée utilise une directive Redirect dans un serveur virtuel HTTP
+ dédié :
<VirtualHost *:80> + ServerName www.example.com + Redirect permanent "/" "https://www.example.com/" +</VirtualHost> + +<VirtualHost *:443> + ServerName www.example.com + # ... emplacement de la configuration SSL +</VirtualHost>+ + +
Si vous n’avez pas accès à la configuration du serveur et devez
+ utiliser un fichier .htaccess, mod_rewrite
+ sera l’outil approprié :
RewriteEngine On
+RewriteCond "%{HTTPS}" !=on
+RewriteRule "^(.*)" "https://%{SERVER_NAME}$1" [R=301,L]
+
+
+ La variable %{HTTPS} est définie à on si
+ la connexion utilise SSL/TLS, et est vide ou à off dans le
+ cas contraire. Utiliser R=301 produit une redirection
+ permanente qui signale aux moteurs de recherche qu’ils doivent mettre
+ leur index à jour.
Voir aussi le document Quand ne pas
+ utiliser mod_rewrite pour plus de discussions à propos de l’approche
+ Redirect.
La variable %{HTTPS} n’est pas une variable
+ d’environnement à usage général — elle interroge directement
+ mod_ssl. Si la terminaison SSL/TLS est effectuée au
+ niveau d'un répartiteur de charge ou d'un mandataire inverse en amont,
+ mod_ssl ne gère pas la connexion et %{HTTPS}
+ indiquera toujours off, même si le client originel s’est
+ connecté en HTTPS.
Dans cette situation, il faut plutôt consulter l’en-tête défini par le
+ mandataire en amont. La plupart des répartiteurs de charge définissent
+ X-Forwarded-Proto :
RewriteEngine On
+RewriteCond "%{HTTP:X-Forwarded-Proto}" =http [NC]
+RewriteRule "^(.*)" "https://%{SERVER_NAME}$1" [R=301,L]
+
+
+ Ne faites confiance à X-Forwarded-Proto que si vous
+ contrôlez le mandataire en amont et qu'il écrase l'en-tête à chaque
+ requête. Un attaquant pourrait corrompre cet en-tête en se connectant
+ directement à votre serveur. Assurez-vous de restreindre l’accès de façon
+ que seul votre répartiteur de charge puisse atteindre le serveur dorsal,
+ ou utilisez mod_remoteip pour valider la source.
Vous avez forcé tout le trafic à s’effectuer en HTTPS (comme ci-avant),
+ mais votre client ACME (Let's Encrypt, Certbot, etc.) nécessite un accès
+ en HTTP à /.well-known/acme-challenge/ pour achever la
+ validation du domaine.
Placer une exception avant la règle de redirection HTTPS :
+ +RewriteEngine On
+RewriteRule "^/\.well-known/acme-challenge/" - [L]
+RewriteCond "%{HTTPS}" !=on
+RewriteRule "^(.*)" "https://%{SERVER_NAME}$1" [R=301,L]
+
+ La substitution matérialisée par un tiret (-) signifie
+ « ne pas réécrire ». En combinaison avec le drapeau [L], elle
+ arrête le traitement des règles pour toute requête correspondant au chemin
+ du défi ACME, permettant à cette dernière d’être servie en HTTP. Le
+ traitement de toutes les autres requêtes continue avec la règle suivante
+ et les redirige vers HTTPS de la manière habituelle.
Si vous adoptez l’approche par la directive Redirect dans un serveur virtuel dédié au
+ port 80, utilisez les directives Alias et RedirectMatch à la place :
<VirtualHost *:80> + ServerName www.example.com + + # Permettre les défis ACME sur HTTP + Alias "/.well-known/acme-challenge/" "/var/www/acme/.well-known/acme-challenge/" + <Directory "/var/www/acme/.well-known/acme-challenge"> + Require all granted + </Directory> + + # Tout le reste est redirigé vers HTTPS + RedirectMatch permanent "^/(?!\.well-known/acme-challenge/)(.*)$" "https://www.example.com/$1" +</VirtualHost>+ + +
Vous souhaitez que les URLs pour des répertoires se terminent toujours + par une barre oblique ou, au contraire, que ce ne soit jamais le cas. + Il s’agit d’un prérequis courant pour SEO et pour la gestion cohérente des + URLs par les applications web.
+Pour ajouter une barre oblique de fin aux URLs qui correspondent à des + répertoires :
+ +RewriteCond "%{REQUEST_FILENAME}" -d
+RewriteCond "%{REQUEST_URI}" "!/$"
+RewriteRule "^(.*)$" "$1/" [R=301,L]
+
+
+ Pour supprimer la barre oblique de fin (sauf pour les véritables + répertoires) :
+ +RewriteCond "%{REQUEST_FILENAME}" !-d
+RewriteCond "%{REQUEST_URI}" "(.+)/$"
+RewriteRule "^" "%1" [R=301,L]
+
+
+ Le module mod_dir de httpd gère déjà les redirections
+ de barre oblique de fin pour les véritables répertoires lorsque la
+ directive DirectorySlash est
+ activée (elle l’est par défaut). Vous n’avez besoin que d’une règle de
+ mod_rewrite si vous souhaitez imposer un comportement
+ pour les barres obliques de fin pour les URLs qui ne correspondent pas à
+ de véritables répertoires sur disque, ou si vous voulez supprimer des
+ barres obliques de fin.
La plupart des cadriciels web modernes routent toutes les requêtes vers un
+ seul point d’entrée : le contrôleur frontal (« front controller »). La
+ directive FallbackResource gère cela
+ plus simplement et efficacement que mod_rewrite. Voir le
+ document Quand ne pas utiliser
+ mod_rewrite pour l’approche recommandée.
Si vous avez réellement besoin de mod_rewrite pour cela
+ (par exemple, pour ajouter des conditions plus complexes que « fichier non
+ existant »), consultez le document Réécritures par répertoire pour un
+ exemple annoté qui illustre aussi l’utilisation de la directive RewriteBase.
Dans l'exemple interne, on a utilisé mod_rewrite afin
@@ -168,38 +380,12 @@ RedirectMatch "^/docs/(.*)" "http://nouveau.example.com/docs/$1"
Redirect "/docs/" "http://nouveau.example.com/docs/"
Comment transformer une page statique foo.html
- en sa variante dynamique foo.cgi de manière
- transparente, c'est à dire sans en avertir le
- navigateur/utilisateur.
On réécrit simplement l'URL en script CGI et force le
- gestionnaire de contenu à cgi-script de façon
- à ce que le script s'exécute en tant que programme CGI.
- Ainsi, une requête vers /~quux/foo.html conduit
- en interne à l'invocation de
- /~quux/foo.cgi.
RewriteEngine on -RewriteBase "/~quux/" -RewriteRule "^foo\.html$" "foo.cgi" [H=cgi-script]+
Pour une simple redirection vers un autre serveur, il est préférable
+ d’utiliser les directives Redirect ou RedirectMatch, car elles sont plus simples
+ et plus efficaces.
L'URL n'est réécrite en remplaçant l'ancienne extension par la +
L’URL n’est réécrite en remplaçant l’ancienne extension par la nouvelle que si le fichier cible avec la nouvelle extension existe et - si le fichier originel avec l'ancienne extension n'existe pas. Sinon, - l'URL reste inchangée.
+ si le fichier originel avec l’ancienne extension n’existe pas. Sinon, + l’URL reste inchangée.# jeu de règles assurant une compatibilité ascendante en réécrivant
@@ -245,7 +431,7 @@ RewriteRule "^foo\.html$" "foo.cgi" [H=cgi-script]
Cet exemple utilise une fonctionnalité souvent méconnue de
mod_rewrite, en tirant avantage de l'ordre d'exécution du jeu de
@@ -301,7 +487,7 @@ une section de serveur virtuel pour le/les noms d'hôte non canoniques.
Vous pouvez aussi utiliser la directive <If> :
Vous pouvez aussi utiliser la directive <If> (versions 2.4 et ultérieures) :
<If "%{HTTP_HOST} != 'www.example.com'">
Redirect "/" "http://www.example.com/"
@@ -341,6 +527,15 @@ RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE]
possibles de example.com, vous pouvez utiliser
le jeu de règles suivants :
+Pour faire l’inverse — supprimer le préfixe www. — inversez la
+condition :
RewriteCond "%{HTTP_HOST}" "^www\.(.+)$" [NC]
+RewriteRule "^(.*)" "http://%1/$1" [L,R,NE]
+
+
+Pour ajouter de manière générique www. à tout nom d’hôte :
RewriteCond "%{HTTP_HOST}" "!^www\." [NC]
RewriteCond "%{HTTP_HOST}" "!^$"
RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE]
@@ -350,9 +545,24 @@ RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE]
de configuration de votre serveur principal que dans un fichier
.htaccess placé dans le répertoire défini par la
directive DocumentRoot du serveur.
- Si vous avez accès à la configuration globale du serveur, une directive
+ Redirect dans un <serveur virtuel> dédié constitue
+ l’approche la plus propre. Mettre sous forme canonique le nom d’hôte
+ permet de s’assurer que les moteurs de recherche traiterons votre site
+ comme une seule entité, et évite les problèmes de portée de cookie qui
+ surviennent lorsqu’un même site est accessible sous plusieurs noms.
N’utilisez la directive <If> et mod_rewrite comme
+ compromis que si vous êtes contraint d’utiliser un fichier
+ .htaccess.
Notre site web possède de nombreux miroirs, et nous voulons - rediriger les utilisateurs vers celui qui se situe dans le pays où - ils se trouvent.
-En consultant le nom d'hôte du client demandeur, on détermine le - pays dans lequel il se trouve. S'il est impossible d'effectuer une - recherche sur leur adresse IP, on se rabat sur un serveur par - défaut.
-Nous allons utiliser une directive RewriteMap afin de construire une
- liste des serveurs que nous voulons utiliser.
HostnameLookups on
-RewriteEngine on
-RewriteMap multiplex "txt:/path/to/map.mirrors"
-RewriteCond "%{REMOTE_HOST}" "([a-z]+)$ [NC]"
-RewriteRule "^/(.*)$" "${multiplex:%1|http://www.example.com/}$1" [R,L]
-
-
-
-## liste_miroirs -- Table de correspondance pays - serveurs
-
-de http://www.exemple.de/
-uk http://www.exemple.uk/
-com http://www.example.com/
-##EOF##
-
on de la directive HostNameLookups, ce qui peut induire une
- baisse de performance significative.La directive RewriteCond extrait la dernière
- partie du nom d'hôte du client demandeur - le code du pays - et la
- règle de réécriture qui suit utilise cette valeur pour rechercher le
- serveur miroir approprié dans le fichier de correspondances.
Ce qui précède s’avère utile pendant les migrations lorsque le contenu
+ est déplacé d’un répertoire vers un autre. Pour une configuration
+ permanente, utilisez plutôt la directive Alias ou des liens symboliques.
Nous voulons fournir des contenus différents en fonction du - navigateur (user-agent) qui effectue la requête.
-Nous devons déterminer quel contenu servir, en nous basant
- sur l'en-tête HTTP "User-Agent". La
- configuration suivante effectue ceci : si l'en-tête HTTP
- "User-Agent" commence par "Mozilla/3", le nom de la page
- foo.html est réécrit en foo.NS.html
- et la réécriture s'arrête. Si le navigateur est "Lynx" ou
- "Mozilla" version 1 ou 2, l'URL devient
- foo.20.html. Tous les autres navigateurs
- reçoivent la page foo.32.html. Tout ceci est
- effectué par le jeu de règles suivant :
RewriteCond "%{HTTP_USER_AGENT}" "^Mozilla/3.*"
-RewriteRule "^foo\.html$" "foo.NS.html" [L]
-
-RewriteCond "%{HTTP_USER_AGENT}" "^Lynx/" [OR]
-RewriteCond "%{HTTP_USER_AGENT}" "^Mozilla/[12]"
-RewriteRule "^foo\.html$" "foo.20.html" [L]
-
-RewriteRule "^foo\.html$" "foo.32.html" [L]
-
- Depuis la version 2.2.16, vous pouvez y parvenir via la directive
-FallbackResource :
<Directory "/var/www/my_blog"> - FallbackResource "index.php" -</Directory>- - -
Cependant, si vos besoins étaient plus complexes, vous pouviez, dans -les versions plus anciennes d'Apache, utiliser un jeu de règles du style -:
- -<Directory "/var/www/my_blog">
- RewriteBase "/my_blog"
-
- RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f
- RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d
- RewriteRule "^" "index.php" [PT]
-</Directory>
-
-
-D'autre part, si vous voulez transmettre l'URI de la requête en tant -que chaîne de paramètres à index.php, vous pouvez remplacer cette règle -de réécriture par :
- -RewriteRule "(.*)" "index.php?$1" [PT,QSA]- - -
Notez que l'on peut utiliser ces jeux de règles aussi bien dans un
-fichier .htaccess que dans une section
-<Directory>.
# The desired URL might be /products/kitchen-sink, and the script expects +
# The desired URL might be /products/kitchen-sink, and the script expects # /path?products=kitchen-sink. RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT]- +
Voir aussi les drapeaux [QSA] et [QSD] qui permettent de contrôler si la chaîne de +paramètres originelle est ajoutée à la fin de la substitution ou supprimée de +cette dernière.
+Certains sites avec plusieurs milliers d’utilisateurs possèdent une
+ organisation structurée des répertoires utilisateur, c’est-à-dire que
+ chaque répertoire utilisateur est dans un sous-répertoire qui commence
+ (par exemple) par le premier caractère du nom de l’utilisateur. Ainsi,
+ /~larry/anypath correspond à
+ /home/l/larry/public_html/anypath et
+ /~waldo/anypath à
+ /home/w/waldo/public_html/anypath.
Nous utilisons le jeu de règles suivant pour développer les URLs avec + tilde selon l’organisation ci-dessus.
+ +RewriteEngine on +RewriteRule "^/~(([a-z])[a-z0-9]+)(.*)" "/home/$2/$1/public_html$3"+ +
Cette technique est principalement utile pour les environnements
+ d’hébergement de grande capacité avec plusieurs milliers d’utilisateurs.
+ Pour la plupart des sites, mod_userdir gère les URLs
+ utilisateur avec tilde sans avoir besoin de mod_rewrite.
Par défaut, la redirection vers une ancre HTML ne fonctionne pas, car
+ mod_rewrite échappe le caractère # en le
+ remplaçant par %23, ce qui casse la redirection.
Utiliser le drapeau [NE] dans la règle
+ RewriteRule. NE signifie « No Escape ».
+
mod_rewrite encode par défaut pour les URLs.Nous voulons utiliser mod_rewrite pour servir des
+ contenus différents en fonction de l’heure du jour.
Il esixte de nombreuses variables nommées TIME_xxx à
+ utiliser dans les conditions de réécriture. En combinaison avec les motifs
+ de comparaison lexicographique spéciaux <STRING,
+ >STRING et =STRING, nous pouvons configurer
+ des redirections dépendant du temps :
RewriteEngine on
+RewriteCond "%{TIME_HOUR}%{TIME_MIN}" >0700
+RewriteCond "%{TIME_HOUR}%{TIME_MIN}" <1900
+RewriteRule "^foo\.html$" "foo.day.html" [L]
+RewriteRule "^foo\.html$" "foo.night.html"
+
+
+ Cette configuration sert le contenu de foo.day.html sous
+ l’URL foo.html de 07:01 à 18:59 et
+ le contenu de foo.night.html pendant le temps restant.
mod_cache, les mandataires
+ intermédiaires et les navigateurs peuvent chacun mettre en cache les
+ réponses et provoquer de ce fait l’affichage d’une page en dehors de la
+ fenêtre de temps configurée. mod_expires permet de
+ contrôler cet effet. Il est bien entendu préférable de simplement servir
+ le contenu de manière dynamique et de le personnaliser en fonction de
+ l’heure du jour.Servir du contenu dynamique par l’intermédiaire de votre application
+ constitue pratiquement toujours une meilleure approche. La mise en cache
+ par les navigateurs, les mandataires et mod_cache rend la
+ réécriture en fonction du temps non fiable en pratique.
Nous voulons générer dynamiquement du contenu, mais le stocker ensuite + statiquement. La règle suivante va vérifier si le fichier + statique existe, et le générer dans le cas contraire. Les fichiers + statiques peuvent être supprimés périodiquement, si souhaité (par exemple + via cron) et seront régénérés à la demande.
+# Cet exemple n’est valable que dans un contexte de répertoire
+RewriteCond "%{REQUEST_URI}" !-U
+RewriteRule "^(.+)\.html$" "/regenerate_page.cgi" [PT,L]
+
+
+ L’opérateur -U détermine si la chaîne de test (dans ce cas
+ REQUEST_URI) est un URL valable. Il effectue cette opération
+ via une sous-requête. Si cette sous-requête échoue — autrement dit, si la
+ ressource demandée n’existe pas — cette règle invoque le programme CGI
+ /regenerate_page.cgi qui va générer la ressource demandée et la
+ sauvegarder dans le répertoire des documents de sorte qu’une copie statique
+ puissent en être servie la prochaine fois qu’elle sera demandée.
Ainsi, les documents qui ne sont pas souvent mis à jour peuvent être + servis sous forme statique. Si ces documents doivent être rafraîchis, ils + peuvent être supprimés du répertoire des documents ; ils seront alors + régénérés la prochaine fois qu’ils seront demandés.
+Les approches modernes telles que mod_cache, les
+ couches de mise en cache CDN ou la mise en cache au niveau de
+ l’application fournissent des solutions plus robustes et configurables
+ pour servir du contenu statique pré-généré. Le test de la sous-requête de
+ l’opérateur -U utilisé ici induit un coût en performance à
+ chaque requête.
Langues Disponibles: en | diff --git a/docs/manual/rewrite/rewritemap.html.fr.utf8 b/docs/manual/rewrite/rewritemap.html.fr.utf8 index 74110184..33ec86b6 100644 --- a/docs/manual/rewrite/rewritemap.html.fr.utf8 +++ b/docs/manual/rewrite/rewritemap.html.fr.utf8 @@ -26,8 +26,6 @@
Ce document est un complément à la documentation de référence du
@@ -36,13 +34,7 @@
fournit des exemples pour chacun des différents types de
RewriteMap.
Introduction
int: fonction interne
txt: tables de correspondances au format texte
dbm: Fichier condensé DBM
prg: Programme de réécriture externe
dbd ou fastdbd: requête SQL
Distribution de la charge (sharding) basée sur l'URL entre plusieurs serveurs dorsaux
RésuméRewriteRule :
- Redirection d'un URI vers une version en minuscules
+ Redirection d'un chemin d’URL vers une version en minuscules
d'elle-mêmeRewriteMap lc int:tolower
RewriteRule "(.*)" "${lc:$1}" [R]
@@ -412,7 +404,7 @@ directive R
directive Mutex.
Voici un exemple simple qui remplace tous les tirets par des - caractères de soulignement dans l'URI de la requête.
+ caractères de soulignement dans le chemin d’URL de la requête.Configuration de la réécriture
RewriteMap d2u "prg:/www/bin/dash2under.py" apache:apache
@@ -427,16 +419,49 @@ for line in sys.stdin:
print(line.strip().replace('-', '_'), flush=True)
+ Un exemple plus complet montre un motif typique pour qu’un programme de
+ correspondance prg: lise une ligne, recherche le résultat et l’affiche. La
+ sortie de diagnostic est écrite sur STDERR et termine sa course
+ dans le journal des erreurs de httpd.
Configuration de la réécriture
+RewriteMap vhost2docroot "prg:/www/bin/vhost_lookup.py"
+RewriteRule "^/(.*)$" "${vhost2docroot:%{HTTP_HOST}}/$1"
+
+
+ vhost_lookup.py
+#!/usr/bin/env python3
+"""Associer un nom d’hôte au répertoire racine de ses documents."""
+import sys
+
+VHOSTS = {
+ "example.com": "/srv/www/example",
+ "blog.example.com": "/srv/www/blog",
+}
+
+for line in sys.stdin:
+ host = line.strip().lower()
+ docroot = VHOSTS.get(host)
+ if docroot:
+ print(docroot, flush=True)
+ else:
+ # "NULL" indique à mod_rewrite que la recherche a échoué
+ print("NULL", flush=True)
+ print(f"vhost_lookup: no match for {host!r}", file=sys.stderr)
+
+
flush=True à print(). Si les entrées/sorties sont mises en tampon, httpd va
-attendre une sortie, et va par conséquent se bloquer.flush=True à print(). Si les entrées/sorties sont
+mises en tampon, httpd va attendre une sortie, et va par conséquent se bloquer.
+Il s’agit de la cause la plus courante pour laquelle le mappage prg: semble ne
+rien faire — le programme a la réponse mais httpd ne la verra jamais, car
+elle est prisonnière d’un tampon.Le « sharding » est une technique courante de distribution de la charge + de travail ou de l’espace de stockage. Lorsqu’on utilise cette méthode, un + serveur frontal va utiliser l’URL pour distribuer les utilisateurs ou + objets à des serveurs dorsaux de manière cohérente.
+Un mappage entre les utilisateurs et les serveurs cible est entretenu + dans des fichiers de mappage. Ces derniers sont sous la forme :
+ +
+utilisateur1 serveur_physique_de_utilisateur1
+utilisateur2 serveur_physique_de_utilisateur2
+# ... et ainsi de suite
+
Nous inscrivons ceci dans un fichier
+ mappage.utilisateur-vers-serveur. Le but est d’associer
+/u/utilisateur1/chemin
+
à
+ +
+http://serveur_physique_de_utilisateur1/u/utilisateur/chemin
+
de sorte que tous les chemins d’URL n’ont pas besoin d’être valables + sur chaque serveur dorsal physique. Le jeu de règles suivant fait cela + pour nous avec l’aide des fichiers de mappage, en supposant que server0 + est un serveur par défaut qui sera utilisé si un utilisateur n’a pas + d’entrée dans le mappage :
+ +RewriteEngine on
+RewriteMap users-to-hosts "txt:/path/to/map.users-to-hosts"
+RewriteRule "^/u/([^/]+)/?(.*)" "http://${users-to-hosts:$1|server0}/u/$1/$2"
+
+ Pour distribuer les requêtes aux différents serveurs dorsaux,
+ mod_proxy_balancer constitue une approche plus robuste et
+ configurable, avec la prise en charge d’un bilan de santé, d’une
+ pondération des charges et de la persistance des sessions. L’approche
+ basée sur un mappage txt: présentée ici est plus simple mais ne prend pas
+ en charge ces fonctionnalités.
Voir la documentation de RewriteMap pour une description plus complète
+ de la syntaxe de cette directive.
+
Redirect never sees
the request.
+
+ 
+ Figure: Module processing order reversal between server and per-directory context
+
# In this configuration, the Redirect is never reached for /old # because the RewriteRule matches first — even though # the Redirect appears earlier in the file. @@ -220,7 +225,7 @@ RewriteRule "^/horses/ponies$" "/special-handler" [L]first, and so the control flow is a little bit long-winded. See Figure 2 for more details.
- 
+ 
Figure 2:The control flow through the rewriting ruleset
First the URL is matched against the diff --git a/docs/manual/rewrite/tech.html.fr.utf8 b/docs/manual/rewrite/tech.html.fr.utf8 index 8a14b5d8..0cddd25a 100644 --- a/docs/manual/rewrite/tech.html.fr.utf8 +++ b/docs/manual/rewrite/tech.html.fr.utf8 @@ -26,16 +26,16 @@
Ce document passe en revue certains détails techniques à propos du
module mod_rewrite et de la mise en correspondance des URLs
Phases de l'API
Module Processing Order
Encodage et décodage des URLs
Traitement du jeu de règlesLorsqu'une requête arrive et une fois le serveur
correspondant ou le serveur virtuel déterminé, le moteur de
- réécriture commence à traiter toute directive apparaissant dans la
+ réécriture commence à traiter toute directive mod_rewrite apparaissant dans la
configuration de niveau serveur (autrement dit dans le
fichier de configuration principal du serveur et les sections
<Virtualhost>).
@@ -73,104 +73,172 @@ correspondance
.htaccess et sections <Directory>) sont appliquées. Ce processus
s'exécute au cours de la phase Fixup.
- Dans tous ces cas, mod_rewrite réécrit le
- REQUEST_URI soit vers une nouvelle URL, soit vers un
+
Dans tous ces cas, mod_rewrite réécrit le
+ REQUEST_URI soit vers un nouvel URL, soit vers un
nom de fichier.
Dans un contexte de répertoire (autrement dit dans les
- fichiers .htaccess et les sections
- Directory), les règles de réécriture s'appliquent après
- la traduction de l'URL en nom de fichier. C'est pourquoi le chemin
- URL auquel mod_rewrite compare initialement les directives
- RewriteRule est le
- chemin complet vers le nom de fichier traduit amputé de la partie
- répertoires (y compris le dernier slash).
Un exemple : si les règles se trouvent dans - /var/www/foo/.htaccess et si une requête pour /foo/bar/baz est - traité, une expression comme ^bar/baz$ correspondra.
- -Si une substitution intervient dans un contexte de répertoire,
- une nouvelle sous-requête interne est générée avec la nouvelle URL,
- ce qui relance le traitement des phases de la requête. Si la
- substitution est un chemin relatif, la directive RewriteBase détermine le chemin URL
- devant préfixer cette substitution. Dans un contexte de répertoire,
- il faut s'assurer de créer des règles qui
- n'effectueront pas de substitution au
- cours d'une passe ultérieure du processus de réécriture au niveau
- répertoire afin d'éviter les bouclages . Voir Bouclage dans le
- processus de réécriture pour une discussion plus détaillée à
- propos de ce problème.
En conséquence de cette manipulation de l'URL , vous devrez - pensez à confectionner différemment vos règles de réécriture dans un - contexte de niveau répertoire. En particulier, rappelez-vous que le - chemin de répertoire sera absent de l'URL que vos règles de - réécriture verront. Voici quelques exemples qui permettront de - clarifier les choses :
- -| Position de la règle | -Règle | -
|---|---|
| Section VirtualHost | -RewriteRule "^/images/(.+)\.jpg" "/images/$1.gif" | -
| Fichier .htaccess à la racine des documents | -RewriteRule "^images/(.+)\.jpg" "images/$1.gif" | -
| Fichier .htaccess dans le répertoire images | -RewriteRule "^(.+)\.jpg" "$1.gif" | -
Pour une étude plus approfondie de la manière dont
- mod_rewrite manipule les URLs dans les différents
- contextes, vous pouvez consulter les entrées du journal
- générées au cours du processus de
- réécriture.
Dans un contexte de répertoire, + les règles sont appliquées durant la phase "Fixup" après que l’URL a été + traduit en nom de fichier. Cela modifie ce à quoi correspond le motif et la + manière dont les substitutions sont gérées. Voir le document Réécritures en fonction du + répertoire pour des détails pratiques à propos de la suppression du + chemin, de RewriteBase et de la manière d’éviter un bouclage.
+ +mod_rewrite et mod_alias agissent tous
+ les deux au cours de la phase de traduction de l’URL en nom de fichier, mais
+ mod_rewrite opère en premier, quel que soit l’ordre
+ d’apparition des directives dans le fichier de configuration. Ce
+ comportement est déterminé par la priorité des points d’accroche
+ qu’enregistre chaque module, pas par l’ordre du code source.
La conséquence pratique : lorsque des directives RewriteRule et Redirect (ou RedirectMatch) sont présentent simultanément
+ dans le même contexte de serveur virtuel ou global au serveur, les règles de
+ réécriture sont évaluées en premier. Si une règle RewriteRule
+ correspond et réécrit le chemin d’URL (ou renvoie une redirection),
+ Redirect ne verra jamais la requête.
+ 
+ Figure : Inversion de l’ordre d’opération des modules entre les
+ contextes global au serveur et de répertoire
+
# Dans cette configuration, le Redirect n’est jamais atteint pour /old, +# car la règle RewriteRule s’applique en premier — même si +# Redirect apparaît plus tôt dans le fichier. +Redirect "/old" "http://example.com/new" +RewriteRule "^/old" "/other" [L]+ + +
Dans un contexte de répertoire,
+ la situation est différente. Les directives de mod_alias
+ comme Redirect s’appliquent encore dans la phase de traduction
+ de l’URL en nom de fichier, mais les directives de
+ mod_rewrite s’appliquent plus tard, lors de la phase de
+ correction. Cela signifie que dans un contexte de répertoire,
+ Redirect est évaluée avant l’application des
+ règles RewriteRule.
Du fait de l’incohérence entre les contextes, mélanger des directives de
+ mod_rewrite et de mod_alias dans la même
+ portée est une source courante de confusion. Un conseil simple : choisissez
+ un module pour une tâche donnée. Si vous avez besoin de conditions de
+ réécritures ou de comparaison de motif, utilisez exclusivement
+ RewriteRule. Si une simple redirection de préfixe suffit,
+ utilisez la directive Redirect et n’ajoutez pas de règles de
+ réécritures qui pourraient interagir avec elle.
Apache httpd supprime l’échappement des caractères encodés pour l’URL
+ dans le chemin d’URL de la requête avant que toute comparaison de motif de
+ directive RewriteRule ne soit
+ effectuée. Une requête pour /my%20page/cats%3Fdogs est décodée
+ en /my page/cats?dogs, et c’est à cette chaîne décodée qu’est
+ comparé le motif de la directive RewriteRule.
Cela signifie que vous ne pouvez pas écrire un motif correspondant à la
+ forme littérale de l’URL encodé. Si vous devez distinguer
+ /horses%2Fponies de /horses/ponies, utilisez la
+ variable %{THE_REQUEST} dans une directive RewriteCond — cette variable conserve la
+ requête originelle telle qu’elle a été envoyée par le client, avant tout
+ décodage :
# Ne correspond qu’au caractère encodé littéral %2F,
+# pas au séparateur de chemin réel
+RewriteCond "%{THE_REQUEST}" "/horses%2F"
+RewriteRule "^/horses/ponies$" "/special-handler" [L]
+
+
+ Après la substitution, mod_rewrite réencode le chemin
+ d’URL résultant en sortie. Plusieurs drapeaux permettent de contrôler ce
+ comportement :
%20 au lieu de + (convient
+ pour les éléments du chemin, pas pour la chaîne de paramètres).#, ? et d’autres caractères lors des
+ redirections externes.Par défaut, httpd renvoie un code 404 pour tout URL contenant une barre
+ oblique encodée (%2F). La directive AllowEncodedSlashes permet de modifier ce
+ comportement :
Off (valeur par défaut) : rejette %2F avec
+ un code 404.On : autorise %2F et le décode en
+ / avant de le transmettre aux gestionnaires.NoDecode : autorise %2F, mais le conserve
+ sous sa forme encodée de façon que l’application dorsale le distingue d’un
+ séparateur de chemin réel.Lorsqu’on utilise le drapeau [B] avec des
+ URLs qui peuvent contenir des barres obliques encodées, il est en général
+ nécessaire d’utiliser AllowEncodedSlashes NoDecode pour éviter
+ que httpd ne rejette le résultat réencodé.
Maintenant, quand mod_rewrite se lance dans ces deux phases de
- l'API, il lit le jeu de règles configurées depuis la structure
- contenant sa configuration (qui a été elle-même créée soit au
- démarrage d'Apache pour le contexte du serveur, soit lors du
- parcours des répertoires par le noyau d'Apache pour le contexte de
- répertoire). Puis le moteur de réécriture est démarré avec le jeu
- de règles contenu (une ou plusieurs règles associées à leurs
- conditions). En lui-même, le mode opératoire du moteur de
- réécriture d'URLs est exactement le même dans les deux contextes
- de configuration. Seul le traitement du résultat final diffère.
L'ordre dans lequel les règles sont définies est important car
- le moteur de réécriture les traite selon une chronologie
- particulière (et pas très évidente). Le principe est le suivant :
- le moteur de réécriture traite les règles (les directives RewriteRule) les unes
- à la suite des autres, et lorsqu'une règle s'applique, il parcourt
- les éventuelles conditions (directives
- RewriteConddirectives) associées.
- Pour des raisons historiques, les
- conditions précèdent les règles, si bien que le déroulement du
- contrôle est un peu compliqué. Voir la figure 1 pour plus de
- détails.
Maintenant, quand mod_rewrite se lance dans ces deux
+ phases de l'API, il lit le jeu de règles configuré depuis la structure
+ contenant sa configuration (qui a été elle-même créée soit au démarrage
+ d'Apache httpd pour le contexte du serveur, soit lors du parcours des
+ répertoires par le noyau d'Apache httpd pour le contexte de répertoire).
+ Puis le moteur de réécriture est démarré avec le jeu de règles contenu
+ (une ou plusieurs règles associées à leurs conditions). En lui-même, le
+ mode opératoire du moteur de réécriture d'URLs est exactement le même dans
+ les deux contextes de configuration. Seul le traitement du résultat final
+ diffère.
+ 
+ Figure 1 :Le processus de réécriture par requête montrant les
+ deux phases du traitement des règles (par serveur et par répertoire)
+
L'ordre dans lequel les règles sont définies est important car le
+ moteur de réécriture les traite selon une chronologie particulière (et pas
+ très évidente). Le principe est le suivant : le moteur de réécriture
+ traite les règles (les directives RewriteRule) les unes à la suite des
+ autres, et lorsqu'une règle s'applique, il parcourt les éventuelles
+ conditions (directives RewriteConddirectives) associées.
+ Pour des raisons historiques, les conditions précèdent les règles, si bien
+ que le déroulement du contrôle est un peu compliqué. Voir la figure 2 pour
+ plus de détails.
- 
- Figure 1:Déroulement du contrôle à travers le jeu de
- règles de réécriture
+ 
+ Figure 2 :Le flux de contrôle en parcourant le jeu de règles de
+ réécriture
L'URL est tout d'abord comparée au +
L'URL est tout d'abord comparé au
Modèle de chaque règle. Lorsqu'une règle ne s'applique
pas, mod_rewrite stoppe immédiatement le traitement de cette règle
et passe à la règle suivante. Si l'URL correspond au
@@ -195,6 +263,15 @@ correspondance
+ 
+ Figure 3 :Le flux des références arrières dans une règle
+ Tout d’abord, le motif de la règle RewriteRule est comparé ; ses captures
+ ($1...$9) sont disponibles dans toutes les chaînes de test des conditions
+ RewriteCond. Les dernières captures du motif de la condition qui
+ correspondent (%1...%9) sont disponibles dans la substitution.
+
Langues Disponibles: en | diff --git a/docs/manual/rewrite/vhosts.html.fr.utf8 b/docs/manual/rewrite/vhosts.html.fr.utf8 index 5a1cc934..6a8f5844 100644 --- a/docs/manual/rewrite/vhosts.html.fr.utf8 +++ b/docs/manual/rewrite/vhosts.html.fr.utf8 @@ -26,8 +26,6 @@
Ce document est un complément à la documentation de référence du module
@@ -35,7 +33,7 @@
virtuels dynamiquement configurés en utilisant
mod_rewrite.
mod_rewrite n'est pas la
+mod_rewrite n'est en général pas la
meilleure méthode pour configurer des serveurs virtuels. Vous devez dans un
premier temps tenter de résoudre votre problème via ces d'autres méthodes avant d'avoir recours à
mod_rewrite. Voir aussi le document Comment éviter
@@ -49,7 +47,7 @@ virtuels via mod_rewrite<
Utilisation d'un fichier de configuration
du serveur virtuel séparé
Voir aussi
Dans cet exemple, nous supposons que nous utilisons le nom d'hôte
- www.SITE.example.com pour chaque
+ SITE.example.com pour chaque
utilisateur, et que nous servons leur contenu depuis
- /home/SITE/www.
/home/SITE/www. Nous souhaitons cependant que
+ www.example.com n'apparaisse pas dans cette mise en correspondance.
%1, %2, etc..
les contenus des parenthèses utilisées dans une directive RewriteRule le sont dans les
références arrières $1, $2, etc...
+La première directive RewriteCond vérifie si le nom d'hôte
+commence par www. et si c'est le cas, la réécriture est annulée.
Comme c'est le cas pour de nombreuses techniques discutées dans ce
document, mod_rewrite n'est vraiment pas la meilleure méthode pour
@@ -152,10 +154,10 @@ RewriteEngine On
# un nom de serveur extrait d'un en-tête Host: peut être dans n'importe
# quelle casse
-RewriteMap lowercase int:tolower
+RewriteMap lowercase "int:tolower"
## on s'occupe tout d'abord des documents normaux :
-# permet à Alias "/icons/" de fonctionner - répéter pour les autres
+# permet à Alias /icons/ de fonctionner - répéter pour les autres
RewriteCond "%{REQUEST_URI}" "!^/icons/"
# permet aux CGIs de fonctionner
RewriteCond "%{REQUEST_URI}" "!^/cgi-bin/"
@@ -192,7 +194,7 @@ www.client-N.example.com /www/clients/N
RewriteEngine on
-RewriteMap lowercase int:tolower
+RewriteMap lowercase "int:tolower"
# définit le fichier de correspondances
RewriteMap vhost "txt:/www/conf/vhost.map"
diff --git a/docs/manual/style/css/manual.css b/docs/manual/style/css/manual.css
index 9eb7979c..4084e684 100644
--- a/docs/manual/style/css/manual.css
+++ b/docs/manual/style/css/manual.css
@@ -1237,4 +1237,9 @@ h2:hover > .permalink {
overflow-x: auto;
max-width: 100%;
}
+
+ /* Bug 70098: hide back-to-top arrows on narrow viewports */
+ div.top {
+ display: none;
+ }
}
diff --git a/docs/manual/style/version.ent b/docs/manual/style/version.ent
index bdf2d77f..bd4feb6a 100644
--- a/docs/manual/style/version.ent
+++ b/docs/manual/style/version.ent
@@ -19,6 +19,6 @@
-
+
diff --git a/docs/manual/suexec.html.fr.utf8 b/docs/manual/suexec.html.fr.utf8
index 670a7a68..02e06a6b 100644
--- a/docs/manual/suexec.html.fr.utf8
+++ b/docs/manual/suexec.html.fr.utf8
@@ -29,8 +29,6 @@
ko |
tr
La fonctionnalité suEXEC permet l'exécution des programmes CGI et diff --git a/docs/manual/urlmapping.html.en b/docs/manual/urlmapping.html.en index 6ed09c03..4ae06eee 100644 --- a/docs/manual/urlmapping.html.en +++ b/docs/manual/urlmapping.html.en @@ -54,10 +54,10 @@
In deciding what file to serve for a given request, httpd's
- default behavior is to take the URL-Path for the request (the part
- default behavior is to take the URL-Path for the request (the part
- of the URL following the hostname and port) and add it to the end
- of the DocumentRoot specified
+ default behavior is to take the
+ URL-Path for the request
+ and add it to the end of the
+ DocumentRoot specified
in your configuration files. Therefore, the files and directories
underneath the DocumentRoot
make up the basic document tree which will be visible from the
diff --git a/docs/manual/urlmapping.html.fr.utf8 b/docs/manual/urlmapping.html.fr.utf8
index 04556123..4838e7cc 100644
--- a/docs/manual/urlmapping.html.fr.utf8
+++ b/docs/manual/urlmapping.html.fr.utf8
@@ -29,8 +29,6 @@
ko |
tr
Ce document explique comment le serveur HTTP Apache utilise l'URL contenue dans une requête pour déterminer le noeud du système de fichier à partir duquel le @@ -58,15 +56,11 @@ URLs
La méthode par défaut de httpd pour déterminer quel fichier servir pour
- une requête donnée, consiste à extraire le chemin du fichier de la requête
- (la partie de l'URL qui suit le nom d'hôte et le port), puis de l'ajouter
- à la fin de la valeur de la directive
- DocumentRoot définie dans vos fichiers
- de configuration.
- Ainsi, les fichiers et répertoires
- situés en dessous de DocumentRoot
- constituent l'arborescence de base des documents qui seront visibles
- depuis le web.
DocumentRoot définie dans vos fichiers de
+ configuration. Ainsi, les fichiers et répertoires situés en dessous de
+ DocumentRoot constituent l'arborescence
+ de base des documents qui seront visibles depuis le web.
Par exemple, si la directive
Key:\n\
+ The remaining fields are the pieces returned from parse_uri_components, and\n\
+the values we expected for each piece (resp.).\n\
+ Only failures are displayed.\n\
+ \n\
+DocumentRoot contient
diff --git a/httpd.spec b/httpd.spec
index 5a16a157..baa2d62a 100644
--- a/httpd.spec
+++ b/httpd.spec
@@ -4,7 +4,7 @@
Summary: Apache HTTP Server
Name: httpd
-Version: 2.4.68
+Version: 2.4.69
Release: 1
URL: http://httpd.apache.org/
Vendor: Apache Software Foundation
diff --git a/include/ap_release.h b/include/ap_release.h
index 06a0e262..f4f10805 100644
--- a/include/ap_release.h
+++ b/include/ap_release.h
@@ -43,7 +43,7 @@
#define AP_SERVER_MAJORVERSION_NUMBER 2
#define AP_SERVER_MINORVERSION_NUMBER 4
-#define AP_SERVER_PATCHLEVEL_NUMBER 68
+#define AP_SERVER_PATCHLEVEL_NUMBER 69
#define AP_SERVER_DEVBUILD_BOOLEAN 0
/* Synchronize the above with docs/manual/style/version.ent */
diff --git a/include/httpd.h b/include/httpd.h
index 342d00a0..eb24f820 100644
--- a/include/httpd.h
+++ b/include/httpd.h
@@ -486,11 +486,12 @@ AP_DECLARE(const char *) ap_get_server_built(void);
* When adding a new code here add it to status_lines as well.
* A future version should dynamically generate the apr_table_t at startup.
*/
-#define RESPONSE_CODES 103
+#define RESPONSE_CODES 104
#define HTTP_CONTINUE 100
#define HTTP_SWITCHING_PROTOCOLS 101
#define HTTP_PROCESSING 102
+#define HTTP_EARLY_HINTS 103
#define HTTP_OK 200
#define HTTP_CREATED 201
#define HTTP_ACCEPTED 202
diff --git a/modules/aaa/config.m4 b/modules/aaa/config.m4
index b443761d..766354a1 100644
--- a/modules/aaa/config.m4
+++ b/modules/aaa/config.m4
@@ -70,9 +70,9 @@ APACHE_MODULE(auth_basic, basic authentication, , , yes)
APACHE_MODULE(auth_form, form authentication, , , most)
APACHE_MODULE(auth_digest, RFC2617 Digest authentication, , , most, [
APR_CHECK_APR_DEFINE(APR_HAS_RANDOM)
- if test $ac_cv_define_APR_HAS_RANDOM = "no"; then
- echo "You need APR random support to use mod_auth_digest."
- echo "Look at APR configure options --with-egd and --with-devrandom."
+ APR_CHECK_APR_DEFINE(APR_HAS_SHARED_MEMORY)
+ if test "${ac_cv_define_APR_HAS_RANDOM}X${ac_cv_define_APR_HAS_SHARED_MEMORY}" != "yesXyes"; then
+ AC_MSG_NOTICE([mod_auth_digest requires APR with random and shared memory support])
enable_auth_digest="no"
fi
])
diff --git a/modules/aaa/mod_auth_digest.c b/modules/aaa/mod_auth_digest.c
index f10af0da..0267a83b 100644
--- a/modules/aaa/mod_auth_digest.c
+++ b/modules/aaa/mod_auth_digest.c
@@ -18,7 +18,7 @@
* mod_auth_digest: MD5 digest authentication
*
* Originally by Alexei Kosut ?seed,count", r);
+ return 0;
+ }
+
+#ifdef WIN32
+ srand(seed); /* XXX: apr-ize */
+#else
+ srandom(seed); /* XXX: apr-ize */
+#endif
+
+ for (i = 0; i < count; ++i) {
+#ifdef WIN32
+ len = rand() % (MAX_SEGMENT + ONE_WEIGHT);
+#else
+ len = random() % (MAX_SEGMENT + ONE_WEIGHT);
+#endif
+
+ if (len >= MAX_SEGMENT) {
+ ap_rputc((i & 1) ? '0' : '1', r);
+ total += 1;
+ }
+ else if (len == 0) {
+ /* 1.x version used to do this; but chunk_filter does now */
+#if 0
+ ap_bsetflag(r->connection->client, B_CHUNK, 0);
+ ap_bsetflag(r->connection->client, B_CHUNK, 1);
+#endif
+ }
+ else {
+ memset(buf, '2' + len, len);
+ buf[len] = 0;
+ total += ap_rputs(buf, r);
+ }
+ }
+
+ ap_rprintf(r, "__END__:%" APR_SIZE_T_FMT, total);
+
+ fprintf(stderr, "[mod_random_chunk] sent %" APR_SIZE_T_FMT "bytes\n",
+ total);
+
+ return 0;
+}
+
+APACHE_HTTPD_TEST_MODULE(random_chunk);
diff --git a/test/pytest_suite/c-modules/test_apr_uri/mod_test_apr_uri.c b/test/pytest_suite/c-modules/test_apr_uri/mod_test_apr_uri.c
new file mode 100644
index 00000000..195e1baf
--- /dev/null
+++ b/test/pytest_suite/c-modules/test_apr_uri/mod_test_apr_uri.c
@@ -0,0 +1,354 @@
+#define HTTPD_TEST_REQUIRE_APACHE 2
+
+#if CONFIG_FOR_HTTPD_TEST
+
+ \n", r);
+ ++failures;
+ }
+ apr_pool_destroy(sub);
+ }
+ return failures;
+}
+
+static int test_apr_uri_handler(request_rec *r)
+{
+ unsigned total_failures;
+ int i;
+
+ r->allowed |= (AP_METHOD_BIT << M_GET);
+ if (r->method_number != M_GET)
+ return DECLINED;
+
+ if (strcmp(r->handler, "test-apr-uri")) {
+ return DECLINED;
+ }
+
+ r->content_type = "text/html";
+
+ ap_rputs(
+DOCTYPE_HTML_2_0 "\n\
+\n\
+%d 0x%02x 0x%02x %d \"%s\" ", row, u, expect, status, input_uri);
+#define DUMP(f) \
+ if (result.f) { \
+ ap_rvputs(r, "\"", result.f, "\"
", NULL); \
+ } \
+ else { \
+ ap_rputs("NULL ", NULL); \
+ } \
+ else { \
+ ap_rputs("NULL", r); \
+ }
+ DUMP(scheme);
+ DUMP(user);
+ DUMP(password);
+ DUMP(hostname);
+ DUMP(port_str);
+ DUMP(path);
+ DUMP(query);
+ DUMP(fragment);
+#undef DUMP
+ ap_rputs("
", r); \
+ } \
+ if (expect & T_##f) { \
+ ap_rvputs(r, "\"", pieces->f, "\"\n\
+
\n\
+
\nStopped early to save your browser "
+ "from certain death!\nTOTAL FAILURES = %u\n",
+ total_failures);
+ return OK;
+ }
+ }
+ }
+ ap_rprintf(r, "row u expect status input uri ", r);
+#define HEADER(f) ap_rprintf(r, "" #f " ", T_##f)
+ HEADER(scheme);
+ HEADER(user);
+ HEADER(password);
+ HEADER(hostname);
+ HEADER(port_str);
+ HEADER(path);
+ HEADER(query);
+ HEADER(fragment);
+#undef HEADER
+
+ if (r->args) {
+ i = atoi(r->args);
+ total_failures = iterate_pieces(r, &uri_tests[i], i);
+ }
+ else {
+ total_failures = 0;
+ for (i = 0; i < sizeof(uri_tests) / sizeof(uri_tests[0]); ++i) {
+ total_failures += iterate_pieces(r, &uri_tests[i], i);
+ if (total_failures > 256) {
+ ap_rprintf(r, "
0x%02x
[back]
+ + diff --git a/test/pytest_suite/t/htdocs/modules/include/virtualq.shtml b/test/pytest_suite/t/htdocs/modules/include/virtualq.shtml new file mode 100644 index 00000000..b587b460 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/include/virtualq.shtml @@ -0,0 +1,4 @@ + + + + diff --git a/test/pytest_suite/t/htdocs/modules/include/xbithack/both/timefmt.shtml b/test/pytest_suite/t/htdocs/modules/include/xbithack/both/timefmt.shtml new file mode 100755 index 00000000..e4ef5223 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/include/xbithack/both/timefmt.shtml @@ -0,0 +1,2 @@ + +xxxx diff --git a/test/pytest_suite/t/htdocs/modules/include/xbithack/full/test.html b/test/pytest_suite/t/htdocs/modules/include/xbithack/full/test.html new file mode 100755 index 00000000..f8f4ff1c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/include/xbithack/full/test.html @@ -0,0 +1,3 @@ + + + diff --git a/test/pytest_suite/t/htdocs/modules/include/xbithack/off/test.html b/test/pytest_suite/t/htdocs/modules/include/xbithack/off/test.html new file mode 100755 index 00000000..f8f4ff1c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/include/xbithack/off/test.html @@ -0,0 +1,3 @@ + + + diff --git a/test/pytest_suite/t/htdocs/modules/include/xbithack/on/test.html b/test/pytest_suite/t/htdocs/modules/include/xbithack/on/test.html new file mode 100755 index 00000000..f8f4ff1c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/include/xbithack/on/test.html @@ -0,0 +1,3 @@ + + + diff --git a/test/pytest_suite/t/htdocs/modules/lua/201.lua b/test/pytest_suite/t/htdocs/modules/lua/201.lua new file mode 100644 index 00000000..f3541251 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/201.lua @@ -0,0 +1,3 @@ +function handle(r) + r.status = 201 +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/filters.lua b/test/pytest_suite/t/htdocs/modules/lua/filters.lua new file mode 100644 index 00000000..4236ecc2 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/filters.lua @@ -0,0 +1,16 @@ +--[[ + Example output filter that escapes all HTML entities in the output +]]-- +function output_filter(r) + coroutine.yield("prefix\n") + while bucket do -- For each bucket, do... + if string.len(bucket) > 0 then + local output = "bucket:" .. bucket .. "\n" + coroutine.yield(output) -- Send converted data down the chain + else + coroutine.yield("") -- Send converted data down the chain + end + end + coroutine.yield("suffix\n") + -- No more buckets available. +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/hello.lua b/test/pytest_suite/t/htdocs/modules/lua/hello.lua new file mode 100644 index 00000000..85cd99e9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/hello.lua @@ -0,0 +1,4 @@ +function handle(r) + r.content_type = "text/plain" + r:puts("Hello Lua World!\n") +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/hello2.lua b/test/pytest_suite/t/htdocs/modules/lua/hello2.lua new file mode 100644 index 00000000..2a4b16f8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/hello2.lua @@ -0,0 +1,4 @@ +function handle(r) + r.content_type = "text/plain" + r:puts("other lua handler\n") +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/https.lua b/test/pytest_suite/t/htdocs/modules/lua/https.lua new file mode 100644 index 00000000..93930936 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/https.lua @@ -0,0 +1,7 @@ +function handle(r) + if r.is_https then + r:puts("yep") + else + r:puts("nope") + end +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/method.lua b/test/pytest_suite/t/htdocs/modules/lua/method.lua new file mode 100644 index 00000000..e5ea3eef --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/method.lua @@ -0,0 +1,3 @@ +function handle(r) + r:puts(r.method) +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/setheaderfromparam.lua b/test/pytest_suite/t/htdocs/modules/lua/setheaderfromparam.lua new file mode 100644 index 00000000..6c8d9c54 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/setheaderfromparam.lua @@ -0,0 +1,10 @@ +-- Syntax: setheader.lua?HeaderName=foo&HeaderValue=bar +-- +-- This will return a document with 'bar' set in the header 'foo' + +function handle(r) + local GET, GETMULTI = r:parseargs() + + r.headers_out[GET['HeaderName']] = GET['HeaderValue'] + r:puts("Header set") +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/setheaders.lua b/test/pytest_suite/t/htdocs/modules/lua/setheaders.lua new file mode 100644 index 00000000..faa7f683 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/setheaders.lua @@ -0,0 +1,4 @@ +function handle(r) + r.headers_out["X-Header"] = "yes" + r.headers_out["X-Host"] = r.headers_in["Host"] +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/translate.lua b/test/pytest_suite/t/htdocs/modules/lua/translate.lua new file mode 100644 index 00000000..7d19c9a4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/translate.lua @@ -0,0 +1,28 @@ +require 'apache2' + +function translate_name(r) + r:debug("translate_name: " .. r.uri) + local query = r:parseargs() + if query.translateme then + r:debug("translate_name: translateme was true " .. r.uri) + r.uri = "/modules/lua/hello.lua" + return apache2.DECLINED + end + return apache2.DECLINED +end + +function translate_name2(r) + r:debug("translate_name2: " .. r.uri) + local query = r:parseargs() + if (query.ok) then + r:debug("will return OK") + end + if query.translateme then + r.uri = "/modules/lua/hello2.lua" + if query.ok then + r.filename= r.document_root .. r.uri + return apache2.OK + end + end + return apache2.DECLINED +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/version.lua b/test/pytest_suite/t/htdocs/modules/lua/version.lua new file mode 100644 index 00000000..78538442 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/version.lua @@ -0,0 +1,3 @@ +function handle(r) + r:puts(apache2.version) +end diff --git a/test/pytest_suite/t/htdocs/modules/lua/websockets.lua b/test/pytest_suite/t/htdocs/modules/lua/websockets.lua new file mode 100644 index 00000000..6e6d5ba1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/lua/websockets.lua @@ -0,0 +1,18 @@ +function handle(r) +if r:wsupgrade() then -- if we can upgrade: + while true do + local line, isFinal = r:wsread() + local len = string.len(line); + r:debug(string.format("writing line of len %d: %s", len, line)) + if len >= 1024 then + r:debug("writing line ending in '" .. string.sub(line, -127, -1) .. "'") + end + r:wswrite(line) + if line == "quit" then + r:wsclose() -- goodbye! + break + end + + end +end +end diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/content-type/test.var b/test/pytest_suite/t/htdocs/modules/negotiation/content-type/test.var new file mode 100644 index 00000000..a2d35259 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/content-type/test.var @@ -0,0 +1,26 @@ +URI: test + +# NOTE: When adding new cases, pad out bodies with spaces so that they're of +# equal length. mod_negotiation will prefer shorter bodies if all else is equal, +# which is confusing. We just want the first acceptable alternate to win for +# these tests. + +URI: test.txt +Content-Type: text/plain +Body:--- +text/plain--- + +URI: test.html +Content-Type: text/html +Body:--- +text/html --- + +URI: test.jpg +Content-Type: image/jpeg +Body:--- +image/jpeg--- + +URI: test.gif +Content-Type: image/gif +Body:--- +image/gif --- diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.de new file mode 100644 index 00000000..555bd835 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.en new file mode 100644 index 00000000..b0d750c4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fr new file mode 100644 index 00000000..3a8b0bd1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fu new file mode 100644 index 00000000..c0b85dfd --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW new file mode 100755 index 00000000..453658e8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.de new file mode 100644 index 00000000..1d9a5e87 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.en new file mode 100644 index 00000000..d288e3cf --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fr new file mode 100644 index 00000000..e739edda --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fu new file mode 100644 index 00000000..c0b6f1f9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.zh-TW new file mode 100755 index 00000000..f653cbe5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.de.html b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.de.html new file mode 100644 index 00000000..075f6bcc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.en.html b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.en.html new file mode 100644 index 00000000..35c0623c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fr.html b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fr.html new file mode 100644 index 00000000..8c756a7c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fu.html b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fu.html new file mode 100644 index 00000000..72eb5eff --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.zh-TW.html b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.zh-TW.html new file mode 100755 index 00000000..f4f62983 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/de/two/map.var b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/map.var new file mode 100644 index 00000000..1069a100 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/de/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.de new file mode 100644 index 00000000..555bd835 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.en new file mode 100644 index 00000000..b0d750c4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fr new file mode 100644 index 00000000..3a8b0bd1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fu new file mode 100644 index 00000000..c0b85dfd --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW new file mode 100755 index 00000000..453658e8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.de new file mode 100644 index 00000000..1d9a5e87 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.en new file mode 100644 index 00000000..d288e3cf --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fr new file mode 100644 index 00000000..e739edda --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fu new file mode 100644 index 00000000..c0b6f1f9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.zh-TW new file mode 100755 index 00000000..f653cbe5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.de.html b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.de.html new file mode 100644 index 00000000..075f6bcc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.en.html b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.en.html new file mode 100644 index 00000000..35c0623c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fr.html b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fr.html new file mode 100644 index 00000000..8c756a7c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fu.html b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fu.html new file mode 100644 index 00000000..72eb5eff --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.zh-TW.html b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.zh-TW.html new file mode 100755 index 00000000..f4f62983 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/en/two/map.var b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/map.var new file mode 100644 index 00000000..1069a100 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/en/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.de new file mode 100644 index 00000000..555bd835 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.en new file mode 100644 index 00000000..b0d750c4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fr new file mode 100644 index 00000000..3a8b0bd1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fu new file mode 100644 index 00000000..c0b85dfd --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW new file mode 100755 index 00000000..453658e8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.de new file mode 100644 index 00000000..1d9a5e87 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.en new file mode 100644 index 00000000..d288e3cf --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fr new file mode 100644 index 00000000..e739edda --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fu new file mode 100644 index 00000000..c0b6f1f9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.zh-TW new file mode 100755 index 00000000..f653cbe5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.de.html b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.de.html new file mode 100644 index 00000000..075f6bcc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.en.html b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.en.html new file mode 100644 index 00000000..35c0623c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fr.html b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fr.html new file mode 100644 index 00000000..8c756a7c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fu.html b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fu.html new file mode 100644 index 00000000..72eb5eff --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html new file mode 100755 index 00000000..f4f62983 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/map.var b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/map.var new file mode 100644 index 00000000..1069a100 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fr/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.de new file mode 100644 index 00000000..555bd835 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.en new file mode 100644 index 00000000..b0d750c4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fr new file mode 100644 index 00000000..3a8b0bd1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fu new file mode 100644 index 00000000..c0b85dfd --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW new file mode 100755 index 00000000..453658e8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.de new file mode 100644 index 00000000..1d9a5e87 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.en new file mode 100644 index 00000000..d288e3cf --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fr new file mode 100644 index 00000000..e739edda --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fu new file mode 100644 index 00000000..c0b6f1f9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.zh-TW new file mode 100755 index 00000000..f653cbe5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.de.html b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.de.html new file mode 100644 index 00000000..075f6bcc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.en.html b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.en.html new file mode 100644 index 00000000..35c0623c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fr.html b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fr.html new file mode 100644 index 00000000..8c756a7c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fu.html b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fu.html new file mode 100644 index 00000000..72eb5eff --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html new file mode 100755 index 00000000..f4f62983 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/map.var b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/map.var new file mode 100644 index 00000000..1069a100 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/fu/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/query/test.html b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.html new file mode 100644 index 00000000..80e8f7ad --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.html @@ -0,0 +1 @@ +test.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/query/test.pl.PL b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.pl.PL new file mode 100755 index 00000000..b3701635 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.pl.PL @@ -0,0 +1,8 @@ + +print "Content-type: text/html\n\n"; + +foreach my $key (keys %ENV) { + if ($key eq "QUERY_STRING") { + print "$key --> $ENV{$key}\n"; + } +} diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/query/test.var b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.var new file mode 100644 index 00000000..6c8aca68 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/query/test.var @@ -0,0 +1,7 @@ +URI: test + +URI: test.pl +Content-Type: text/html; qs=1.0 + +URI: test.html +Content-Type: text/html; qs=0.8 diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de new file mode 100755 index 00000000..555bd835 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.de @@ -0,0 +1 @@ +index.html.de.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en new file mode 100755 index 00000000..b0d750c4 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.en @@ -0,0 +1 @@ +index.html.en.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr new file mode 100755 index 00000000..3a8b0bd1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fr @@ -0,0 +1 @@ +index.html.fr.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu new file mode 100755 index 00000000..c0b85dfd --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.fu @@ -0,0 +1 @@ +index.html.fu.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW new file mode 100755 index 00000000..453658e8 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/compressed/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW.gz diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.de b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.de new file mode 100755 index 00000000..1d9a5e87 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.de @@ -0,0 +1 @@ +index.html.de diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.en b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.en new file mode 100755 index 00000000..d288e3cf --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.en @@ -0,0 +1 @@ +index.html.en diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fr b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fr new file mode 100755 index 00000000..e739edda --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fr @@ -0,0 +1 @@ +index.html.fr diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fu b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fu new file mode 100755 index 00000000..c0b6f1f9 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.fu @@ -0,0 +1 @@ +index.html.fu diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW new file mode 100755 index 00000000..f653cbe5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/index.html.zh-TW @@ -0,0 +1 @@ +index.html.zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.de.html b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.de.html new file mode 100755 index 00000000..075f6bcc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.de.html @@ -0,0 +1 @@ +index.de.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.en.html b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.en.html new file mode 100755 index 00000000..35c0623c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.en.html @@ -0,0 +1 @@ +index.en.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html new file mode 100755 index 00000000..8c756a7c --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fr.html @@ -0,0 +1 @@ +index.fr.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html new file mode 100755 index 00000000..72eb5eff --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.fu.html @@ -0,0 +1 @@ +index.fu.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html new file mode 100755 index 00000000..f4f62983 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/index.zh-TW.html @@ -0,0 +1 @@ +index.zh-TW.html diff --git a/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/map.var b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/map.var new file mode 100755 index 00000000..1069a100 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/negotiation/zh-TW/two/map.var @@ -0,0 +1,21 @@ +URI: index.html + +URI: index.en.html +Content-Type: text/html +Content-Language: en + +URI: index.de.html +Content-Type: text/html +Content-Language: de + +URI: index.fr.html +Content-Type: text/html +Content-Language: fr + +URI: index.fu.html +Content-Type: text/html +Content-Language: fu + +URI: index.zh-TW.html +Content-Type: text/html +Content-Language: zh-TW diff --git a/test/pytest_suite/t/htdocs/modules/proxy/fcgi-action/index.php b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-action/index.php new file mode 100644 index 00000000..6316092d --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-action/index.php @@ -0,0 +1,3 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic-rewrite/index.php b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic-rewrite/index.php new file mode 100644 index 00000000..6316092d --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic-rewrite/index.php @@ -0,0 +1,3 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic/index.php b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic/index.php new file mode 100644 index 00000000..6316092d --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-generic/index.php @@ -0,0 +1,3 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy/fcgi-rewrite-path-info/index.php b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-rewrite-path-info/index.php new file mode 100644 index 00000000..6316092d --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/fcgi-rewrite-path-info/index.php @@ -0,0 +1,3 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy/fcgi/index.php b/test/pytest_suite/t/htdocs/modules/proxy/fcgi/index.php new file mode 100644 index 00000000..6316092d --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/fcgi/index.php @@ -0,0 +1,3 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy/reverse/notproxy/local.html b/test/pytest_suite/t/htdocs/modules/proxy/reverse/notproxy/local.html new file mode 100644 index 00000000..3b18e512 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/reverse/notproxy/local.html @@ -0,0 +1 @@ +hello world diff --git a/test/pytest_suite/t/htdocs/modules/proxy/rewrite/.htaccess b/test/pytest_suite/t/htdocs/modules/proxy/rewrite/.htaccess new file mode 100644 index 00000000..792eb942 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy/rewrite/.htaccess @@ -0,0 +1,2 @@ +RewriteEngine on +RewriteRule ^(.*)$ /modules/rewrite/$1 [P,L] diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/case_insensitive.html b/test/pytest_suite/t/htdocs/modules/proxy_html/case_insensitive.html new file mode 100644 index 00000000..7fdc37fb --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/case_insensitive.html @@ -0,0 +1,11 @@ + + + +Visible content
+ +Document without DOCTYPE - should get one added
+ Link + + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/equiv.html b/test/pytest_suite/t/htdocs/modules/proxy_html/equiv.html new file mode 100644 index 00000000..bc1ee71f --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/equiv.html @@ -0,0 +1 @@ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/fixups_case.html b/test/pytest_suite/t/htdocs/modules/proxy_html/fixups_case.html new file mode 100644 index 00000000..cb598233 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/fixups_case.html @@ -0,0 +1,10 @@ + + + +
+
+
diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/inline_script.html b/test/pytest_suite/t/htdocs/modules/proxy_html/inline_script.html
new file mode 100644
index 00000000..82e1ba8d
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/proxy_html/inline_script.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_contenttype.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_contenttype.html
new file mode 100644
index 00000000..904a05de
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_contenttype.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ Test for Content-Type meta tag handling
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_edge_cases.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_edge_cases.html new file mode 100644 index 00000000..e6206877 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_edge_cases.html @@ -0,0 +1,11 @@ + + + + + +Test for edge cases in meta tag parsing
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_malformed.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_malformed.html new file mode 100644 index 00000000..594f9a78 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_malformed.html @@ -0,0 +1,14 @@ + + + + + + + + +Test for malformed meta tags that should be handled safely
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_multiple.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_multiple.html new file mode 100644 index 00000000..7e7a37cc --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_multiple.html @@ -0,0 +1,14 @@ + + + + + + + + +Test for multiple meta http-equiv tags
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_quotes.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_quotes.html new file mode 100644 index 00000000..7d705b58 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_quotes.html @@ -0,0 +1,12 @@ + + + + + + +Test for different quote styles in meta tags
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_simple.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_simple.html new file mode 100644 index 00000000..d9917960 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_simple.html @@ -0,0 +1,10 @@ + + + + +Test for simple meta http-equiv extraction
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_special_chars.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_special_chars.html new file mode 100644 index 00000000..2295ead1 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_special_chars.html @@ -0,0 +1,12 @@ + + + + + + +Test for special characters in meta tags
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/meta_whitespace.html b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_whitespace.html new file mode 100644 index 00000000..5ea2ad10 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/meta_whitespace.html @@ -0,0 +1,11 @@ + + + + + +Test for extra whitespace handling in meta tags
+ + diff --git a/test/pytest_suite/t/htdocs/modules/proxy_html/multi_subst.html b/test/pytest_suite/t/htdocs/modules/proxy_html/multi_subst.html new file mode 100644 index 00000000..0598dba5 --- /dev/null +++ b/test/pytest_suite/t/htdocs/modules/proxy_html/multi_subst.html @@ -0,0 +1,20 @@ + + +
+
+
+
diff --git a/test/pytest_suite/t/htdocs/modules/remoteip/index.html b/test/pytest_suite/t/htdocs/modules/remoteip/index.html
new file mode 100644
index 00000000..d788afed
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/remoteip/index.html
@@ -0,0 +1 @@
+PROXY-OK
diff --git a/test/pytest_suite/t/htdocs/modules/rewrite/barfoo.html b/test/pytest_suite/t/htdocs/modules/rewrite/barfoo.html
new file mode 100644
index 00000000..2ae28399
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/rewrite/barfoo.html
@@ -0,0 +1 @@
+pass
diff --git a/test/pytest_suite/t/htdocs/modules/rewrite/big.html b/test/pytest_suite/t/htdocs/modules/rewrite/big.html
new file mode 100644
index 00000000..c7413fcc
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/rewrite/big.html
@@ -0,0 +1 @@
+BIG
diff --git a/test/pytest_suite/t/htdocs/modules/rewrite/db.pl.PL b/test/pytest_suite/t/htdocs/modules/rewrite/db.pl.PL
new file mode 100644
index 00000000..a897a8a2
--- /dev/null
+++ b/test/pytest_suite/t/htdocs/modules/rewrite/db.pl.PL
@@ -0,0 +1,10 @@
+
+($txtmap, $dbmmap) = @ARGV;
+open(TXT, "<$txtmap");
+dbmopen(%DB, $dbmmap, 0644);
+while (Name ' + f'Last modified ' + f'Size ' + f'Description{hr} ' + f'Parent Directory' + f' - \n') + html_foot = f"{hr}\n\n" + else: + html_head += ('