diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:33:50 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:33:50 +0000 |
commit | fe39ffb8b90ae4e002ed73fe98617cd590abb467 (patch) | |
tree | b80e5956907d8aeaaffe4e4f0c068c0e6157ce8b /docs/manual/howto | |
parent | Initial commit. (diff) | |
download | apache2-fe39ffb8b90ae4e002ed73fe98617cd590abb467.tar.xz apache2-fe39ffb8b90ae4e002ed73fe98617cd590abb467.zip |
Adding upstream version 2.4.56.upstream/2.4.56
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'docs/manual/howto')
51 files changed, 16721 insertions, 0 deletions
diff --git a/docs/manual/howto/access.html b/docs/manual/howto/access.html new file mode 100644 index 0000000..2e5d6ab --- /dev/null +++ b/docs/manual/howto/access.html @@ -0,0 +1,13 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: access.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: access.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: access.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/access.html.en b/docs/manual/howto/access.html.en new file mode 100644 index 0000000..1bd3e0e --- /dev/null +++ b/docs/manual/howto/access.html.en @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Access Control - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Access Control</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/access.html" title="English"> en </a> | +<a href="../es/howto/access.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div> + + <p>Access control refers to any means of controlling access to any + resource. This is separate from <a href="auth.html">authentication and authorization</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Related Modules and Directives</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#host">Access control by host</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#env">Access control by arbitrary variables</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Access control with mod_rewrite</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">More information</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Related Modules and Directives</a></h2> + + <p>Access control can be done by several different modules. The most + important of these are <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> and + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Also discussed in this document + is access control using <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="host" id="host">Access control by host</a></h2> + <p> + 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 + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. + </p> + + <p>The <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + provides a variety of different ways to allow or deny access to + resources. In conjunction with the <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, and <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code> directives, these + requirements may be combined in arbitrarily complex ways, to enforce + whatever your access policy happens to be.</p> + + <div class="warning"><p> + The <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>, and + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code> directives, + provided by <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>, are deprecated and + will go away in a future version. You should avoid using them, and + avoid outdated tutorials recommending their use. + </p></div> + + <p>The usage of these directives is:</p> + + <pre class="prettyprint lang-config">Require host address +Require ip ip.address</pre> + + + <p>In the first form, <var>address</var> is a fully qualified + domain name (or a partial domain name); you may provide multiple + addresses or domain names, if desired.</p> + + <p>In the second form, <var>ip.address</var> is an IP address, a + partial IP address, a network/netmask pair, or a network/nnn CIDR + specification. Either IPv4 or IPv6 addresses may be used.</p> + + <p>See <a href="../mod/mod_authz_host.html#requiredirectives">the + mod_authz_host documentation</a> for further examples of this + syntax.</p> + + <p>You can insert <code>not</code> to negate a particular requirement. + Note, that since a <code>not</code> is a negation of a value, it cannot + be used by itself to allow or deny a request, as <em>not true</em> + does not constitute <em>false</em>. Thus, to deny a visit using a negation, + the block must have one element that evaluates as true or false. + For example, if you have someone spamming your message + board, and you want to keep them out, you could do the + following:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>Visitors coming from that address (<code>10.252.46.165</code>) + 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.</p> + + <pre class="prettyprint lang-config">Require not host <var>host.example.com</var> + </pre> + + + <p>And, if you'd like to block access from an entire domain, + you can specify just part of an address or domain name:</p> + + <pre class="prettyprint lang-config">Require not ip 192.168.205 +Require not host phishers.example.com moreidiots.example +Require not host gov</pre> + + + <p>Use of the <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, and <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code> directives may be + used to enforce more complex sets of requirements.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="env" id="env">Access control by arbitrary variables</a></h2> + + <p>Using the <code class="directive"><a href="../mod/core.html#if"><If></a></code>, + you can allow or deny access based on arbitrary environment + variables or request header values. For example, to deny access + based on user-agent (the browser type) you might do the + following:</p> + + <pre class="prettyprint lang-config"><If "%{HTTP_USER_AGENT} == 'BadBot'"> + Require all denied +</If></pre> + + + <p>Using the <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + <code>expr</code> syntax, this could also be written as:</p> + + + <pre class="prettyprint lang-config">Require expr %{HTTP_USER_AGENT} != 'BadBot'</pre> + + + <div class="note"><h3>Warning:</h3> + <p>Access control by <code>User-Agent</code> is an unreliable technique, + since the <code>User-Agent</code> header can be set to anything at all, + at the whim of the end user.</p> + </div> + + <p>See <a href="../expr.html">the expressions document</a> for a + further discussion of what expression syntaxes and variables are + available to you.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Access control with mod_rewrite</a></h2> + + <p>The <code>[F]</code> <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> flag causes a 403 Forbidden + response to be sent. Using this, you can deny access to a resource based + on arbitrary criteria.</p> + + <p>For example, if you wish to block access to a resource between 8pm + and 7am, you can do this using <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> + + <pre class="prettyprint lang-config">RewriteEngine On +RewriteCond "%{TIME_HOUR}" ">=20" [OR] +RewriteCond "%{TIME_HOUR}" "<07" +RewriteRule "^/fridge" "-" [F]</pre> + + + <p>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 + to check. You can also redirect, or otherwise rewrite these requests, if + that approach is preferred.</p> + + <p>The <code class="directive"><a href="../mod/core.html#if"><If></a></code> directive, + added in 2.4, replaces many things that <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> has + traditionally been used to do, and you should probably look there first + before resorting to mod_rewrite.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">More information</a></h2> + + <p>The <a href="../expr.html">expression engine</a> gives you a + great deal of power to do a variety of things based on arbitrary + server variables, and you should consult that document for more + detail.</p> + + <p>Also, you should read the <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + documentation for examples of combining multiple access requirements + and specifying how they interact.</p> + + <p>See also the <a href="auth.html">Authentication and Authorization</a> + howto.</p> +</div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/access.html" title="English"> en </a> | +<a href="../es/howto/access.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/access.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/access.html.es b/docs/manual/howto/access.html.es new file mode 100644 index 0000000..c5e562a --- /dev/null +++ b/docs/manual/howto/access.html.es @@ -0,0 +1,236 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Control de Acceso - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Control de Acceso</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/access.html" title="Español"> es </a> | +<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div> + + <p>El control de acceso, hace referencia a todos los medios que proporcionan + una forma de controlar el acceso a cualquier recurso. Esta parte está + separada de <a href="auth.html">autenticación y autorización</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Módulos y Directivas relacionados</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#host">Control de Acceso por host</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#env">Control de acceso por variables arbitrarias.</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Control de acceso con mod_rewrite</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Más información</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Módulos y Directivas relacionados</a></h2> + + <p>El control de acceso puede efectuarse mediante diferentes módulos. Los + más importantes de éstos son <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> y + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. También se habla en este documento de + el control de acceso usando el módulo <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="host" id="host">Control de Acceso por host</a></h2> + <p> + Si lo que se quiere es restringir algunas zonas del sitio web, basándonos + en la dirección del visitante, esto puede ser realizado de manera + fácil con el módulo <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. + </p> + + <p>La directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + proporciona una variedad de diferentes maneras de permitir o denegar el acceso a los recursos. Además puede ser usada junto con las directivas:<code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, y <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code>, estos requerimientos pueden + ser combinados de forma compleja y arbitraria, para cumplir cualquiera que + sean tus políticas de acceso.</p> + + <div class="warning"><p> + Las directivas <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>, y + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + proporcionadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>, están obsoletas y + serán quitadas en futuras versiones. Deberá evitar su uso, y también + los tutoriales desactualizaos que recomienden su uso. + </p></div> + + <p>El uso de estas directivas es:</p> + + + <pre class="prettyprint lang-config">Require host <var>address</var> <br /> +Require ip <var>ip.address</var> + </pre> + + + <p>En la primera línea, <var>address</var> es el FQDN de un nombre de + dominio (o un nombre parcial del dominio); puede proporcionar múltiples + direcciones o nombres de dominio, si se desea. + </p> + + <p>En la segunda línea, <var>ip.address</var> es la dirección IP, una + dirección IP parcial, una red con su máscara, o una especificación red/nnn + CIDR. Pueden usarse tanto IPV4 como IPV6.</p> + + <p>Consulte también <a href="../mod/mod_authz_host.html#requiredirectives">la + documentación de mod_authz_host </a> para otros ejemplos de esta sintaxis. + </p> + + <p>Puede ser insertado <code>not</code> para negar un requisito en particular. + Note que, ya que <code>not</code> es una negación de un valor, no puede ser + usado por si solo para permitir o denegar una petición, como <em>not true</em> + que no contituye ser <em>false</em>. En consecuencia, para denegar una + visita usando una negación, el bloque debe tener un elemento que se evalúa como + verdadero o falso. Por ejemplo, si tienes a alguien espameandote tu tablón de + mensajes, y tu quieres evitar que entren o dejarlos fuera, puedes realizar + lo siguiente: + </p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>Los visitantes que vengan desde la IP que se configura (<code>10.252.46.165</code>) + no tendrán acceso al contenido que cubre esta directiva. Si en cambio, lo que se + tiene es el nombre de la máquina, en vez de la IP, podrás usar:</p> + + <pre class="prettyprint lang-config">Require not host <var>host.example.com</var> + </pre> + + + <p>Y, Si lo que se quiere es bloquear el acceso desde dominio especifico, + podrás especificar parte de una dirección o nombre de dominio:</p> + + <pre class="prettyprint lang-config">Require not ip 192.168.205 +Require not host phishers.example.com moreidiots.example +Require not host gov</pre> + + + <p>Uso de las directivas <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, y <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code> pueden ser usadas + para forzar requisitos más complejos.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="env" id="env">Control de acceso por variables arbitrarias.</a></h2> + + <p>Haciendo el uso de <code class="directive"><a href="../mod/core.html#if"><If></a></code>, + puedes permitir o denegar el acceso basado en variables de entrono arbitrarias + o en los valores de las cabeceras de las peticiones. Por ejemplo para denegar + el acceso basándonos en el "user-agent" (tipo de navegador así como Sistema Operativo) + puede que hagamos lo siguiente: + </p> + + <pre class="prettyprint lang-config"><If "%{HTTP_USER_AGENT} == 'BadBot'"> + Require all denied +</If></pre> + + + <p>Usando la sintaxis de <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + <code>expr</code> , esto también puede ser escrito de la siguiente forma: + </p> + + + <pre class="prettyprint lang-config">Require expr %{HTTP_USER_AGENT} != 'BadBot'</pre> + + + <div class="note"><h3>Advertencia:</h3> + <p>El control de acceso por <code>User-Agent</code> es una técnica poco fiable, + ya que la cabecera de <code>User-Agent</code> puede ser modificada y establecerse + al antojo del usuario.</p> + </div> + + <p>Vea también la página de <a href="../expr.html">expresiones</a> + para una mayor aclaración de que sintaxis tienen las expresiones y que + variables están disponibles.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Control de acceso con mod_rewrite</a></h2> + + <p>El flag <code>[F]</code> de <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> causa una respuesta 403 Forbidden + para ser enviada. USando esto, podrá denegar el acceso a recursos basándose + en criterio arbitrario.</p> + + <p>Por ejemplo, si lo que desea es bloquear un recurso entre las 8pm y las + 7am, podrá hacerlo usando <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>:</p> + + <pre class="prettyprint lang-config">RewriteEngine On +RewriteCond "%{TIME_HOUR}" ">=20" [OR] +RewriteCond "%{TIME_HOUR}" "<07" +RewriteRule "^/fridge" "-" [F]</pre> + + + <p>Esto devolverá una respuesta de error 403 Forbidden para cualquier petición + después de las 8pm y antes de las 7am. Esta técnica puede ser usada para cualquier + criterio que desee usar. También puede redireccionar, o incluso reescribir estas + peticiones, si se prefiere ese enfoque. + </p> + + <p>La directiva <code class="directive"><a href="../mod/core.html#if"><If></a></code>, + añadida en la 2.4, sustituye muchas cosas que <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> + tradicionalmente solía hacer, y deberá comprobar estas antes de recurrir a + </p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">Más información</a></h2> + + <p>El <a href="../expr.html">motor de expresiones</a> le da una gran + capacidad de poder para hacer una gran variedad de cosas basadas en + las variables arbitrarias del servidor, y debe consultar este + documento para más detalles.</p> + + <p>También, deberá leer la documentación de <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + para ejemplos de combinaciones de múltiples requisitos de acceso y especificar + cómo interactúan. + </p> + + <p>Vea también los howtos de <a href="auth.html">Authenticación y Autorización</a> + </p> +</div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/access.html" title="Español"> es </a> | +<a href="../fr/howto/access.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/access.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/access.html.fr.utf8 b/docs/manual/howto/access.html.fr.utf8 new file mode 100644 index 0000000..057d8e3 --- /dev/null +++ b/docs/manual/howto/access.html.fr.utf8 @@ -0,0 +1,242 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Contrôle d'accès - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Contrôle d'accès</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/access.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/access.html" title="Français"> fr </a></p> +</div> + + <p>Le contrôle d'accès fait référence à tout concept de contrôle + d'accès à une ressource quelconque. Il est distinct du processus d'<a href="auth.html">authentification et d'autorisation</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Modules et directives concernés</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#host">Contrôle d'accès en fonction de l'hôte du +client</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#env">Contrôle d'accès en fonction de variables +arbitraires</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Utilisation de mod_rewrite pour le contrôle +d'accès</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Informations complémentaires</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Modules et directives concernés</a></h2> + + <p>Plusieurs modules peuvent intervenir dans le contrôle d'accès. + Les plus importants sont <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> et + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Ce document illustre aussi comment + utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour le contrôle + d'accès.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="host" id="host">Contrôle d'accès en fonction de l'hôte du +client</a></h2> + <p> + 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 + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. + </p> + + <p>La directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> permet d'accorder ou + d'interdire l'accès à certaines ressources de différentes manières. + Ces critères d'accès, en conjonction avec les directives <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, et <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code>, peuvent être + combinés d'une manière suffisamment complexe pour + satisfaire votre politique de contrôle d'accès.</p> + + <div class="warning"><p> + Les directives <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>, et <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code> fournies par le module + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> sont obsolètes, et sont appelées à + disparaître dans les versions futures. Il est donc déconseillé de + les utiliser, et de se fier aux tutoriels qui recommandent leur + utilisation. + </p></div> + + <p>Les directives Require s'utilisent comme suit :</p> + + <pre class="prettyprint lang-config">Require host address +Require ip ip.address</pre> + + + <p>Dans la première forme, <var>nom-hôte</var> est un nom de domaine + pleinement qualifié (fqdn), ou un nom de domaine partiel ; vous + pouvez spécifier plusieurs noms de domaines, si vous le désirez.</p> + + <p>Dans la seconde forme, <var>adresse-ip</var> est une adresse IP + complète, une adresse IP partielle, une paire réseau/masque de + 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.</p> + + <p>Voir <a href="../mod/mod_authz_host.html#requiredirectives">la + documentation de mod_authz_host</a> pour d'autres exemples de cette + syntaxe.</p> + + <p>Vous pouvez insérer le mot-clé <code>not</code> pour inverser un + critère particulier. Notez que le mot <code>not</code> étant la + négation d'une valeur, il ne peut pas être utilisé pour autoriser + ou interdire une requête, car <em>non vrai</em> ne + sera pas interpreté par httpd comme <em>faux</em>. 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'accès :</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>Les visiteurs possédant cette adresse (<code>10.252.46.165</code>) ne pourront pas voir le + contenu concerné par cette directive. Si vous voulez interdire + l'accès à une machine en fonction de son nom, vous pouvez ajouter + ceci :</p> + + <pre class="prettyprint lang-config">Require not host <var>host.example.com</var> + </pre> + + + <p>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 :</p> + + <pre class="prettyprint lang-config">Require not ip 192.168.205 +Require not host phishers.example.com moreidiots.example +Require not host gov</pre> + + + <p>Les directives <code class="directive"><a href="../mod/mod_authz_core.html#requireall">RequireAll</a></code>, <code class="directive"><a href="../mod/mod_authz_core.html#requireany">RequireAny</a></code>, et <code class="directive"><a href="../mod/mod_authz_core.html#requirenone">RequireNone</a></code> permettent également de préciser des + critères d'accès plus complexes.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="env" id="env">Contrôle d'accès en fonction de variables +arbitraires</a></h2> + + <p>Vous pouvez accorder ou refuser l'accès en fonction de variables + d'environnement arbitraires ou de valeurs d'en-têtes de la requête + en utilisant la directive <code class="directive"><a href="../mod/core.html#if"><If></a></code>. Par exemple, pour interdire l'accès en + fonction du user-agent (le type de navigateur), vous pouvez + spécifier ceci :</p> + + <pre class="prettyprint lang-config"><If "%{HTTP_USER_AGENT} == 'BadBot'"> + Require all denied +</If></pre> + + + <p>La syntaxe <code>expr</code> de la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> permet de réécrire + l'exemple précédent de la manière suivante :</p> + + + <pre class="prettyprint lang-config">Require expr %{HTTP_USER_AGENT} != 'BadBot'</pre> + + + <div class="note"><h3>Avertissement :</h3> + <p>Contrôler l'accès en fonction de l'en-tête + <code>User-Agent</code> n'est pas une technique fiable, car cet + en-tête peut être défini à une valeur quelconque, selon le bon + vouloir de l'utilisateur.</p> + </div> + + <p>Voir le document à propos des <a href="../expr.html">expressions</a> pour une description plus + approfondie des syntaxes d'expressions et des variables disponibles.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Utilisation de mod_rewrite pour le contrôle +d'accès</a></h2> + + <p>Le drapeau <code>[F]</code> de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> permet d'envoyer une + réponse de type 403 Forbidden. Il vous permet donc d'interdire + l'accès à une ressource en fonction d'un critère arbitraire.</p> + + <p>Par exemple, pour bloquer l'accès à une ressources entre 20h et + 7h du matin, vous pouvez utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> :</p> + + <pre class="prettyprint lang-config">RewriteEngine On +RewriteCond "%{TIME_HOUR}" ">=20" [OR] +RewriteCond "%{TIME_HOUR}" "<07" +RewriteRule "^/fridge" "-" [F]</pre> + + + <p>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.</p> + + <p>Notez que la directive <code class="directive"><a href="../mod/core.html#if"><If></a></code>, introduite à partir de la version 2.4, + permet de remplacer le module <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> dans de + nombreuses situations où il était traditionnellement utilisé, et + il sera probablement préférable pour vous de tenter de l'utiliser + avant de vous tourner vers mod_rewrite.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">Informations complémentaires</a></h2> + + <p>Le <a href="../expr.html">moteur d'expressions</a> vous fournit + une grande puissance d'action en fonction de variables du serveur + arbitraires, et il vous est conseillé de consulter le document + correspondant pour plus de détails.</p> + + <p>De même, vous devez lire la documentation du module + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> pour des exemples de combinaison de + critères d'accès multiples, et en particulier la manière dont ces + derniers interagissent.</p> + + <p>Voir aussi le How-To <a href="auth.html">Authentification and + autorisation</a>.</p> +</div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/access.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/access.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/access.html" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/access.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html b/docs/manual/howto/auth.html new file mode 100644 index 0000000..5e5578d --- /dev/null +++ b/docs/manual/howto/auth.html @@ -0,0 +1,25 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: auth.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: auth.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: auth.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: auth.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: auth.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR + +URI: auth.html.tr.utf8 +Content-Language: tr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/auth.html.en b/docs/manual/howto/auth.html.en new file mode 100644 index 0000000..d8a9b0e --- /dev/null +++ b/docs/manual/howto/auth.html.en @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Authentication and Authorization - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Authentication and Authorization</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/auth.html" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + + <p>Authentication is any process by which you verify that + someone is who they claim they are. Authorization is any + process by which someone is allowed to be where they want to + go, or to have information that they want to have.</p> + + <p>For general access control, see the <a href="access.html">Access + Control How-To</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Related Modules and Directives</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">The Prerequisites</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Getting it working</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Letting more than one +person in</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Possible problems</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Alternate password storage</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Using multiple providers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Beyond just authorization</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#socache">Authentication Caching</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">More information</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Related Modules and Directives</a></h2> + +<p>There are three types of modules involved in the authentication and +authorization process. You will usually need to choose at least one +module from each group.</p> + +<ul> + <li>Authentication type (see the + <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> directive) + <ul> + <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li> + <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li> + </ul> + </li> + <li>Authentication provider (see the + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> and + <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> directives) + + <ul> + <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li> + </ul> + </li> + <li>Authorization (see the + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive) + <ul> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li> + </ul> + </li> +</ul> + + <p>In addition to these modules, there are also + <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> and + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. These modules implement core + directives that are core to all auth modules.</p> + + <p>The module <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> is both an + authentication and authorization provider. The module + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> provides authorization + and access control based on hostname, IP address or characteristics + of the request, but is not part of the authentication provider + system. For backwards compatibility with the mod_access, there is + a new module <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p> + + <p>You probably also want to take a look at the <a href="access.html">Access Control</a> howto, which discusses the + various ways to control access to your server.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">Introduction</a></h2> + <p>If you have information on your web site that is sensitive + or intended for only a small group of people, the techniques in + this article will help you make sure that the people that see + those pages are the people that you wanted to see them.</p> + + <p>This article covers the "standard" way of protecting parts + of your web site that most of you are going to use.</p> + + <div class="note"><h3>Note:</h3> + <p>If your data really needs to be secure, consider using + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> in addition to any authentication.</p> + </div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">The Prerequisites</a></h2> + <p>The directives discussed in this article will need to go + either in your main server configuration file (typically in a + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> section), or + in per-directory configuration files (<code>.htaccess</code> files).</p> + + <p>If you plan to use <code>.htaccess</code> files, you will + need to have a server configuration that permits putting + authentication directives in these files. This is done with the + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive, which + specifies which directives, if any, may be put in per-directory + configuration files.</p> + + <p>Since we're talking here about authentication, you will need + an <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive like the + following:</p> + + <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre> + + + <p>Or, if you are just going to put the directives directly in + your main server configuration file, you will of course need to + have write permission to that file.</p> + + <p>And you'll need to know a little bit about the directory + structure of your server, in order to know where some files are + kept. This should not be terribly difficult, and I'll try to + make this clear when we come to that point.</p> + + <p>You will also need to make sure that the modules + <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> and <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + have either been built into the httpd binary or loaded by the + httpd.conf configuration file. Both of these modules provide core + directives and functionality that are critical to the configuration + and use of authentication and authorization in the web server.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">Getting it working</a></h2> + <p>Here's the basics of password protecting a directory on your + server.</p> + + <p>First, you need to create a password file. Exactly how you do + this will vary depending on what authentication provider you have + chosen. More on that later. To start with, we'll use a text password + file.</p> + + <p>This file should be + placed somewhere not accessible from the web. This is so that + folks cannot download the password file. For example, if your + documents are served out of <code>/usr/local/apache/htdocs</code>, you + might want to put the password file(s) in + <code>/usr/local/apache/passwd</code>.</p> + + <p>To create the file, use the <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> utility that + came with Apache. This will be located in the <code>bin</code> directory + of wherever you installed Apache. If you have installed Apache from + a third-party package, it may be in your execution path.</p> + + <p>To create the file, type:</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </code></p></div> + + <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> will ask you for the password, and + then ask you to type it again to confirm it:</p> + + <div class="example"><p><code> + # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mypassword<br /> + Re-type new password: mypassword<br /> + Adding password for user rbowen + </code></p></div> + + <p>If <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> is not in your path, of course + you'll have to type the full path to the file to get it to run. + With a default installation, it's located at + <code>/usr/local/apache2/bin/htpasswd</code></p> + + <p>Next, you'll need to configure the server to request a + password and tell the server which users are allowed access. + You can do this either by editing the <code>httpd.conf</code> + file or using an <code>.htaccess</code> file. For example, if + you wish to protect the directory + <code>/usr/local/apache/htdocs/secret</code>, you can use the + following directives, either placed in the file + <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or + placed in <code>httpd.conf</code> inside a <Directory + "/usr/local/apache/htdocs/secret"> section.</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Restricted Files" +# (Following line optional) +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +Require user rbowen</pre> + + + <p>Let's examine each of those directives individually. The <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> directive selects + the method that is used to authenticate the user. The most + common method is <code>Basic</code>, and this is the method + implemented by <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. It is important to be aware, + however, that Basic authentication sends the password from the client to + the server unencrypted. This method should therefore not be used for + highly sensitive data, unless accompanied by <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. + Apache supports one other authentication method: + <code>AuthType Digest</code>. This method is implemented by <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> and was intended to be more secure. This is no + longer the case and the connection should be encrypted with <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> instead.</p> + + <p>The <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> directive sets + the <dfn>Realm</dfn> to be used in the authentication. The realm serves + two major functions. First, the client often presents this information to + the user as part of the password dialog box. Second, it is used by the + client to determine what password to send for a given authenticated + area.</p> + + <p>So, for example, once a client has authenticated in the + <code>"Restricted Files"</code> area, it will automatically + retry the same password for any area on the same server that is + marked with the <code>"Restricted Files"</code> Realm. + Therefore, you can prevent a user from being prompted more than + once for a password by letting multiple restricted areas share + the same realm. Of course, for security reasons, the client + will always need to ask again for the password whenever the + hostname of the server changes.</p> + + <p>The <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> is, + in this case, optional, since <code>file</code> is the default value + for this directive. You'll need to use this directive if you are + choosing a different source for authentication, such as + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> or <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p> + + <p>The <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + directive sets the path to the password file that we just + created with <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. If you have a large number + of users, it can be quite slow to search through a plain text + file to authenticate the user on each request. Apache also has + the ability to store user information in fast database files. + The <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> module provides the <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> directive. These + files can be created and manipulated with the <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> and <code class="program"><a href="../programs/htdbm.html">htdbm</a></code> programs. Many + other types of authentication options are available from third + party modules.</p> + + <p>Finally, the <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + directive provides the authorization part of the process by + setting the user that is allowed to access this region of the + server. In the next section, we discuss various ways to use the + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Letting more than one +person in</a></h2> + <p>The directives above only let one person (specifically + someone with a username of <code>rbowen</code>) into the + directory. In most cases, you'll want to let more than one + person in. This is where the <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> comes in.</p> + + <p>If you want to let more than one person in, you'll need to + create a group file that associates group names with a list of + users in that group. The format of this file is pretty simple, + and you can create it with your favorite editor. The contents + of the file will look like this:</p> + + <div class="example"><p><code> + GroupName: rbowen dpitts sungo rshersey + </code></p></div> + + <p>That's just a list of the members of the group in a long + line separated by spaces.</p> + + <p>To add a user to your already existing password file, + type:</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords dpitts + </code></p></div> + + <p>You'll get the same response as before, but it will be + appended to the existing file, rather than creating a new file. + (It's the <code>-c</code> that makes it create a new password + file).</p> + + <p>Now, you need to modify your <code>.htaccess</code> file or + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> block + to look like the following:</p> + + <pre class="prettyprint lang-config">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</pre> + + + <p>Now, anyone that is listed in the group <code>GroupName</code>, + and has an entry in the <code>password</code> file, will be let in, if + they type the correct password.</p> + + <p>There's another way to let multiple users in that is less + specific. Rather than creating a group file, you can just use + the following directive:</p> + + <pre class="prettyprint lang-config">Require valid-user</pre> + + + <p>Using that rather than the <code>Require user rbowen</code> + line will allow anyone in that is listed in the password file, + and who correctly enters their password.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems">Possible problems</a></h2> + <p>Because of the way that Basic authentication is specified, + your username and password must be verified every time you + request a document from the server. This is even if you're + reloading the same page, and for every image on the page (if + they come from a protected directory). As you can imagine, this + slows things down a little. The amount that it slows things + down is proportional to the size of the password file, because + it has to open up that file, and go down the list of users + until it gets to your name. And it has to do this every time a + page is loaded.</p> + + <p>A consequence of this is that there's a practical limit to + how many users you can put in one password file. This limit + will vary depending on the performance of your particular + server machine, but you can expect to see slowdowns once you + get above a few hundred entries, and may wish to consider a + different authentication method at that time.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="dbmdbd" id="dbmdbd">Alternate password storage</a></h2> + + <p>Because storing passwords in plain text files has the above + problems, you may wish to store your passwords somewhere else, such + as in a database.</p> + + <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> are two + modules which make this possible. Rather than selecting <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> file</code>, instead + you can choose <code>dbm</code> or <code>dbd</code> as your storage + format.</p> + + <p>To select a dbm file rather than a text file, for example:</p> + + <pre class="prettyprint lang-config"><Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider dbm + AuthDBMUserFile "/www/passwords/passwd.dbm" + Require valid-user +</Directory></pre> + + + <p>Other options are available. Consult the + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> documentation for more details.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="multprovider" id="multprovider">Using multiple providers</a></h2> + + <p>With the introduction of the new provider based authentication and + authorization architecture, you are no longer locked into a single + authentication or authorization method. In fact any number of the + providers can be mixed and matched to provide you with exactly the + scheme that meets your needs. In the following example, both the + file and LDAP based authentication providers are being used.</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>In this example the file provider will attempt to authenticate + the user first. If it is unable to authenticate the user, the LDAP + provider will be called. This allows the scope of authentication + to be broadened if your organization implements more than + one type of authentication store. Other authentication and authorization + scenarios may include mixing one type of authentication with a + different type of authorization. For example, authenticating against + a password file yet authorizing against an LDAP directory.</p> + + <p>Just as multiple authentication providers can be implemented, multiple + authorization methods can also be used. In this example both file group + authorization as well as LDAP group authorization is being used.</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>To take authorization a little further, authorization container + directives such as + <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + and + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> + allow logic to be applied so that the order in which authorization + is handled can be completely controlled through the configuration. + See <a href="../mod/mod_authz_core.html#logic">Authorization + Containers</a> for an example of how they may be applied.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="beyond" id="beyond">Beyond just authorization</a></h2> + + <p>The way that authorization can be applied is now much more flexible + than just a single check against a single data store. Ordering, logic + and choosing how authorization will be done is now possible.</p> + + <h3><a name="authandororder" id="authandororder">Applying logic and ordering</a></h3> + <p>Controlling how and in what order authorization will be applied + has been a bit of a mystery in the past. In Apache 2.2 a provider-based + authentication mechanism was introduced to decouple the actual + authentication process from authorization and supporting functionality. + One of the side benefits was that authentication providers could be + configured and called in a specific order which didn't depend on the + load order of the auth module itself. This same provider based mechanism + has been brought forward into authorization as well. What this means is + that the <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive + not only specifies which authorization methods should be used, it also + specifies the order in which they are called. Multiple authorization + methods are called in the same order in which the + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directives + appear in the configuration.</p> + + <p>With the introduction of authorization container directives + such as + <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + and + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>, + the configuration also has control over when the + authorization methods are called and what criteria determines when + access is granted. See + <a href="../mod/mod_authz_core.html#logic">Authorization Containers</a> + for an example of how they may be used to express complex + authorization logic.</p> + + <p>By default all + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + directives are handled as though contained within a + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> + container directive. In other words, if + any of the specified authorization methods succeed, then authorization + is granted.</p> + + + + <h3><a name="reqaccessctrl" id="reqaccessctrl">Using authorization providers for access control</a></h3> + <p>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.</p> + + <p>The authorization providers <code>all</code>, + <code>env</code>, <code>host</code> and <code>ip</code> let you + allow or deny access based on other host based criteria such as + host name or ip address of the machine requesting a + document.</p> + + <p>The usage of these providers is specified through the + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> directive. + This directive registers the authorization providers + that will be called during the authorization stage of the request + processing. For example:</p> + + <pre class="prettyprint lang-config">Require ip <var>address</var> + </pre> + + + <p>where <var>address</var> is an IP address (or a partial IP + address) or:</p> + + <pre class="prettyprint lang-config">Require host <var>domain_name</var> + </pre> + + + <p>where <var>domain_name</var> is a fully qualified domain name + (or a partial domain name); you may provide multiple addresses or + domain names, if desired.</p> + + <p>For example, if you have someone spamming your message + board, and you want to keep them out, you could do the + following:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>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.</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not host host.example.com +</RequireAll></pre> + + + <p>And, if you'd like to block access from an entire domain, + you can specify just part of an address or domain name:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 192.168.205 + Require not host phishers.example.com moreidiots.example + Require not host ke +</RequireAll></pre> + + + <p>Using <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + with multiple <code class="directive"><a href="../mod/mod_authz_core.html#require"><Require></a></code> directives, each negated with <code>not</code>, + 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.</p> + + + + <h3><a name="filesystem" id="filesystem">Access Control backwards compatibility</a></h3> + <p>One of the side effects of adopting a provider based mechanism for + authentication is that the previous access control directives + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> and + <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> are no longer needed. + However to provide backwards compatibility for older configurations, these + directives have been moved to the <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> module.</p> + + <div class="warning"><h3>Note</h3> + <p>The directives provided by <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> have + been deprecated by <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. + Mixing old directives like <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> or <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> with new ones like + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> is technically possible + but discouraged. The <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> module was created to support + configurations containing only old directives to facilitate the 2.4 upgrade. + Please check the <a href="../upgrading.html">upgrading</a> guide for more + information. + </p> + </div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="socache" id="socache">Authentication Caching</a></h2> + <p>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 <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> (or third-party/custom providers). + To deal with this, HTTPD 2.3/2.4 introduces a new caching provider + <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code> to cache credentials and reduce + the load on the origin provider(s).</p> + <p>This may offer a substantial performance boost to some users.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">More information</a></h2> + <p>You should also read the documentation for + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> and <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> + which contain some more information about how this all works. The + directive <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias"><AuthnProviderAlias></a></code> can also help + in simplifying certain authentication configurations.</p> + + <p>The various ciphers supported by Apache for authentication data are + explained in <a href="../misc/password_encryptions.html">Password + Encryptions</a>.</p> + + <p>And you may want to look at the <a href="access.html">Access + Control</a> howto, which discusses a number of related topics.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/auth.html" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html.es b/docs/manual/howto/auth.html.es new file mode 100644 index 0000000..fd72860 --- /dev/null +++ b/docs/manual/howto/auth.html.es @@ -0,0 +1,717 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Autenticación y Autorización - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Autenticación y Autorización</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate">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.</div> + + <p>Autenticación es cualquier proceso por el cuál se verifica que uno es + quien dice ser. Autorización es cualquier proceso en el cuál cualquiera + está permitido a estar donde se quiera, o tener información la cuál se + quiera tener. + </p> + + <p>Para información de control de acceso de forma genérica visite<a href="access.html">How to de Control de Acceso</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Módulos y Directivas Relacionados</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introducción</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Los Prerequisitos</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Conseguir que funcione</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Dejar que más de una persona + entre</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Posibles Problemas</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Método alternativo de almacenamiento de las + contraseñas</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Uso de múltiples proveedores</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Más allá de la Autorización</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#socache">Cache de Autenticación</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Más información</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Módulos y Directivas Relacionados</a></h2> + +<p>Hay tres tipos de módulos involucrados en los procesos de la autenticación + y autorización. Normalmente deberás escoger al menos un módulo de cada grupo.</p> + +<ul> + <li>Modos de Autenticación (consulte la directiva + <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> ) + <ul> + <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li> + <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li> + </ul> + </li> + <li>Proveedor de Autenticación (consulte la directiva + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> y + <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>) + + <ul> + <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li> + </ul> + </li> + <li>Autorización (consulte la directiva + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>) + <ul> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li> + </ul> + </li> +</ul> + + <p>A parte de éstos módulos, también están + <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> y + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. Éstos módulos implementan las directivas + esenciales que son el centro de todos los módulos de autenticación.</p> + + <p>El módulo <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> es tanto un proveedor de + autenticación como de autorización. El módulo + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> proporciona autorización y control de acceso + basado en el nombre del Host, la dirección IP o características de la propia + petición, pero no es parte del sistema proveedor de + autenticación. Para tener compatibilidad inversa con el mod_access, + hay un nuevo modulo llamado <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p> + + <p>También puedes mirar el how-to de <a href="access.html">Control de Acceso </a>, donde se plantean varias formas del control de acceso al servidor.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">Introducción</a></h2> + <p>Si se tiene información en nuestra página web que sea información + sensible o pensada para un grupo reducido de usuarios/personas, + las técnicas que se describen en este manual, le servirán + de ayuda para asegurarse de que las personas que ven esas páginas sean + las personas que uno quiere.</p> + + <p>Este artículo cubre la parte "estándar" de cómo proteger partes de un + sitio web que muchos usarán.</p> + + <div class="note"><h3>Nota:</h3> + <p>Si de verdad es necesario que tus datos estén en un sitio seguro, + considera usar <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> como método de autenticación adicional a cualquier forma de autenticación.</p> + </div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">Los Prerequisitos</a></h2> + <p>Las directivas que se usan en este artículo necesitaran ponerse ya sea + en el fichero de configuración principal del servidor ( típicamente en + la sección + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> de httpd.conf ), o + en cada uno de los ficheros de configuraciones del propio directorio + (los archivos <code>.htaccess</code>).</p> + + <p>Si planea usar los ficheros <code>.htaccess</code> , necesitarás + tener en la configuración global del servidor, una configuración que permita + poner directivas de autenticación en estos ficheros. Esto se hace con la + directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, la cual especifica + que directivas, en su caso, pueden ser puestas en cada fichero de configuración + por directorio.</p> + + <p>Ya que estamos hablando aquí de autenticación, necesitarás una directiva + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> como la siguiente: + </p> + + <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre> + + + <p>O, si solo se van a poner las directivas directamente en la configuración + principal del servidor, deberás tener, claro está, permisos de escritura + en el archivo. </p> + + <p>Y necesitarás saber un poco de como está estructurado el árbol de + directorios de tu servidor, para poder saber donde se encuentran algunos + archivos. Esto no debería ser una tarea difícil, aún así intentaremos + dejarlo claro llegado el momento de comentar dicho aspecto.</p> + + <p>También deberás de asegurarte de que los módulos + <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> y <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + han sido incorporados, o añadidos a la hora de compilar en tu binario httpd o + cargados mediante el archivo de configuración <code>httpd.conf</code>. Estos + dos módulos proporcionan directivas básicas y funcionalidades que son críticas + para la configuración y uso de autenticación y autorización en el servidor web.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">Conseguir que funcione</a></h2> + <p>Aquí está lo básico de cómo proteger con contraseña un directorio en tu + servidor.</p> + + <p>Primero, necesitarás crear un fichero de contraseña. Dependiendo de que + proveedor de autenticación se haya elegido, se hará de una forma u otra. Para empezar, + usaremos un fichero de contraseña de tipo texto.</p> + + <p>Este fichero deberá estar en un sitio que no se pueda tener acceso desde + la web. Esto también implica que nadie pueda descargarse el fichero de + contraseñas. Por ejemplo, si tus documentos están guardados fuera de + <code>/usr/local/apache/htdocs</code>, querrás poner tu archivo de contraseñas en + <code>/usr/local/apache/passwd</code>.</p> + + <p>Para crear el fichero de contraseñas, usa la utilidad + <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> que viene con Apache. Esta herramienta se + encuentra en el directorio <code>/bin</code> en donde sea que se ha + instalado el Apache. Si ha instalado Apache desde un paquete de terceros, + puede ser que se encuentre en su ruta de ejecución.</p> + + <p>Para crear el fichero, escribiremos:</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </code></p></div> + + <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> te preguntará por una contraseña, y después + te pedirá que la vuelvas a escribir para confirmarla:</p> + + <div class="example"><p><code> + $ htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mypassword<br /> + Re-type new password: mypassword<br /> + Adding password for user rbowen + </code></p></div> + + <p>Si <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> no está en tu variable de entorno "path" del + sistema, por supuesto deberás escribir la ruta absoluta del ejecutable para + poder hacer que se ejecute. En una instalación por defecto, está en: + <code>/usr/local/apache2/bin/htpasswd</code></p> + + <p>Lo próximo que necesitas, será configurar el servidor para que pida una + contraseña y así decirle al servidor que usuarios están autorizados a acceder. + Puedes hacer esto ya sea editando el fichero <code>httpd.conf</code> + de configuración o usando in fichero <code>.htaccess</code>. Por ejemplo, + si quieres proteger el directorio + <code>/usr/local/apache/htdocs/secret</code>, puedes usar las siguientes + directivas, ya sea en el fichero <code>.htaccess</code> localizado en + following directives, either placed in the file + <code>/usr/local/apache/htdocs/secret/.htaccess</code>, o + en la configuración global del servidor <code>httpd.conf</code> dentro de la + sección <Directory + "/usr/local/apache/htdocs/secret"> , como se muestra a continuación:</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache/htdocs/secret"> +AuthType Basic +AuthName "Restricted Files" +# (Following line optional) +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +Require user rbowen +</Directory></pre> + + + <p>Vamos a explicar cada una de las directivas individualmente. + La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> selecciona el método + que se usa para autenticar al usuario. El método más común es + <code>Basic</code>, y éste es el método que implementa + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. Es muy importante ser consciente, + de que la autenticación básica, envía las contraseñas desde el cliente + al servidor sin cifrar. + Este método por tanto, no debe ser utilizado para proteger datos muy sensibles, + a no ser que, este método de autenticación básica, sea acompañado del módulo + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. + Apache soporta otro método más de autenticación que es del tipo + <code>AuthType Digest</code>. Este método, es implementado por el módulo <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> y con el se pretendía crear una autenticación más + segura. Este ya no es el caso, ya que la conexión deberá realizarse con <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en su lugar. + </p> + + <p>La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> + establece el <dfn>Realm</dfn> para ser usado en la autenticación. El + <dfn>Realm</dfn> tiene dos funciones principales. + La primera, el cliente presenta a menudo esta información al usuario como + parte del cuadro de diálogo de contraseña. La segunda, que es utilizado por + el cliente para determinar qué contraseña enviar a para una determinada zona + de autenticación.</p> + + <p>Así que, por ejemple, una vez que el cliente se ha autenticado en el área de + los <code>"Ficheros Restringidos"</code>, entonces re-intentará automáticamente + la misma contraseña para cualquier área en el mismo servidor que es marcado + con el Realm de <code>"Ficheros Restringidos"</code> + Por lo tanto, puedes prevenir que a un usuario se le pida mas de una vez por su + contraseña, compartiendo así varias áreas restringidas el mismo Realm + Por supuesto, por razones de seguridad, el cliente pedirá siempre por una contraseña, + siempre y cuando el nombre del servidor cambie. + </p> + + <p>La directiva <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> es, + en este caso, opcional, ya que <code>file</code> es el valor por defecto + para esta directiva. Deberás usar esta directiva si estas usando otro medio + diferente para la autenticación, como por ejemplo + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> o <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p> + + <p>La directiva <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + establece el path al fichero de contraseñas que acabamos de crear con el + comando <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. Si tiene un número muy grande de usuarios, + puede ser realmente lento el buscar el usuario en ese fichero de texto plano + para autenticar a los usuarios en cada petición. + Apache también tiene la habilidad de almacenar información de usuarios en + unos ficheros de rápido acceso a modo de base de datos. + El módulo <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> proporciona la directiva <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>. Estos ficheros pueden ser creados y + manipulados con el programa <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> y <code class="program"><a href="../programs/htdbm.html">htdbm</a></code>. + Muchos otros métodos de autenticación así como otras opciones, están disponibles en + módulos de terceros + <a href="http://modules.apache.org/">Base de datos de Módulos disponibles</a>.</p> + + <p>Finalmente, la directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + proporciona la parte del proceso de autorización estableciendo el o los + usuarios que se les está permitido acceder a una región del servidor. + En la próxima sección, discutiremos las diferentes vías de utilizar la + directiva <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Dejar que más de una persona + entre</a></h2> + <p>Las directivas mencionadas arriba sólo permiten a una persona + (especialmente con un usuario que en ej ejemplo es <code>rbowen</code>) + en el directorio. En la mayoría de los casos, se querrá permitir el acceso + a más de una persona. Aquí es donde la directiva + <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> entra en juego.</p> + + <p>Si lo que se desea es permitir a más de una persona el acceso, necesitarás + crear un archivo de grupo que asocie los nombres de grupos con el de personas + para permitirles el acceso. El formato de este fichero es bastante sencillo, + y puedes crearlo con tu editor de texto favorito. El contenido del fichero + se parecerá a:</p> + + <div class="example"><p><code> + GroupName: rbowen dpitts sungo rshersey + </code></p></div> + + <p>Básicamente eso es la lista de miembros los cuales están en un mismo fichero + de grupo en una sola linea separados por espacios.</p> + + <p>Para añadir un usuario a tu fichero de contraseñas existente teclee:</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords dpitts + </code></p></div> + + <p>Te responderá lo mismo que anteriormente, pero se añadirá al fichero + existente en vez de crear uno nuevo. (Es decir el flag <code>-c</code> será + el que haga que se genere un nuevo + fichero de contraseñas).</p> + + <p>Ahora, tendrá que modificar su fichero <code>.htaccess</code> para que sea + parecido a lo siguiente:</p> + + <pre class="prettyprint lang-config">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</pre> + + + <p>Ahora, cualquiera que esté listado en el grupo <code>GroupName</code>, + y tiene una entrada en el fichero de <code>contraseñas</code>, se les + permitirá el acceso, si introducen su contraseña correctamente.</p> + + <p>Hay otra manera de dejar entrar a varios usuarios, que es menos específica. + En lugar de crear un archivo de grupo, sólo puede utilizar la siguiente + directiva:</p> + + <pre class="prettyprint lang-config">Require valid-user</pre> + + + <p>Usando ésto en vez de la línea <code>Require user rbowen</code> + permitirá a cualquier persona acceder, la cuál aparece en el archivo de + contraseñas, y que introduzca correctamente su contraseña. Incluso puede + emular el comportamiento del grupo aquí, sólo manteniendo un fichero de + contraseñas independiente para cada grupo. La ventaja de este enfoque es + que Apache sólo tiene que comprobar un archivo, en lugar de dos. La desventaja + es que se tiene que mantener un montón de ficheros de contraseña de grupo, y + recuerde hacer referencia al fichero correcto en la directiva + <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems">Posibles Problemas</a></h2> + <p>Debido a la forma en que se especifica la autenticación básica, + su nombre de usuario y la contraseña deben ser verificados cada vez + que se solicita un documento desde el servidor. Esto es, incluso si + se vuelve a cargar la misma página, y para cada imagen de la página (si + provienen de un directorio protegido). Como se puede imaginar, esto + ralentiza las cosas un poco. La cantidad que ralentiza las cosas es + proporcional al tamaño del archivo de contraseñas, porque tiene que + abrir ese archivo, recorrer lista de usuarios hasta que llega a su nombre. + Y tiene que hacer esto cada vez que se carga una página.</p> + + <p>Una consecuencia de esto, es que hay un limite práctico de cuantos + usuarios puedes introducir en el fichero de contraseñas. Este límite + variará dependiendo de la máquina en la que tengas el servidor, + pero puedes notar ralentizaciones en cuanto se metan cientos de entradas, + y por lo tanto consideraremos entonces otro método de autenticación + en ese momento. + </p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="dbmdbd" id="dbmdbd">Método alternativo de almacenamiento de las + contraseñas</a></h2> + + <p>Debido a que el almacenamiento de las contraseñas en texto plano tiene + el problema mencionado anteriormente, puede que se prefiera guardar + las contraseñas en otro lugar como por ejemplo una base de datos. + </p> + + <p>Los módulos <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> y <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> son + dos módulos que hacen esto posible. En vez de seleccionar la directiva de fichero + <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> </code>, en su lugar + se puede elegir <code>dbm</code> o <code>dbd</code> como formato de almacenamiento.</p> + + <p>Para seleccionar los ficheros de tipo dbm en vez de texto plano, podremos hacer algo parecido a lo siguiente:</p> + + <pre class="prettyprint lang-config"><Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider dbm + AuthDBMUserFile "/www/passwords/passwd.dbm" + Require valid-user +</Directory></pre> + + + <p>Hay otras opciones disponibles. Consulta la documentación de + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> para más detalles.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="multprovider" id="multprovider">Uso de múltiples proveedores</a></h2> + + <p>Con la introducción de la nueva autenticación basada en un proveedor y + una arquitectura de autorización, ya no estaremos restringidos a un único + método de autenticación o autorización. De hecho, cualquier número de + los proveedores pueden ser mezclados y emparejados para ofrecerle + exactamente el esquema que se adapte a sus necesidades. + En el siguiente ejemplo, veremos como ambos proveedores tanto el fichero + como el LDAP son usados en la autenticación: + </p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>En este ejemplo el fichero, que actúa como proveedor, intentará autenticar + primero al usuario. Si no puede autenticar al usuario, el proveedor del LDAP + será llamado para que realice la autenticación. + Esto permite al ámbito de autenticación ser amplio, si su organización + implementa más de un tipo de almacén de autenticación. + Otros escenarios de autenticación y autorización pueden incluir la + mezcla de un tipo de autenticación con un tipo diferente de autorización. + Por ejemplo, autenticar contra un fichero de contraseñas pero autorizando + dicho acceso mediante el directorio del LDAP.</p> + + <p>Así como múltiples métodos y proveedores de autenticación pueden + ser implementados, también pueden usarse múltiples formas de + autorización. + En este ejemplo ambos ficheros de autorización de grupo así como + autorización de grupo mediante LDAP va a ser usado: + </p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>Para llevar la autorización un poco más lejos, las directivas + de autorización de contenedores tales como + <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + and + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> + nos permiten aplicar una lógica de en qué orden se manejará la autorización dependiendo + de la configuración y controlada a través de ella. + Mire también <a href="../mod/mod_authz_core.html#logic">Contenedores de + Autorización</a> para ejemplos de cómo pueden ser aplicados.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="beyond" id="beyond">Más allá de la Autorización</a></h2> + + <p>El modo en que la autorización puede ser aplicada es ahora mucho más flexible + que us solo chequeo contra un almacén de datos (contraseñas). Ordenando la + lógica y escoger la forma en que la autorización es realizada, ahora es posible + </p> + + <h3><a name="authandororder" id="authandororder">Aplicando la lógica y ordenación</a></h3> + <p>Controlar el cómo y en qué orden se va a aplicar la autorización ha + sido un misterio en el pasado. En Apache 2.2 un proveedor del + mecanismo de autenticación fue introducido para disociar el proceso actual + de autenticación y soportar funcionalidad. + Uno de los beneficios secundarios fue que los proveedores de autenticación + podían ser configurados y llamados en un orden especifico que no dependieran + en el orden de carga del propio modulo. + Este proveedor de dicho mecanismo, ha sido introducido en la autorización + también. Lo que esto significa es que la directiva + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + no sólo especifica que método de autorización deberá ser usado, si no + también especifica el orden en que van a ser llamados. Múltiples + métodos de autorización son llamados en el mismo orden en que la directiva + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> aparece en la + configuración. + </p> + + <p> + Con la Introducción del contenedor de directivas de autorización tales como + <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + y + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>, + La configuración también tiene control sobre cuándo se llaman a los métodos + de autorización y qué criterios determinan cuándo se concede el acceso. + Vease + <a href="../mod/mod_authz_core.html#logic">Contenedores de autorización</a> + Para un ejemplo de cómo pueden ser utilizados para expresar una lógica + más compleja de autorización. + </p> + + <p> + Por defecto todas las directivas + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + son manejadas como si estuvieran contenidas en una directiva + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>. + En otras palabras, Si alguno de los métodos de autorización + especificados tiene éxito, se concede la autorización. + </p> + + + + <h3><a name="reqaccessctrl" id="reqaccessctrl">Uso de los proveedores de autorización para + el control de acceso</a></h3> + + <p> + La autenticación de nombre de usuario y contraseña es sólo parte + de toda la historia que conlleva el proceso. Frecuentemente quiere + dar acceso a la gente en base a algo más que lo que son. + Algo como de donde vienen. + </p> + + <p> + Los proveedores de autorización <code>all</code>, + <code>env</code>, <code>host</code> y <code>ip</code> + te permiten denegar o permitir el acceso basándose en otros + criterios como el nombre de la máquina o la IP de la máquina que + realiza la consulta para un documento. + </p> + + <p> + El uso de estos proveedores se especifica a través de la directiva + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>. + La directiva registra los proveedores de autorización que serán llamados + durante la solicitud de la fase del proceso de autorización. Por ejemplo: + </p> + + <pre class="prettyprint lang-config">Require ip <var>address</var> + </pre> + + + <p> + Donde <var>address</var> es una dirección IP (o una dirección IP parcial) + o bien: + </p> + + <pre class="prettyprint lang-config">Require host <var>domain_name</var> + </pre> + + + <p> + Donde <var>domain_name</var> es el nombre completamente cualificado de un nombre + de dominio (FQDN) (o un nombre parcial del dominio); + puede proporcionar múltiples direcciones o nombres de dominio, si se desea. + </p> + + <p> + Por ejemplo, si alguien envía spam a su tablón de mensajes y desea + mantenerlos alejados, podría hacer lo siguiente:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p> + Visitantes que vengan desde esa IP no serán capaces de ver el contenido + que cubre esta directiva. Si, en cambio, lo que se tiene es el nombre de + la máquina, en vez de la dirección IP, podría usar: + </p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not host host.example.com +</RequireAll></pre> + + + <p> + Y, si lo que se quiere es bloquear el acceso desde un determinado dominio + (bloquear el acceso desde el dominio entero), puede especificar parte + de la dirección o del propio dominio a bloquear: + </p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 192.168.205 + Require not host phishers.example.com moreidiots.example + Require not host ke +</RequireAll></pre> + + + <p> + Usando <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + con múltiples directivas <code class="directive"><a href="../mod/mod_authz_core.html#require"><Require></a></code>, cada una negada con un <code>not</code>, + Sólo permitirá el acceso, si todas las condiciones negadas son verdaderas. + En otras palabras, el acceso será bloqueado, si cualquiera de las condiciones + negadas fallara. + </p> + + + + <h3><a name="filesystem" id="filesystem">Compatibilidad de Control de Acceso con versiones + anteriores </a></h3> + + <p> + Uno de los efectos secundarios de adoptar proveedores basados en + mecanismos de autenticación es que las directivas anteriores + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> y + <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> ya no son necesarias. + Sin embargo, para proporcionar compatibilidad con configuraciones antiguas, + estas directivas se han movido al módulo <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>. + </p> + + <div class="warning"><h3>Nota:</h3> + <p> + Las directivas proporcionadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> + han quedado obsoletas por <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Mezclar + directivas antiguas como + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> ó + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> con las nuevas + como + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + es técnicamente posible pero desaconsejable. El módulo + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> se creó para soportar configuraciones + que contuvieran sólo directivas antiguas para facilitar la actualización + a la versión 2.4. + Por favor revise la documentación de + <a href="../upgrading.html">actualización</a> para más información al + respecto. + </p> + </div> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="socache" id="socache">Cache de Autenticación</a></h2> + <p> + Puede haber momentos en que la autenticación ponga una carga + inaceptable en el proveedor (de autenticación) o en tu red. + Esto suele afectar a los usuarios de <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> + (u otros proveedores de terceros/personalizados). + Para lidiar con este problema, HTTPD 2.3/2.4 introduce un nuevo proveedor + de caché <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code> para cachear las credenciales + y reducir la carga en el proveedor(es) original. + </p> + <p> + Esto puede ofrecer un aumento de rendimiento sustancial para algunos usuarios. + </p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">Más información</a></h2> + + <p> + También debería leer la documentación para + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> y <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> + la cuál contiene más información de como funciona todo esto. + La directiva <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias"><AuthnProviderAlias></a></code> puede también ayudar + a la hora de simplificar ciertas configuraciones de autenticación. + </p> + + <p> + Los diferentes algoritmos de cifrado que están soportados por Apache + para la autenticación se explican en + <a href="../misc/password_encryptions.html">Cifrado de Contraseñas</a>. + </p> + + <p> + Y tal vez quiera ojear la documentación de "how to" + <a href="access.html">Control de Acceso</a> donde se mencionan temas + relacionados.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html.fr.utf8 b/docs/manual/howto/auth.html.fr.utf8 new file mode 100644 index 0000000..760a222 --- /dev/null +++ b/docs/manual/howto/auth.html.fr.utf8 @@ -0,0 +1,681 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Authentification et autorisation - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Authentification et autorisation</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + + <p>L'authentification est un processus qui vous permet de vérifier + qu'une personne est bien celle qu'elle prétend être. L'autorisation + est un processus qui permet à une personne d'aller là où elle veut + aller, ou d'obtenir les informations qu'elle désire.</p> + + <p>Pour le contrôle d'accès en général, voir le How-To <a href="access.html">Contrôle d'accès</a>.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Modules et directives concernés</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Les prérequis</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Mise en oeuvre</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Autorisation d'accès à +plusieurs personnes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Problèmes possibles</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Autre méthode de stockage des mots de +passe</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Utilisation de plusieurs fournisseurs +d'authentification</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Pour aller plus loin qu'une simple +autorisation</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#socache">Mise en cache de l'authentification</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Pour aller plus loin . . .</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Modules et directives concernés</a></h2> + +<p>Trois groupes de modules sont concernés par le processus +d'authentification et d'autorisation. Vous devrez utiliser au moins un +module de chaque groupe.</p> + +<ul> + <li>Type d'authentification (voir la directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code>) + <ul> + <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li> + <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li> + </ul> + </li> + <li>Fournisseur d'authentification (voir les directives <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> et <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>) + + <ul> + <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li> + </ul> + </li> + <li>Autorisation (voir la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>) + <ul> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li> + </ul> + </li> +</ul> + + <p>On peut aussi ajouter <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. Ces modules implémentent des + directives générales qui opèrent au dessus de tous les modules + d'authentification.</p> + + <p>Le module <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> est un fournisseur + d'authentification et d'autorisation. Le module + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> fournit une autorisation et un + contrôle d'accès basés sur le nom du serveur, l'adresse IP ou + certaines caractéristiques de la requête, mais ne fait pas partie du + système fournisseur d'authentification. Le module + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> a été créé à des fins de + compatibilité ascendante avec mod_access.</p> + + <p>Vous devriez aussi jeter un coup d'oeil au manuel de recettes de <a href="access.html">Contrôle d'accès</a>, qui décrit les différentes + méthodes de contrôle d'accès à votre serveur.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">Introduction</a></h2> + <p>Si votre site web contient des informations sensibles ou + destinées seulement à un groupe de personnes restreint, les + techniques exposées dans cet article vont vous aider à vous assurer + que les personnes qui ont accès à ces pages sont bien celles + auxquelles vous avez donné l'autorisation d'accès.</p> + + <p>Cet article décrit les méthodes "standards" de protection de + parties de votre site web que la plupart d'entre vous sont appelés à + utiliser.</p> + + <div class="note"><h3>Note :</h3> + <p>Si vos données ont un réel besoin de sécurisation, prévoyez + l'utilisation de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en plus de toute méthode + d'authentification.</p> + </div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">Les prérequis</a></h2> + <p>Les directives décrites dans cet article devront être insérées + soit au niveau de la configuration de votre serveur principal (en + général dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>), soit au niveau de la + configuration des répertoires (fichiers <code>.htaccess</code>)</p> + + <p>Si vous envisagez l'utilisation de fichiers + <code>.htaccess</code>, la configuration de votre serveur devra + permettre l'ajout de directives d'authentification dans ces + fichiers. Pour ce faire, on utilise la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, qui spécifie quelles + directives pourront éventuellement contenir les fichiers de + configuration de niveau répertoire.</p> + + <p>Comme il est ici question d'authentification, vous aurez besoin + d'une directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + du style :</p> + + <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre> + + + <p>Si vous avez l'intention d'ajouter les directives directement + dans le fichier de configuration principal, vous devrez bien entendu + posséder les droits en écriture sur ce fichier.</p> + + <p>Vous devrez aussi connaître un tant soit peu la structure des + répertoires de votre serveur, ne serait-ce que pour savoir où se + trouvent certains fichiers. Cela ne devrait pas présenter de grandes + difficultés, et nous essaierons de clarifier tout ça lorsque le besoin + s'en fera sentir.</p> + + <p>Enfin, vous devrez vous assurer que les modules + <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + ont été soit compilés avec le binaire httpd, soit chargés par le + fichier de configuration httpd.conf. Ces deux modules fournissent + des directives générales et des fonctionnalités qui sont critiques + quant à la configuration et l'utilisation de l'authentification et + de l'autorisation au sein du serveur web.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">Mise en oeuvre</a></h2> + <p>Nous décrivons ici les bases de la protection par mot de passe + d'un répertoire de votre serveur.</p> + + <p>Vous devez en premier lieu créer un fichier de mots de passe. La + méthode exacte selon laquelle vous allez créer ce fichier va varier + en fonction du fournisseur d'authentification choisi. Mais nous + entrerons dans les détails plus loin, et pour le moment, nous nous + contenterons d'un fichier de mots de passe en mode texte.</p> + + <p>Ce fichier doit être enregistré à un endroit non accessible + depuis le web, de façon à ce que les clients ne puissent pas le + télécharger. Par exemple, si vos documents sont servis à partir de + <code>/usr/local/apache/htdocs</code>, vous pouvez enregistrer le + fichier des mots de passe dans + <code>/usr/local/apache/passwd</code>.</p> + + <p>L'utilitaire <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> fourni avec Apache + permet de créer ce fichier. Vous le trouverez dans le répertoire + <code>bin</code> de votre installation d'Apache. Si vous avez + installé Apache à partir d'un paquetage tiers, il sera probablement + dans le chemin par défaut de vos exécutables.</p> + + <p>Pour créer le fichier, tapez :</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </code></p></div> + + <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> vous demandera d'entrer le mot de + passe, et de le retaper pour confirmation :</p> + + <div class="example"><p><code> + # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mot-de-passe<br /> + Re-type new password: mot-de-passe<br /> + Adding password for user rbowen + </code></p></div> + + <p>Si <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> n'est pas dans le chemin par + défaut de vos exécutables, vous devrez bien entendu entrer le chemin + complet du fichier. Dans le cas d'une installation par défaut, il se + trouve à <code>/usr/local/apache2/bin/htpasswd</code>.</p> + + <p>Ensuite, vous allez devoir configurer le serveur de façon à ce + qu'il demande un mot de passe et lui préciser quels utilisateurs ont + l'autorisation d'accès. Pour ce faire, vous pouvez soit éditer le + fichier <code>httpd.conf</code>, soit utiliser un fichier + <code>.htaccess</code>. Par exemple, si vous voulez protéger le + répertoire <code>/usr/local/apache/htdocs/secret</code>, vous pouvez + utiliser les directives suivantes, soit dans le fichier + <code>/usr/local/apache/htdocs/secret/.htaccess</code>, soit dans le + fichier <code>httpd.conf</code> à l'intérieur d'une section <Directory + "/usr/local/apache/htdocs/secret"> :</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Restricted Files" +# (Following line optional) +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +Require user rbowen</pre> + + + <p>Examinons ces directives une à une. La directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> définit la méthode + utilisée pour authentifier l'utilisateur. La méthode la plus + courante est <code>Basic</code>, et elle est implémentée par + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. Il faut cependant garder à l'esprit + que l'authentification Basic transmet le mot de passe depuis le + client vers le serveur en clair. Cette méthode ne devra donc pas + être utilisée pour la transmission de données hautement sensibles si + elle n'est pas associée au module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. Apache + supporte une autre méthode d'authentification : <code>AuthType + Digest</code>. Cette méthode est implémentée par le module <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> et 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 avec <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p> + + <p>La directive <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> définit + l'<dfn>Identificateur</dfn> (Realm) à utiliser avec + l'authentification. L'identificateur possède deux fonctions. Tout + d'abord, le client présente en général cette information à + l'utilisateur dans le cadre de la boîte de dialogue de mot de passe. + Ensuite, le client l'utilise pour déterminer quel mot de passe + envoyer pour une zone authentifiée donnée.</p> + + <p>Ainsi par exemple, une fois un client authentifié dans la zone + <code>"Fichiers réservés"</code>, il soumettra à nouveau + automatiquement le même mot de passe pour toute zone du même serveur + marquée de l'identificateur <code>"Fichiers réservés"</code>. De + cette façon, vous pouvez éviter à un utilisateur d'avoir à saisir + plusieurs fois le même mot de passe en faisant partager le même + identificateur entre plusieurs zones réservées. Bien entendu et pour + des raisons de sécurité, le client devra redemander le mot + de passe chaque fois que le nom d'hôte du serveur sera modifié.</p> + + <p>La directive <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> est, dans ce + cas, facultative, car <code>file</code> est la valeur par défaut + pour cette directive. Par contre, cette directive sera obligatoire + si vous utilisez une autre source d'authentification comme + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou + <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p> + + <p>La directive <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> définit le chemin + du fichier de mots de passe que nous venons de créer avec + <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. Si vous possédez un grand nombre + d'utilisateurs, la durée de la recherche dans un fichier texte pour + authentifier un utilisateur à chaque requête va augmenter + rapidement, et pour pallier cet inconvénient, Apache peut aussi + stocker les données relatives aux + utilisateurs dans des bases de données rapides. Le module + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> fournit la directive <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>. Les programmes <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> et <code class="program"><a href="../programs/htdbm.html">htdbm</a></code> permettent de + créer et manipuler ces fichiers. Enfin, de nombreux modules tiers + fournissent d'autres types d'authentification.</p> + + <p>Enfin, la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> implémente la partie + autorisation du processus en définissant l'utilisateur autorisé à + accéder à cette zone du serveur. Dans la section suivante, nous + décrirons les différentes méthodes d'utilisation de la directive + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Autorisation d'accès à +plusieurs personnes</a></h2> + <p>Les directives ci-dessus n'autorisent qu'une personne (quelqu'un + possédant le nom d'utilisateur <code>rbowen</code>) à accéder au + répertoire. Dans la plupart des cas, vous devrez autoriser + l'accès à plusieurs personnes. C'est ici + qu'intervient la directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>.</p> + + <p>Si vous voulez autoriser l'accès à plusieurs personnes, vous + devez créer un fichier de groupes qui associe des noms de groupes + avec une liste d'utilisateurs de ce groupe. Le format de ce fichier + est très simple, et vous pouvez le créer avec votre éditeur favori. + Son contenu se présente comme suit :</p> + + <div class="example"><p><code> + Nom-de-groupe: rbowen dpitts sungo rshersey + </code></p></div> + + <p>Il s'agit simplement une liste des membres du groupe sous la + forme d'une ligne séparée par des espaces.</p> + + <p>Pour ajouter un utilisateur à votre fichier de mots de passe + préexistant, entrez :</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords dpitts + </code></p></div> + + <p>Vous obtiendrez le même effet qu'auparavant, mais le mot de passe + sera ajouté au fichier, plutôt que d'en créer un nouveau (C'est le + drapeau <code>-c</code> qui permet de créer un nouveau fichier de + mots de passe)..</p> + + <p>Maintenant, vous devez modifier votre fichier + <code>.htaccess</code> ou la section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> comme suit :</p> + + <pre class="prettyprint lang-config">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</pre> + + + <p>Maintenant, quiconque appartient au groupe + <code>Nom-de-groupe</code>, et possède une entrée dans le fichier + <code>password</code> pourra accéder au répertoire s'il tape le bon + mot de passe.</p> + + <p>Il existe une autre méthode moins contraignante pour autoriser + l'accès à plusieurs personnes. Plutôt que de créer un fichier de + groupes, il vous suffit d'ajouter la directive suivante :</p> + + <pre class="prettyprint lang-config">Require valid-user</pre> + + + <p>Le remplacement de la ligne <code>Require user rbowen</code> par + la ligne <code>Require valid-user</code> autorisera l'accès à + quiconque possédant une entrée dans le fichier password, et ayant + tapé le bon mot de passe.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems">Problèmes possibles</a></h2> + <p>L'authentification Basic est spécifiée d'une telle manière que + vos nom d'utilisateur et mot de passe doivent être vérifiés chaque + fois que vous demandez un document au serveur, et ceci même si vous + rechargez la même page, et pour chaque image contenue dans la page + (si elles sont situées dans un répertoire protégé). Comme vous + pouvez l'imaginer, ceci ralentit un peu le fonctionnement. La mesure + dans laquelle le fonctionnement est ralenti est proportionnelle à la + taille du fichier des mots de passe, car ce dernier doit être ouvert + et la liste des utilisateurs parcourue jusqu'à ce que votre nom soit + trouvé, et ceci chaque fois qu'une page est chargée.</p> + + <p>En conséquence, ce ralentissement impose une limite pratique au + nombre d'utilisateurs que vous pouvez enregistrer dans un fichier de + mots de passe. Cette limite va varier en fonction des performances + de votre serveur, mais vous commencerez à remarquer un + ralentissement lorsque vous atteindrez quelques centaines + d'utilisateurs, et serez alors appelés à utiliser une méthode + d'authentification différente.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="dbmdbd" id="dbmdbd">Autre méthode de stockage des mots de +passe</a></h2> + + <p>Suite au problème évoqué précédemment et induit par le stockage + des mots de passe dans un fichier texte, vous pouvez être appelé à + stocker vos mots de passe d'une autre manière, par exemple dans une + base de données.</p> + + <p>Pour y parvenir, on peut utiliser les modules + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>. + Vous pouvez choisir comme format de stockage <code>dbm</code> ou + <code>dbd</code> à la place de <code>file</code> pour la directive + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>.</p> + + <p>Par exemple, pour sélectionner un fichier dbm à la place d'un + fichier texte :</p> + + <pre class="prettyprint lang-config"><Directory "/www/docs/private"> + + AuthName "Private" + AuthType Basic + AuthBasicProvider dbm + AuthDBMUserFile "/www/passwords/passwd.dbm" + Require valid-user + +</Directory></pre> + + + <p>D'autres options sont disponibles. Consultez la documentation de + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> pour plus de détails.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="multprovider" id="multprovider">Utilisation de plusieurs fournisseurs +d'authentification</a></h2> + + <p>Depuis l'arrivée des nouvelles architecture d'autorisation et + d'authentification basées sur les fournisseurs, vous n'êtes plus + limité à une méthode d'authentification et d'autorisation + unique. En fait, on peut panacher autant de fournisseurs que l'on + veut, ce qui vous permet d'élaborer l'architecture qui correspond + exactement à vos besoins. Dans l'exemple suivant, on utilise + conjointement les fournisseurs d'authentification + file et LDAP :</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>Dans cet exemple, le fournisseur file va tenter d'authentifier + l'utilisateur en premier. S'il n'y parvient pas, le fournisseur LDAP + sera sollicité. Ceci permet l'élargissement des possibilités + d'authentification si votre organisation implémente plusieurs types + de bases d'authentification. D'autres scénarios d'authentification + et d'autorisation peuvent associer un type d'authentification avec + un autre type d'autorisation. Par exemple, une authentification + basée sur un fichier de mots de passe peut permettre l'attribution + d'autorisations basée sur un annuaire LDAP.</p> + + <p>Tout comme plusieurs fournisseurs d'authentification peuvent être + implémentés, on peut aussi utiliser plusieurs méthodes + d'autorisation. Dans l'exemple suivant, on utilise à la fois une + autorisation à base de fichier de groupes et une autorisation à base + de groupes LDAP.</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>Pour un scénario d'autorisation un peu plus avancé, des + directives de conteneur d'autorisation comme <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> et + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> permettent d'appliquer une + logique telle que l'ordre dans lequel les autorisations sont + appliquées peut être entièrement contrôlé au niveau de la + configuration. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs + d'autorisations</a> pour un exemple de ce contrôle.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="beyond" id="beyond">Pour aller plus loin qu'une simple +autorisation</a></h2> + + <p>La manière dont les autorisations sont accordées est désormais + beaucoup plus souple qu'une simple vérification auprès d'une seule + base de données. Il est maintenant possible de choisir l'ordre, la + logique et la manière selon lesquels une autorisation est + accordée.</p> + + <h3><a name="authandororder" id="authandororder">Appliquer logique et + ordonnancement</a></h3> + <p>Le contrôle de la manière et de l'ordre selon lesquels le + processus d'autorisation était appliqué + constituait une sorte de mystère par + le passé. Dans Apache 2.2, un mécanisme d'authentification basé + sur les fournisseurs a été développé afin de séparer le + véritable processus d'authentification de l'autorisation et ses + différentes fonctionnalités. Un des avantages colatéraux + résidait dans le fait que les fournisseurs d'authentification + pouvaient être configurés et appelés selon un ordre particulier + indépendant de l'ordre de chargement du module auth proprement + dit. Ce mécanisme basé sur les fournisseurs a été étendu au + processus d'autorisation. Ceci signifie que la directive + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> définit + non seulement quelles méthodes d'autorisation doivent être + utilisées, mais aussi l'ordre dans lequel elles sont appelées. + Les méthodes d'autorisation sont appelées selon l'ordre dans + lequel les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> apparaissent dans la + configuration.</p> + + <p>Avec l'introduction des directives de conteneur + d'autorisations <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + et <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>, la + configuration contrôle aussi le moment où les méthodes + d'autorisation sont appelées, et quels critères déterminent + l'autorisation d'accès. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs + d'autorisations</a> pour un exemple de la manière de les + utiliser pour exprimer des logiques d'autorisation + complexes.</p> + + <p>Par défaut, toutes les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> sont + traitées comme si elles étaient contenues dans une directive + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>. En d'autres termes, il + suffit + qu'une méthode d'autorisation s'applique avec succès pour que + l'autorisation soit accordée.</p> + + + + <h3><a name="reqaccessctrl" id="reqaccessctrl">Utilisation de fournisseurs + d'autorisation pour le contrôle d'accès</a></h3> + <p>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.</p> + + <p>Les fournisseurs d'autorisation <code>all</code>, + <code>env</code>, <code>host</code> et <code>ip</code> vous + 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.</p> + + <p>L'utilisation de ces fournisseurs est spécifiée à l'aide de + la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>. 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 :</p> + + <pre class="prettyprint lang-config">Require ip <var>address</var></pre> + + + <p>où <var>adresse</var> est une adresse IP (ou une adresse IP + partielle) ou :</p> + + <pre class="prettyprint lang-config">Require host <var>domain_name</var></pre> + + + <p>où <var>nom_domaine</var> 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.</p> + + <p>Par exemple, si vous voulez rejeter les spams dont une + machine vous inonde, vous pouvez utiliser ceci :</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>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 :</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not host host.example.com +</RequireAll></pre> + + + <p>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 :</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 192.168.205 + Require not host phishers.example.com moreidiots.example + Require not host ke +</RequireAll></pre> + + + <p>L'utilisation de la directive <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> + avec de multiples directives <code class="directive"><a href="../mod/mod_authz_core.html#require"><Require></a></code>, toutes avec la négation + <code>not</code>, 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.</p> + + + + <h3><a name="filesystem" id="filesystem">Compatibilité ascendante du contrôle + d'accès</a></h3> + <p>L'adoption d'un mécanisme à base de fournisseurs pour + l'authentification, a pour effet colatéral de rendre inutiles + les directives <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> et <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code>. Cependant, et à + des fins de compatibilité ascendante vers les anciennes + configurations, ces directives ont été déplacées vers le module + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p> + + <div class="warning"><h3>Note</h3> + <p>Les directives fournies par le module + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> sont devenues obsolètes depuis + la refonte du module <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Mélanger d'anciennes + directives comme <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> ou <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> avec des nouvelles comme + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> est techniquement + possible mais déconseillé. En effet, <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> a + été conçu pour supporter des configurations ne contenant que des anciennes + directives afin de faciliter le passage à la version 2.4. Voir le document + <a href="../upgrading.html">upgrading</a> pour plus de détails. + </p> + </div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="socache" id="socache">Mise en cache de l'authentification</a></h2> + <p>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 + <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> (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, + <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code>, qui permet de mettre en cache + les données d'authentification, et ainsi réduire la charge du/des + fournisseurs(s) originels.</p> + <p>Cette mise en cache apportera un gain en performance substantiel + à certains utilisateurs.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">Pour aller plus loin . . .</a></h2> + <p>Vous pouvez aussi lire la documentation de + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> et <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> + qui contient des informations supplémentaires à propos du + fonctionnement de tout ceci. + Certaines configurations d'authentification peuvent aussi être + simplifiées à l'aide de la directive <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias"><AuthnProviderAlias></a></code>.</p> + + <p>Les différents algorithmes de chiffrement supportés par Apache + pour authentifier les données sont expliqués dans <a href="../misc/password_encryptions.html">PasswordEncryptions</a>.</p> + + <p>Enfin vous pouvez consulter la recette <a href="access.html">Contrôle + d'accès</a>, qui décrit un certain nombre de situations en relation + avec le sujet.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html.ja.utf8 b/docs/manual/howto/auth.html.ja.utf8 new file mode 100644 index 0000000..78519bd --- /dev/null +++ b/docs/manual/howto/auth.html.ja.utf8 @@ -0,0 +1,692 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>認証、承認、アクセス制御 - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>認証、承認、アクセス制御</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> + + <p>「認証」とは、誰かが自分は誰であるかを主張した場合に、 + それを確認するための全過程を指します。「承認」とは、 + 誰かが行きたい場所に行けるように、あるいは欲しい情報を + 得ることができるようにするための全過程を指します。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">関連するモジュールとディレクティブ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">はじめに</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">準備</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">動作させる</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin"> +複数の人が入れるようにする</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">起こりえる問題</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">パスワードの保存形式を変える</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">複数のプロバイダを使用する</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#beyond">単純な承認のその先</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">追加情報</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">関連するモジュールとディレクティブ</a></h2> +<p>認証と承認の処理に関連する 3 種類のモジュールがあります。 +それぞれ少なくともひとつずつ必要です。</p> + +<ul> + <li>認証のタイプ ( + <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code> ディレクティブ参照) + <ul> + <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li> + <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li> + </ul> + </li> + <li>認証プロバイダ ( + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>, + <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> ディレクティブ参照) + + <ul> + <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_default.html">mod_authn_default</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + </ul> + </li> + <li>承認 ( + <code class="directive"><a href="../mod/core.html#require">Require</a></code> ディレクティブ参照) + <ul> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li> + </ul> + </li> +</ul> + + <p>これらのモジュールに加えて、<code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> + と <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> があります。 + この 2 つのモジュールは認証モジュールに共通なコアディレクティブを + 実装しています。</p> + + <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> は認証プロバイダと承認プロバイダの + 両方の機能を持っています。 + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> はホスト名、IP アドレスや + リクエストの特徴に基づいたアクセス制御を行いますが、 + 認証プロバイダのシステムの一部ではありません。 + mod_access との後方互換性のため、 + 新しいモジュールの <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> があります。</p> + + <p>様々なアクセス制御の行ない方については、 + <a href="access.html">アクセス制御</a>の方法をご覧ください。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">はじめに</a></h2> + <p>もし機密の情報や、ごくごく少数グループの人向けの情報を + ウェブサイトに置くのであれば、この文書に書かれている + テクニックを使うことで、そのページを見ている人たちが + 望みの人たちであることを確実にできるでしょう。</p> + + <p>この文書では、多くの人が採用するであろう、 + ウェブサイトの一部分を保護する「一般的な」 + 方法についてカバーしています。</p> + + <div class="note"><h3>注意</h3> + <p>データが本当に機密なのであれば、認証に加えてさらに + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> を使うと良いでしょう。</p> + </div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">準備</a></h2> + <p>この文書で取り扱われるディレクティブは、 + メインサーバ設定ファイル (普通は + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + セクション中) か、あるいはディレクトリ毎の設定ファイル + (<code>.htaccess</code> ファイル) かで用います。</p> + + <p><code>.htaccess</code> ファイルを用いるのであれば、 + これらのファイルに認証用のディレクティブを置けるように + サーバの設定をしないといけないでしょう。これは + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + ディレクティブで可能になります。 + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + ディレクティブでは、ディレクトリ毎の設定ファイル中に置くことのできる + ディレクティブを、もしあれば、指定します。</p> + + <p>認証について話を進めているので、次のような + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + ディレクティブが必要になるでしょう。</p> + + <div class="example"><p><code> + AllowOverride AuthConfig + </code></p></div> + + <p>そうでなく、メインサーバ設定ファイルの中に + 直接置くのであれば、当然ながらそのファイルへの書き込み + 権限を持っていなければならないでしょう。</p> + + <p>また、どのファイルがどこに保存されているか知るために、 + サーバのディレクトリ構造について少し知っておく + 必要があるでしょう。 + これはそんなに難しくないので、この文書中で + ディレクトリ構造について知っておく必要がある場面では、 + 明らかになるようにします。</p> + + <p><code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> と <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> + の両方が httpd バイナリに静的に組み込み済みであるか、httpd.conf + 設定ファイルで動的にロードされるかして、httpd に組み込まれていなければ + なりません。これらの二つのモジュールは、設定ファイルのなかで非常に + 重要でウェブサーバの認証と承認で使用されるコアディレクティブと + その機能を提供しています。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">動作させる</a></h2> + <p>では、サーバ上のあるディレクトリをパスワードで保護する + 基本手順を示します。</p> + + <p>まずはじめに、パスワードファイルを作ります。 + どの認証プロバイダを使うかによって、パスワードファイル生成の手順は + 大きく異なります。ここでの例では、手始めにテキストパスワードファイルを + 使います。</p> + + <p>このパスワードファイルは、ウェブからアクセスできる場所に + 置くべきではありません。他の人がパスワードファイルを + ダウンロードできないようにするためです。例えば、 + <code>/usr/local/apache/htdocs</code> でドキュメントを + 提供しているのであれば、パスワードファイルは + <code>/usr/local/apache/passwd</code> + などに置いた方が良いでしょう。</p> + + <p>ファイルを作るためには、Apache 付属の <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> + を使います。このコマンドは Apache をどこにインストールしようとも、 + インストールディレクトリの <code>bin</code> + ディレクトリ以下に置かれます。サードバーティ製のパッケージで + インストールした場合は、実行パスの中で見つかるでしょう。</p> + + <p>ファイルを作るには、次のようにタイプしてください。</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </code></p></div> + + <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> は、パスワードを要求し、その後 + 確認のためにもう一度入力するように要求してきます。</p> + + <div class="example"><p><code> + # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mypassword<br /> + Re-type new password: mypassword<br /> + Adding password for user rbowen + </code></p></div> + + <p>もし <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> がパスの中に入っていない場合は、 + もちろん、実行するためにプログラムまでのフルパスを + タイプする必要があります。デフォルトのインストール状態であれば、 + <code>/usr/local/apache/bin/htpasswd</code> + にプログラムが置かれています。</p> + + <p>次に、サーバがパスワードを要求するように設定して、 + どのユーザがアクセスを許されているかをサーバに知らせなければ + なりません。 <code>httpd.conf</code> を編集するか + <code>.htaccess</code> ファイルを使用するかで + 設定します。例えば、ディレクトリ + <code>/usr/local/apache/htdocs/secret</code> + を保護したい場合は、 + <code>/usr/local/apache/htdocs/secret/.htaccess</code> + か httpd.conf 中の <Directory + /usr/local/apache/htdocs/secret> セクションに + 配置して、次のディレクティブを使うことができます。</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "Restricted Files"<br /> + # (Following line optional)<br /> + AuthBasicProvider file<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + Require user rbowen + </code></p></div> + + <p>個々のディレクティブについて見てみましょう。 + <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code> + ディレクティブはどういう認証方法でユーザの認証を行うかを + 選択します。最も一般的な方法は <code>Basic</code> + で、これは <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> + で実装されています。しかしながら、 + これは気を付けるべき重要なポイントなのですが、 + Basic 認証はクライアントからサーバへ、 + パスワードを暗号化せずに送ります。ですからこの方法は、 + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> と組み合わせない状態では、 + 特に機密性の高いデータに対しては用いるべきでは + ありません。 Apache ではもう一つ別の認証方法: + <code>AuthType Digest</code> をサポートしています。 + この方法は <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> + で実装されていて、もっと安全です。 + 最近のクライアントは Digest + 認証をサポートしているようです。</p> + + <p><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code> + ディレクティブでは、認証に使う <dfn>Realm</dfn> (訳注: 領域) + を設定します。Realm は大きく分けて二つの機能を提供します。 + 一つ目は、クライアントがパスワードダイアログボックスの + 一部としてユーザにこの情報をよく提示する、というものです。 + 二つ目には、クライアントが与えられた認証領域に対してどのパスワードを + 送信すれば良いのかを決定するために使われる、という機能です。</p> + + <p>例えば、<code>"Restricted Files"</code> 領域中で + 一度認証されれば、同一サーバ上で <code>"Restricted Files"</code> + Realm としてマークされたどんな領域でも、クライアントは + 自動的に同じパスワードを使おうと試みます。 + このおかげで、複数の制限領域に同じ realm を共有させて、 + ユーザがパスワードを何度も要求される事態を + 防ぐことができます。もちろん、セキュリティ上の理由から、 + サーバのホスト名が変わればいつでも必ず、 + クライアントは再びパスワードを尋ねる必要があります。</p> + + <p><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> + はデフォルト値が <code>file</code> なので、今回の場合は無くても構いません。 + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> や <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> + といった他のモジュールを使う場合には必要になります。 + </p> + + <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + ディレクティブは <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> で作った + パスワードファイルへのパスを設定します。 + ユーザ数が多い場合は、リクエスト毎のユーザの認証のための + プレーンテキストの探索が非常に遅くなることがあります。 + Apache ではユーザ情報を高速なデータベースファイルに + 保管することもできます。 + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> モジュールが + <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> + ディレクティブを提供します。これらのファイルは <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> + プログラムで作成したり操作したりできます。 + <a href="http://modules.apache.org/">Apache + モジュールデータベース</a>中にあるサードパーティー製の + モジュールで、その他多くのタイプの認証オプションが + 利用可能です。</p> + + <p>最後に、<code class="directive"><a href="../mod/core.html#require">Require</a></code> + ディレクティブが、サーバのこの領域にアクセスできるユーザを + 指定することによって、プロセスの承認部分を提供します。 + 次のセクションでは、<code class="directive"><a href="../mod/core.html#require">Require</a></code> + ディレクティブの様々な用法について述べます。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin"> +複数の人が入れるようにする</a></h2> + <p>上記のディレクティブは、ただ一人 (具体的にはユーザ名 + <code>rbowen</code> の誰か) がディレクトリに + 入れるようにします。多くの場合は、複数の人が + 入れるようにしたいでしょう。ここで + <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> + の登場です。</p> + + <p>もし複数の人が入れるようにしたいのであれば、 + グループに属するユーザの一覧の入っている、グループ名のついた + グループファイルを作る必要があります。このファイルの + 書式はきわめて単純で、お好みのエディタで生成できます。 + ファイルの中身は次のようなものです。</p> + + <div class="example"><p><code> + GroupName: rbowen dpitts sungo rshersey + </code></p></div> + + <p>一行にスペース区切りで、グループに所属するメンバーの + 一覧をならべるだけです。</p> + + <p>既に存在するパスワードファイルにユーザを加える場合は、 + 次のようにタイプしてください。</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords dpitts + </code></p></div> + + <p>以前と同じ応答が返されますが、新しいファイルを + 作るのではなく、既にあるファイルに追加されています。 + (新しいパスワードファイルを作るには <code>-c</code> + を使います。)</p> + + <p>ここで次のようにして <code>.htaccess</code> ファイルを + 修正する必要があります。</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "By Invitation Only"<br /> + # Optional line:<br /> + AuthBasicProvider file<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + AuthGroupFile /usr/local/apache/passwd/groups<br /> + Require group GroupName + </code></p></div> + + <p>これで、グループ <code>GroupName</code> にリストされていて、 + <code>password</code> ファイルにエントリがある人は、 + 正しいパスワードをタイプすれば入ることができるでしょう。</p> + + <p>もっと特定せずに複数のユーザが入れるようにする、 + もう一つの方法があります。グループファイルを作るのではなく、 + 次のディレクティブを使えばできます。</p> + + <div class="example"><p><code> + Require valid-user + </code></p></div> + + <p><code>require user rbowen</code> 行でなく、上記を使うと、 + パスワードファイルにリストされている人であれば誰でも + 許可されます。 + 単にパスワードファイルをグループ毎に分けておくことで、 + グループのような振る舞いをさせることもできます。 + このアプローチの利点は、Apache は二つではなく、 + ただ一つのファイルだけを検査すればよいという点です。 + 欠点は、たくさんのパスワードファイルを管理して、その中から + <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + ディレクティブに正しいファイルを参照させなければならない点です。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems">起こりえる問題</a></h2> + <p>Basic 認証が指定されている場合は、 + サーバにドキュメントをリクエストする度に + ユーザ名とパスワードを検査しなければなりません。 + これは同じページ、ページにある全ての画像を + リロードする場合であっても該当します + (もし画像も保護されたディレクトリから来るのであれば) 。 + 予想される通り、これは動作を多少遅くします。 + 遅くなる程度はパスワードファイルの大きさと比例しますが、 + これは、ファイルを開いてあなたの名前を発見するまで + ユーザ名のリストを読まなければならないからです。 + そして、ページがロードされる度にこれを行わなければ + なりません。</p> + + <p>結論としては、一つのパスワードファイルに置くことのできる + ユーザ数には実質的な限界があります。 + この限界はサーバマシンの性能に依存して変わりますが、 + 数百のエントリを越えたあたりから速度低下が見られると予期されています。 + その時は他の認証方法を考慮に入れた方が良いでしょう。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="dbmdbd" id="dbmdbd">パスワードの保存形式を変える</a></h2> + + <p>プレーンテキストでパスワードを保存する方法には上記の問題があり、 + データベースのような別の場所にパスワードを保存したいと思う + かもしれません。</p> + + <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> と <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> + を使うと、それができるようになります。 + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicsource">AuthBasicSource</a></code> + で file の代わりに、<code>dbm</code> あるいは <code>dbd</code> + を格納形式として選べます。</p> + + <p>テキストファイルの代わりに dbm ファイルを選択する場合は、たとえば次のようにします。</p> + + <div class="example"><p><code> + <Directory /www/docs/private><br /> + AuthName "Private"<br /> + AuthType Basic<br /> + AuthBasicProvider dbm<br /> + AuthDBMUserFile /www/passwords/passwd.dbm<br /> + Require valid-user<br /> + </Directory> + </code></p></div> + + <p>この他のオプションも存在します。詳細に関しては + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> のドキュメントをご覧ください。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="multprovider" id="multprovider">複数のプロバイダを使用する</a></h2> + + <p>認証承認アーキテクチャに基づいている新しいプロバイダを使うと、 + 認証承認の方法をひとつに縛る必要がなくなります。 + いくつものプロバイダを組み合わせて、自分の望みの挙動にできます。 + 次の例では file 認証プロバイダと ldap 認証プロバイダを + 組み合わせています。</p> + + <div class="example"><p><code> + <Directory /www/docs/private><br /> + AuthName "Private"<br /> + AuthType Basic<br /> + AuthBasicProvider file ldap<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + AuthLDAPURL ldap://ldaphost/o=yourorg<br /> + Require valid-user + </code></p></div> + + <p>この例では、まず file プロバイダがユーザ認証を試みます。 + 認証できなかった場合には、ldap プロバイダが呼び出されます。 + 組織で複数の認証格納方法を使っている際などに、 + この方法を使って認証のスコープを拡大できます。 + もうひとつのシナリオは、ひとつの認証タイプと異なる承認を + 組み合わせる方法でしょう。たとえば、パスワードファイルで認証して、 + ldap ディレクトリで承認を行うといった場合です。</p> + + <p>認証プロバイダを複数実装できるように、承認方法も複数使用できます。 + この例では file グループ承認と ldap グループ承認を使っています。</p> + + <div class="example"><p><code> + <Directory /www/docs/private><br /> + AuthName "Private"<br /> + AuthType Basic<br /> + AuthBasicProvider file<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + AuthLDAPURL ldap://ldaphost/o=yourorg + AuthGroupFile /usr/local/apache/passwd/groups<br /> + Require group GroupName<br /> + Require ldap-group cn=mygroup,o=yourorg + </code></p></div> + + <p>承認をより細かく制御したい場合は、 + <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></a></code> と + <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyone>"><SatisfyOne></a></code> + ディレクティブを使って AND/OR ロジックで指定し、設定ファイルで + 承認の処理順番の制御ができるようになっています。 + これらのディレクティブをどのように使えるか、網羅した例をご覧ください。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="beyond" id="beyond">単純な承認のその先</a></h2> + + <p>承認の方法は、ひとつのデータソースを見て一回だけチェックするのと比べて、 + ずっと多彩な適用方法ができます。 + 承認処理の適用順序や制御、選択ができるようになりました。</p> + + <h3><a name="authandororder" id="authandororder">AND/OR ロジックの適用と順序付け</a></h3> + <p>承認がどのような順序で適用されているか、また、それをどのように制御するかは、 + これまで混乱を招いていました。 + Apache 2.2 ではプロバイダベースの認証メカニズムが導入され、 + 承認処理から認証処理とサポート機能とが切り分けられました。 + これによるひとつの効果として、 + 認証モジュールのロード順やモジュール自体の順序に依存することなく、 + 指定した順番で認証プロバイダが呼び出せるよう、 + 設定できるようになりました。 + このプロバイダメカニズムは承認処理でも導入されています。 + つまり、<code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + ディレクティブは単にどの承認手法が使われるかを指定するだけではなく、 + それらの呼び出し順序も指定できるようになりました。 + 複数の承認手法があるとき、その呼び出し順は、設定ファイルの + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> ディレクティブ中で + 現れた順序と同じになります。</p> + + <p>追加で導入された + <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></a></code>, + <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyone>"><SatisfyOne></a></code> + ディレクティブを使って、承認手法がいつ呼び出され、アクセスが許可された際に + どの手続きが適用されるか指定することができます。 + たとえば、次の承認ブロックのロジックを見てみましょう:</p> + + <div class="example"><p><code> + # if ((user == "John") ||<br /> + # ((Group == "admin")<br /> + # && (ldap-group <ldap-object> contains auth'ed_user)<br /> + # && ((ldap-attribute dept == "sales")<br /> + # || (file-group contains auth'ed_user))))<br /> + # then<br /> + # auth_granted<br /> + # else<br /> + # auth_denied<br /> + #<br /> + <Directory /www/mydocs><br /> + <span class="indent"> + Authname ...<br /> + AuthBasicProvider ...<br /> + ...<br /> + Require user John<br /> + <SatisfyAll><br /> + <span class="indent"> + Require Group admins<br /> + Require ldap-group cn=mygroup,o=foo<br /> + <SatisfyOne><br /> + <span class="indent"> + Require ldap-attribute dept="sales"<br /> + Require file-group<br /> + </span> + </SatisfyOne><br /> + </span> + </SatisfyAll><br /> + </span> + </Directory> + </code></p></div> + + <p>デフォルトでは <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + ディレクティブは OR 操作として扱われます。つまり、もし指定した承認手法の + ひとつでも合格すれば、承認されます。 + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> ディレクティブのセットを + ひとつの <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></a></code> + ブロックで囲むとAND 操作となり、全ての承認手法で合格しなければ許可されません。</p> + + + + <h3><a name="reqaccessctrl" id="reqaccessctrl">アクセス制御における Require と Reject の使い方</a></h3> + <p>ユーザ名とパスワードによる認証は全体の一部分でしかありません。 + 誰がアクセスしてきたかといった情報以外の条件を使いたい、 + とよく思うことでしょう。 + たとえば、どこからアクセスしてきているか、といった具合です。</p> + + <p>承認プロバイダ <code class="directive"><a href="../mod/mod_authz_host.html#all">all</a></code>, + <code class="directive"><a href="../mod/mod_authz_host.html#env">env</a></code>, + <code class="directive"><a href="../mod/mod_authz_host.html#host">host</a></code>, + <code class="directive"><a href="../mod/mod_authz_host.html#ip">ip</a></code> + を使うと、リクエストを送信してきているマシンのホスト名や IP アドレス + といった、ホストベースでのアクセス制御ができます。</p> + + <p>これらプロバイダの扱いは + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> や + <code class="directive"><a href="../mod/mod_authz_core.html#reject">Reject</a></code> で + 指定されます。これらのディレクティブは承認プロバイダを登録し、 + リクエスト処理の承認段階で呼び出されます。たとえば:</p> + + <div class="example"><p><code> + Require ip <var>address</var> + </code></p></div> + + <p>ここで、<var>address</var> は IP アドレス (あるいは IP アドレスの + 一部) か : </p> + + <div class="example"><p><code> + Require host <var>domain_name</var> + </code></p></div> + + <p>ここで <var>domain_name</var> は FQDN (あるいはドメイン名の一部) + で、必要であれば複数のアドレスやドメイン名を書くことができます。</p> + + <p>たとえば、スパムメッセージを送信してくる誰かを拒否したい場合、 + 次のようになります : </p> + + <div class="example"><p><code> + Reject ip 10.252.46.165 + </code></p></div> + + <p>このディレクティブが有効な範囲のコンテンツに対しては、 + そのアドレスからアクセスしてきても見ることができません。 + もしマシン名がわかっていて IP アドレスよりもそちらで + 指定したいのであれば、そのマシン名が使えます。</p> + + <div class="example"><p><code> + Reject host <var>host.example.com</var> + </code></p></div> + + <p>また、特定のドメインからのアクセス全てをブロックしたい場合は、 + IP アドレスの一部や、ドメイン名が指定できます :</p> + + <div class="example"><p><code> + <SatisfyAll><br /> + <span class="indent"> + Reject ip <var>192.168.205</var><br /> + Reject host <var>phishers.example.com</var> <var>moreidiots.example</var><br /> Reject host ke<br /> + </span> + </SatisfyAll> + </code></p></div> + + <p><code class="directive"><a href="../mod/mod_authz_host.html#reject">Reject</a></code> ディレクティブを + <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></a></code> ブロックの中で使うと、 + 許可したいグループにのみアクセスができるように確認できます。</p> + + <p>上記の例では <code class="directive"><a href="../mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></a></code> + を使って、アクセスに合格する前段階で、全ての + <code class="directive"><a href="../mod/mod_authz_host.html#reject">Reject</a></code> ディレクティブが + 満たされていることを確認しています。</p> + + + + <h3><a name="filesystem" id="filesystem">アクセス制御の後方互換性</a></h3> + <p>認証プロバイダベースの機構があるため、以前使用されていたディレクティブ + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> + は必要なくなりました。 + とはいうものの、古い設定ファイルでの後方互換性を提供するため、 + これらのディレクティブは <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> モジュールに移されました。</p> + + <p>これらのディレクティブの抱えていた問題のひとつに、承認の設定行とアクセス制御の設定行の + 関係がとてもあいまいだったことが挙げられます。 + <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> ディレクティブは + リクエスト処理中でそれ自身を呼び出すことによって、これらの 2 つの処理段階を結びつけようとします。 + 現在は、これらのディレクティブは <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> に移動し、 + 新しい認証ディレクティブと古いアクセス制御ディレクティブを混ぜて使うことは + 難しくなっています。この問題のため、<code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code> モジュールを + ロードすることがとても重要で、必須になっています。 + <code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code> モジュールの主な目的は、どの承認プロバイダで + 処理されなかった承認リクエストを受けることにあります。 + しかし、古いアクセス制御ディレクティブが用いられた場合には、 + アクセス制御と承認を結びつけて、すべての処理段階の出力結果を見てアクセスに合格するかを決めています。 + ですから、古いディレクティブがうまく動作しない場合は、 + <code class="module"><a href="../mod/mod_authz_default.html">mod_authz_default</a></code> がロードされていないからかもしれない、 + と疑ってみてください。</p> + + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">追加情報</a></h2> + <p>これら全てがどのように動作するかについて + もっと多くの情報が書かれている <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> と + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> + の文書も読むとよいでしょう。 + <code class="directive"><a href="../mod/mod_authn_core.html#<authnprovideralias>"><AuthnProviderAlias></a></code> + ディレクティブを使うと、特定の認証設定が簡単に書けるようになります。</p> + + <p><a href="access.html">アクセス制御</a>の方法も、 + 関連するトピックがたくさん記載されていますので、ご覧ください。</p> + +</div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html.ko.euc-kr b/docs/manual/howto/auth.html.ko.euc-kr new file mode 100644 index 0000000..a6013b8 --- /dev/null +++ b/docs/manual/howto/auth.html.ko.euc-kr @@ -0,0 +1,355 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>(Authentication), Ѻο(Authorization), +(Access Control) - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>(Authentication), Ѻο(Authorization), +(Access Control)</h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> + + <p>(authentication) ڽ ϴ + Ȯϴ ̴. Ѻο(authorization) + Ȥ ϴ ϴ ̴.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related"> þ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Ұ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">⺻ </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">⺻ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin"> 鿩</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems"> ִ </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#whatotherneatstuffcanido">ٸ Ѱ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation"> </a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related"> þ</a></h2> + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">Ұ</a></h2> + <p> Ʈ ִ Ҽ 鸸 ̰ų + ̵鸸 , ۿ ϴ Ͽ + ϴ ִ.</p> + + <p> Ʈ Ϻθ ȣϱ + ϴ "ǥ" ٷ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">⺻ </a></h2> + <p> ۿ ٷ þ ּ(Ϲ + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + )̳ 丮 (<code>.htaccess</code> ) + Ѵ.</p> + + <p><code>.htaccess</code> Ϸ Ͽ ִ + þ ϵ ؾ Ѵ. ̸ + 丮 Ͽ þ ִ ϴ + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> þ + Ѵ.</p> + + <p>⼭ ٷ , + <code>AllowOverride</code> þ ʿϴ.</p> + + <div class="example"><p><code> + AllowOverride AuthConfig + </code></p></div> + + <p>Ȥ þ ּϿ ´ٸ, Ͽ + ־ Ѵ.</p> + + <p> ȣ ִ ˱ 丮 + ˾ƾѴ. ʰ, + ڼ ̴.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">⺻ ϱ</a></h2> + <p> 丮 ȣ ȣϴ ⺻ + Ѵ.</p> + + <p> ȣ Ѵ. + ־ Ѵ. ٸ ȣ ٿε + ϰϱ ؼ. , + <code>/usr/local/apache/htdocs</code> ִٸ ȣ() + <code>/usr/local/apache/passwd</code> д.</p> + + <p>ġ Ե <a href="../programs/htpasswd.html">htpasswd</a> Ͽ + ȣ . α ġ ġ + <code>bin</code> 丮 ִ. + ԷѴ.</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords rbowen + </code></p></div> + + <p><code>htpasswd</code> ȣ , Ȯ + ȣ ٽ Է϶ ûѴ.</p> + + <div class="example"><p><code> + # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> + New password: mypassword<br /> + Re-type new password: mypassword<br /> + Adding password for user rbowen + </code></p></div> + + <p> <code>htpasswd</code> ο ٸ + ü θ Էؾ Ѵ. ϴ + <code>/usr/local/apache/bin/htpasswd</code> + ִ.</p> + + <p> ȣ ûϵ ϰ, + ˷ Ѵ. + <code>httpd.conf</code> ϰų <code>.htaccess</code> + Ͽ Ѵ. , + <code>/usr/local/apache/htdocs/secret</code> 丮 + ȣϷ, Ʒ þ + <code>/usr/local/apache/htdocs/secret/.htaccess</code> ̳ + <code>httpd.conf</code> <Directory + /usr/local/apache/apache/htdocs/secret> ǿ + Ѵ.</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "Restricted Files"<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + Require user rbowen + </code></p></div> + + <p>þ ϳ 캸. <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code> þ ڸ + Ѵ. Ϲ <code>Basic</code>, + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> Ѵ. Basic + ȣ ȣȭ ʰ . + Ƿ ڷḦ ȣϱ ϸ ȵȴ. + ġ <code>AuthType Digest</code> Ѵ. + <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> ϸ, ſ + ϴ. ֱ Ŭ̾Ʈ鸸 Digest Ѵٰ + Ѵ.</p> + + <p><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code> þ + <dfn>(realm)</dfn> Ѵ. + ΰ Ѵ. ù° Ŭ̾Ʈ + ȣ ȭâ ش. ι° Ͽ + Ŭ̾Ʈ Ư ȣ Ѵ.</p> + + <p> , ϴ Ŭ̾Ʈ <code>"Restricted Files"</code> + Ͽٸ, Ŭ̾Ʈ ڵ + <code>"Restricted Files"</code> ǥõ + ȣ õѴ. + ϸ ڰ ȣ Է ʾƵ ȴ. + Ȼ Ŭ̾Ʈ ȣƮ ٸ + ȣ .</p> + + <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + þ 츮 <code>htpasswd</code> ȣ + θ Ѵ. ڰ ٸ û Ź ڸ + ϱ Ϲ ˻ϴµ ð + ɸ ִ. ġ Ÿ̽ Ͽ + ִ. <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> þ + Ѵ. <a href="../programs/dbmmanage.html">dbmmanage</a> + α Ͽ ȣ ٷ. <a href="http://modules.apache.org/">ġ + Ÿ̽</a> ٸ ϴ ڰ + ִ.</p> + + <p> <code class="directive"><a href="../mod/core.html#require">Require</a></code> + þ Ư ִ ڸ Ͽ + Ѻο Ѵ. <code>require</code> þ + ϴ پ Ѵ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin"> 鿩</a></h2> + <p> þ 丮 (ڸ <code>rbowen</code>) + 鿩. κ 鿩 + ̴. <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> + .</p> + + <p> 鿩 ʹٸ 쿡 + ڵ ִ ˷ִ ʿϴ. + ſ Ͽ, ƹ γ ִ. ϳ + .</p> + + <div class="example"><p><code> + GroupName: rbowen dpitts sungo rshersey + </code></p></div> + + <p>׳ ̴.</p> + + <p> ȣϿ ڸ ߰Ϸ ԷѴ</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords dpitts + </code></p></div> + + <p> , ʰ Ͽ ڸ + ߰Ѵ. (<code>-c</code> ɼ ȣ ).</p> + + <p> <code>.htaccess</code> Ѵ.</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "By Invitation Only"<br /> + AuthUserFile /usr/local/apache/passwd/passwords<br /> + AuthGroupFile /usr/local/apache/passwd/groups<br /> + Require group GroupName + </code></p></div> + + <p> <code>GroupName</code> 쿡 ϸ + <code>password</code> Ͽ ִ ڰ ùٸ + ȣ Էϸ Ѵ.</p> + + <p> Ϲ ڸ 鿩 ٸ ִ. + ʿ þ ϱ⸸ ϸ ȴ.</p> + + <div class="example"><p><code> + Require valid-user + </code></p></div> + + <p><code>Require user rbowen</code> þ ϸ + ȣϿ ִ ùٸ ȣ Էϱ⸸ ϸ + Ѵ. 캰 ٸ ȣ Ͽ + ȿ ִ. ġ ΰ(ȣϰ + ) ƴ Ѱ(ȣ) ˻ϸ ȴٴ + ̴. ȣ ؾ ϰ, <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> þ + Ȯ ȣ ؾ ϴ ̴.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems"> ִ </a></h2> + <p>Basic û ڸ + ȣ ȮѴ. ħ + ( ȣ ȣϴ 丮 ִ ) ִ + ٽ ȮѴ. ϵ ӵ . + ȣ ڸ ã + ϱ ȣ ũⰡ Ŀ . + ۾ û Ѵ.</p> + + <p> ȣϿ ִ ڼ + Ѱ谡 ִ. Ѱ ϴ ɿ ٸ, + 鰳 Ѵ´ٸ ٰ ϰ ٸ + ؾ Ѵ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="whatotherneatstuffcanido" id="whatotherneatstuffcanido">ٸ Ѱ?</a></h2> + <p>ڸ ȣ ٰ ƴϴ. + ҿ ٸ ڸ 鿩 + ִ.</p> + + <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> + <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> þ + û ǻ ȣƮ Ȥ ȣƮ ּҸ + ϰų źѴ. <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> þ + þ Ͽ, ġ Ģ + ˸.</p> + + <p>̵ þ .</p> + + <div class="example"><p><code> + Allow from <var>address</var> + </code></p></div> + + <p>⼭ <var>address</var> IP ּ(Ȥ IP ּ Ϻ) + θ(Ȥ θ Ϻ)̴. Ѵٸ ּҳ + θ ִ.</p> + + <p> , Խǿ ø ִٸ + ִ.</p> + + <div class="example"><p><code> + Deny from 205.252.46.165 + </code></p></div> + + <p> ּҿ 湮ڴ þ ȣϴ + . IP ּ ǻ + ִ.</p> + + <div class="example"><p><code> + Deny from <var>host.example.com</var> + </code></p></div> + + <p>, ü ּҳ θ Ϻθ + Ѵ.</p> + + <div class="example"><p><code> + Deny from <var>192.101.205</var><br /> + Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br /> + Deny from ke + </code></p></div> + + <p><code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> + <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> þ + Ͽ ϴ ִ.</p> + + <div class="example"><p><code> + Order deny,allow<br /> + Deny from all<br /> + Allow from <var>dev.example.com</var> + </code></p></div> + + <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> + þ ϸ, ش ȣƮ ڸ ϰ ű + ߰ ϹǷ ϴ Ѵ. + Ư <em></em> ϱ Ѵ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation"> </a></h2> + <p><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> ϴ + ִ.</p> +</div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/auth.html.tr.utf8 b/docs/manual/howto/auth.html.tr.utf8 new file mode 100644 index 0000000..fda3281 --- /dev/null +++ b/docs/manual/howto/auth.html.tr.utf8 @@ -0,0 +1,639 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Kimlik Doğrulama ve Yetkilendirme - Apache HTTP Sunucusu Sürüm 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p> +<p class="apache">Apache HTTP Sunucusu Sürüm 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="../">Sürüm 2.4</a> > <a href="./">Nasıllar ve Öğreticiler</a></div><div id="page-content"><div id="preamble"><h1>Kimlik Doğrulama ve Yetkilendirme</h1> +<div class="toplang"> +<p><span>Mevcut Diller: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" title="Türkçe"> tr </a></p> +</div> + + <p>Kimlik Doğrulama istediğiniz kişileri teyid etme işlemidir. + Yetkilendirme ise kişilerin nereye gireceklerine ve hangi bilgiye + ulaşacaklarına müsaade edilmesi işlemidir.</p> + + <p>Genel erişim denetimi için <a href="access.html">Erişim Denetimi + Nasıl</a> belgesine bakınız.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">İlgili modüller ve Yönergeler</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Giriş</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Ön gereksinimler</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Çalışmaya Başlama</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Birden çok kişiye izin vermek</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Olası Sorunlar</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Diğer parola depolama yöntemleri</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Birden çok tedarikçi kullanmak</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Yetkilendirmenin biraz ötesi</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#socache">Kimlik Doğrulama Arabelleği</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Daha fazla bilgi</a></li> +</ul><h3>Ayrıca bakınız:</h3><ul class="seealso"><li><a href="#comments_section">Yorumlar</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">İlgili modüller ve Yönergeler</a></h2> + + <p>Kimlik Doğrulama ve yetkilendirme işlemi ile ilgili üç tür modül + vardır. Genellikle her bir gruptan en az bir modül seçeceksiniz.</p> + + <ul> + <li>Kimlik Doğrulama türü (bkz. <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> yönergesi) + <ul> + <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li> + <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li> + </ul> + </li> + + <li>Kimlik Doğrulayıcı (bkz. + <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> + ve <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> yönergeleri) + <ul> + <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code></li> + </ul> + </li> + <li>Yetkilendirme (bkz. + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> yönergesi) + <ul> + <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li> + <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li> + </ul> + </li> + </ul> + + <p>Bu modüllere ek olarak, <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> ve + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> modülleri bulunur. Bu modüller + yetkilendirme modüllerinin çekirdeğini oluşturan temel yönergeleri + gerçekler.</p> + + <p><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> modülü kimlik doğrulama ve + yetkilendirme işlemlerinin ikisini birden gerçekleştirir. + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> modülü bu işlemleri sunucu adına, IP + adresine ve isteğin karekteristiğine bağlı olarak gerçekleştirir. + Ancak kimlik doğrulama sisteminin bir parçası değildir. + <code>mod_access</code> ile geriye uyumluluk için + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> diye bir modül daha vardır.</p> + + <p>Muhtemelen göz atmak isteyeceğiniz <a href="access.html">Erişim + Denetimi</a> nasıl belgesi, sunucuya erişimlerin çeşitli yollarından + bahsetmektedir.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="introduction" id="introduction">Giriş</a></h2> + <p>Sitenizde sadece küçük bir grup insana hitap eden ya da hassas + bilgileriniz varsa, bu makaledeki teknikleri kullanarak dilediğiniz + kişilerin sadece dilediğiniz sayfaları görüntülemesini + sağlayabilirsiniz.</p> + + <p>Bu makale sitenizin bazı parçalarını korumak için kullanacağınız + "standart" yolları içermektedir.</p> + + <div class="note"><h3>Bilginize:</h3> + <p>Eğer bilgileriniz gerçekten gizliliğe ihtiyaç duyuyorsa kimlik + doğrulamasına ilaveten <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> modülünü de + kullanabilirsiniz.</p> + </div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="theprerequisites" id="theprerequisites">Ön gereksinimler</a></h2> + + <p>Bu makalede bahsi geçen yönergeler ya ana sunucu yapılandırma + dosyasında (genellikle <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> bölümünde) ya da dizin içi + yapılandırma dosyalarında (<code>.htaccess</code> dosyaları) + bulunmak zorundadır.</p> + + <p>Eğer <code>.htaccess</code> dosyalarını kullanmayı + tasarlıyorsanız, kimlik doğrulama yönergelerine bu dosyaların içine + koymaya izin veren sunucu yapılandırmasına ihtiyacınız olacaktır. + Bunun için, dizin içi yapılandırma dosyalarının içine hangi + yönergelerin konacağını belirleyen <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> yönergesi kullanılır.</p> + + <p>Kimlik doğrulamadan sözettiğimize göre, aşağıda gösterilen + şekilde bir <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> yönergesine ihtiyacınız olacaktır:</p> + + <pre class="prettyprint lang-config">AllowOverride AuthConfig</pre> + + + <p>Yönergeleri doğrudan ana sunucunun yapılandırma dosyasına + koyacaksanız bu dosyaya yazma izniniz olmalıdır.</p> + + <p>Bazı dosyaların nerede saklandığını bilmek için sunucunun dizin + yapısı hakkında biraz bilgi sahibi olmanız gerekmektedir. Bu çok da + zor olmamakla birlikte bu noktaya gelindiğinde konuyu + netleştireceğiz.</p> + + <p>Ayrıca <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> ve + <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code> modülleri ya <code>httpd</code> + çalıştırılabilirinin içinde derlenmiş olmalı ya da + <code>httpd.conf</code> yapılandırma dosyası ile yüklenmelidir. Bu + iki modül HTTP sunucusunda kimlik doğrulama ve yetkilendirme + kullanımı ve yapılandırması için büyük öneme sahip temel yönergeleri + ve işlevselliği sağlar.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="gettingitworking" id="gettingitworking">Çalışmaya Başlama</a></h2> + <p>Burada, sunucu üzerindeki bir dizini parolayla korumak için + gereken temel bilgiler verilecektir.</p> + + <p>İlk olarak bir parola dosyası oluşturmalısınız. Bunu nasıl + yapacağınız, özellikle, seçtiğiniz kimlik doğrulayıcıya göre + değişiklik gösterir. Bunun üzerinde ileride daha fazla duracağız. + Başlangıç için parolaları bir metin dosyasında tutacağız.</p> + + <p>Bu dosya belge kök dizini altında olmamalıdır. Böylece başkaları + parola dosyasını indiremezler. Örneğin belgeleriniz + <code>/usr/local/apache/htdocs</code> üzerinden sunuluyorsa parola + dosyanızı <code>/usr/local/apache/passwd</code> dizininde + tutabilirsiniz.</p> + + <p>Dosyayı oluşturmak için Apache ile gelen + <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> uygulamasını kullanacağız. Bu uygulama + Apache'nin kurulumunda belirtilen <code>bin</code> dizininde + bulunur. Eğer Apache'yi üçüncü parti paketlerden kurduysanız, + çalıştırılabilir dosyaların bulunduğu yollar üzerinde olmalıdır.</p> + + <p>Bir dosya oluşturmak için şunları yazın:</p> + + <div class="example"><p><code> + htpasswd -c /usr/local/apache/passwd/passwords umut + </code></p></div> + + <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> size parola soracaktır arkasından da + teyit etmek için parolayı tekrar girmenizi isteyecektir:</p> + + <div class="example"><p><code> + # htpasswd -c /usr/local/apache/passwd/passwords umut<br /> + New password: parolam<br /> + Re-type new password: parolam<br /> + Adding password for user umut + </code></p></div> + + <p>Eğer <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> normal yollar üzerinde değilse + çalıştırmak için dosyanın bulunduğu tam yeri belirtmeniz + gerekecektir. Dosyanın öntanımlı kurulum yeri: + <code>/usr/local/apache2/bin/htpasswd</code></p> + + <p>Bundan sonra, sunucuyu, parola sorması için ve kimlerin erişim + izni olacağını belirlemek için yapılandıracaksınız. Bu işlemi + <code>httpd.conf</code>dosyasını düzenleyerek ya da bir + <code>.htaccess</code> dosyası kullanarak yapabilirsiniz. Örneğin, + <code>/usr/local/apache/htdocs/secret</code> dizinini korumayı + amaçlıyorsanız, şu yönergeleri kullanabilirsiniz. Bu yönergeleri + <code>/usr/local/apache/htdocs/secret/.htaccess</code> dosyası içine + veya <code>httpd.conf</code> içindeki <Directory + "/usr/local/apache/htdocs/secret"> bölümüne koyabilirsiniz.</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Gizli Dosyalar" +# (Aşağıdaki satırın kullanımı isteğe bağlıdır) +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +Require user umut</pre> + + + <p>Bu yönergeleri tek tek inceleyelim. + <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> yönergesi + kullanıcının kimliğini doğrulamakta kullanılacak yöntemi seçer. En + çok kullanılan yöntem <code>Basic</code>'tir ve bu yöntem + <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> modülüyle gerçeklenmiştir. Temel + (<code>Basic</code>) kimlik doğrulamasıyla gönderilen parolanın + şifrelenmeyeceğini unutmayın. Bu yöntem, bu sebepten dolayı + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> eşliğinde kullanılmadığı sürece yüksek + hassasiyete sahip bilgiler için kullanılmamalıdır. Apache bir başka + kimlik doğrulama yöntemini daha destekler: <code>AuthType + Digest</code>. Bu yöntem <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> tarafından + gerçeklenmişti ve çok daha güvenli olacağı düşünülmüştü. Bu artık + geçerliliğini yitirdiğinden bağlantının bundan böyle + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ile şifrelenmesi gerekmektedir.</p> + + <p><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> yönergesi + ile kimlik doğrulamada kullanılacak <dfn>Saha</dfn> da + belirtilebilir. Saha kullanımının, başlıca iki işlevi vardır. + Birincisi, istemci sıklıkla bu bilgiyi kullanıcıya parola diyalog + kutusunun bir parçası olarak sunar. İkincisi, belirtilen kimlik + doğrulamalı alan için gönderilecek parolayı belirlerken istemci + tarafından kullanılır.</p> + + <p>Örneğin, bir istemcinin <code>"Gizli Dosyalar"</code> alanında + kimliği doğrulanmış olsun. Aynı sunucu üzerinde <code>"Gizli + Dosyalar"</code> Sahası olarak belirlenmiş alanlarda aynı parola + özdevinimli olarak yinelenecektir. Böylece parola bir kere girilerek + aynı Sahayı paylaşan çok sayıda kısıtlanmış alana ulaşırken oluşacak + gecikmeden kullanıcı korunmuş olur. Güvenlik gerekçelerinden dolayı, + her sunucu adı değiştirilişinde istemcinin parolayı yeniden sorması + gerekir.</p> + + <p><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> + yönergesinin öntanımlı değeri <code>file</code> olduğundan, bu + durumda, bu yönergenin kullanımı isteğe bağlıdır. Ancak, eğer kimlik + doğrulaması için <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ya da + <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> gibi farklı bir kaynak seçecekseniz + bu yönergeyi kullanmanız gerekecektir.</p> + + <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> + yönergesi <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> ile oluşturduğumuz parola + dosyasının yerini belirtmek için kullanılır. Eğer çok sayıda + kullanıcınız varsa her bir kullanıcıyı her kimlik doğrulama isteği + için kimlik bilgilerini bir metin dosyasında aramak gayet yavaş + olacaktır. Apache, kullanıcı bilgilerini hızlı bir veritabanı + dosyasında depolama özelliğine de sahiptir. Bu amaçla, + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> modülünün + <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> + yönergesi kullanılabilir. Bu dosyalar <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> ve + <code class="program"><a href="../programs/htdbm.html">htdbm</a></code> programı ile oluşturulabilir ve değiştirilebilir. + Üçüncü parti modüllerinde çok sayıda + başka kimlik doğrulama türü de vardır.</p> + + <p>Son olarak <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> + yönergesi, sunucunun bu bölgesine erişimine izin verilen + kullanıcıları ayarlama işleminin kimlik doğrulamasıyla ilgili + kısmını sağlar. Bir sonraki bölümde <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> yönergesini kullanmanın + çeşitli yoları üzerinde duracağız.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Birden çok kişiye izin vermek</a></h2> + + <p>Yukarıdaki yönergelerle bir dizinde sadece bir kişiye + (<code>umut</code> adlı kullanıcıya) izin verir. Çoğunlukla birden + çok kişiye izin verilmesi istenir. Bu durumda <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> yönergesi + devreye girer.</p> + + <p>Eğer birden çok kişiye izin vermek istiyorsanız içinde kullanıcı + isimlerinin olduğu bir grup dosyası oluşturmalısınız. Bu dosyanın + biçemi gayet basittir ve bunu herhangi bir metin düzenleyici ile + oluşturabilirsiniz. Bu dosyanın içeriği aşağıdaki gibi + görünecektir:</p> + + <div class="example"><p><code> + GroupName: umut samet engin kubilay + </code></p></div> + + <p>Dosya, sadece, boşluklarla birbirinden ayrılmış gurup üyelerinin + isimlerinden oluşan uzun bir liste içerir.</p> + + <p>Varolan parola dosyasına bir kullanıcı eklemek için şunu + yazın:</p> + + <div class="example"><p><code> + htpasswd /usr/local/apache/passwd/passwords birey + </code></p></div> + + <p>Evvelce almış olduğunuz yanıtı yine alacaksınız ama bu sefer yeni + bir dosya oluşturulmak yerine var olan bir dosyaya eklenecektir. + (Yeni bir parola dosyası oluşturmak için <code>-c</code> seçeneği + kullanılır).</p> + + <p>Şimdi, <code>.htaccess</code> dosyanızı veya + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> bölümünüzü + aşağıda görüldüğü şekilde değiştirebilirsiniz:</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Davete Binaen" +# Satır isteğe bağlıdır: +AuthBasicProvider file +AuthUserFile "/usr/local/apache/passwd/passwords" +AuthGroupFile "/usr/local/apache/passwd/groups" +Require group Grupismi</pre> + + + <p>Artık, <code>Grupismi</code> gurubunda listelenmiş ve + <code>password</code> dosyasında kaydı olan kişiye, parolayı doğru + yazdığı takdirde izin verilecektir.</p> + + <p>Çoklu kullanıcıya izin veren biraz daha az kullanılan başka bir + yol daha mevcuttur. Bir gurup dosyası oluşturmaktansa, şu yönergeyi + kullanabilirsiniz:</p> + + <pre class="prettyprint lang-config">Require valid-user</pre> + + + <p><code>Require user umut</code> satırı ile parola dosyasında + listelenmiş ve parolayı doğru olarak giren herhangi bir kişiye izin + vermektense, her grup için ayrı bir parola dosyası tutarak grup + davranışını taklit edebilirsiniz.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="possibleproblems" id="possibleproblems">Olası Sorunlar</a></h2> + <p>Temel kimlik doğrulama yolu belirtildiği için, sunucuya + yaptığınız her belge istediğinde kullanıcı adınızın ve parolanızın + doğrulanması gerekir. Hatta aynı sayfayı yeniden yüklerken ya da + sayfadaki her bir resim için bu yapılmalıdır (şayet korunmakta olan + bir dizinden geliyorsa). Bu işlem hızı azaltacaktır. Yavaşlama + miktarı parola dosyanızın büyüklüğü ile orantılı olacaktır, çünkü bu + işlem sırasında dosya açılacak ve kullanıcıların arasında isminiz + bulunana kadar liste aşağı doğru taranacaktır. Bu işlem sayfa her + yüklenişinde tekrar edilecektir.</p> + + <p>Buradan çıkacak sonuç, bir parola dosyasına konulan kullanıcı + sayısında bir üst sınır olması gerekliliğidir. Bu sınır sunucunuzun + başarımına bağlı olarak değişiklik gösterir. Bir kaç yüz kayıtın + üstünde giriş yaptığınızda hız düşüşünü gözlemlebilirsiniz İşte bu + anda kimlik doğrulama için başka bir yöntem aramaya başlarsınız.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="dbmdbd" id="dbmdbd">Diğer parola depolama yöntemleri</a></h2> + + <p>Parolaları basit bir metin dosyasında depolamak yukarıda + bahsedilen sorunlara yol açtığından parolaları başka bir yerde + depolamayı düşünebilirsiniz; örneğin bir veritabanında.</p> + + <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ve <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> + modülleri bunu mümkün kılan iki modüldür. Depolama yönemi olarak + <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> file</code> yerine, <code>dbm</code> + veya <code>dbd</code> kullanabilirsiniz.</p> + + <p>Bir metin dosyası yerine bir dbm dosyası kullanım örneği:</p> + + <pre class="prettyprint lang-config"><Directory "/www/docs/private"> + AuthName "Private" + AuthType Basic + AuthBasicProvider dbm + AuthDBMUserFile "/www/passwords/passwd.dbm" + Require valid-user +</Directory></pre> + + + <p>Başka seçenekler de mümkündür. Ayrınılar için + <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> belgesine başvurun.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="multprovider" id="multprovider">Birden çok tedarikçi kullanmak</a></h2> + + <p>Kimlik doğrulama ve yetkilendirme mimarisine dayalı yeni + tedarikçiyi kullanarak tek bir yetkilendirme ya da kimlik doğrulama + yöntemine kilitlenip kalmayacaksınız. Aslında birden çok tedarikçi + ihtiyacınıza cevap vermek için bir arada kullanılabilir. Aşağıdaki + örnekte dosya ve LDAP tabanlı kimlik doğrulama tedarikçileri bir + arada kullanılmıştır.</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>Bu örnekte dosya tedarikçisi, ilk olarak kullanıcının kimliğini + doğrulamaya teşebbüs edecektir. Kullanıcının kimliği + doğrulanamıyorsa LDAP tedarikçisi çağırılır. Eğer kurumunuz birden + çok kimlik doğrulama tedarikçisini yürürlüğe koyuyorsa bu, kimlik + doğrulama faaliyet alanının genişletilmesini sağlar. Diğer kimlik + kanıtlama ve yetkilendirme senaryoları tek bir kimlik doğrulaması + ile birden fazla yetkilendirme türüne izin verebilir.</p> + + <p>Çok sayıda kimlik doğrulama tedarikçisi uygulamaya konulabileceği + gibi, çok sayıda yetkilendirme yöntemi de kullanılabilir. Bu örnekte + dosya için hem dosyalı hem de LDAP grup kimlik doğrulaması + kullanılmıştır.</p> + + <pre class="prettyprint lang-config"><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></pre> + + + <p>Kimlik doğrulama konusunu biraz daha genişletirsek, <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> ve + <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> gibi yetkilendirme taşıyıcısı + yönergelerle hangi iznin hangi sırayla uygulanacağını + belirlenebilir. <a href="../mod/mod_authz_core.html#logic">Yetkilendirme Taşıyıcıları</a> bölümünde bunun bir uygulama + örneğini görebilirsiniz.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="beyond" id="beyond">Yetkilendirmenin biraz ötesi</a></h2> + <p>Tek bir veri deposundan yapılacak tek bir sınamadan çok daha + esnek kimlik doğrulaması yapılabilir. Sıralama, mantık ve hangi + kimlik doğrulamasının kullanılacağını seçmek mümkündür.</p> + + <h3><a name="authandororder" id="authandororder">Mantık ve sıralamanın uygulanması</a></h3> + + <p>Yetkilendirmenin hangi sırayla uygulanacağı ve nasıl + denetleneceği geçmişte biraz gizemli bir konuydu. Apache 2.2'de, + tedarikçi tabanlı kimlik doğrulamasının devreye girmesiyle asıl + kimlik doğrulama işlemini yetkilendirme ve destek işlevselliğinden + ayırmak mümkün oldu. Bunun faydalarından birisi de kimlik + doğrulama tedarikçilerinin yapılandırılabilmesi ve auth modülünün + kendi yükleme sırasından bağımsız olarak özel bir sırayla + çağrılabilmesidir. Bu tedarikçi tabanlı mekanizmanın aynısı + yetkilendirmeye de getirilmiştir. Bunun anlamı <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> yönergesinde hangi + izin yönteminin kullanılması gerektiğinin belirtmesinin yanında + hangi sırayla çağırılacaklarının da belirlenebildiğidir. Çok + sayıda yetkilendirme yöntemi kullanıldığında, bunlar, <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> yönergelerinin + yapılandırma dosyasında göründükleri sıra ile çağırılır.</p> + + <p><code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> ve <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> gibi yetkilendirme + taşıyıcısı yönergelerin devreye girmesiyle yetkilendirme + yöntemlerinin ne zaman çağırılacağı ve çağırıldığında ve erişime + izin verirken hangi kuralların uygulanacağı konusunda denetim + yapılandırmanın eline geçmektedir. Karmaşık yetkilendime mantığını + ifade etmek için kullanılan bir örneği görmek için + <a href="../mod/mod_authz_core.html#logic">Yetkilendirme + Taşıyıcıları</a> bölümüne bakınız.</p> + + <p>Öntanımlı olarak tüm <code class="directive"><a href="../mod/mod_authz_core.html#require"> + Require</a></code> yönergeleri, <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> + taşıyıcı yönergesinin içine konur. Başka bir deyişle eğer + belirtilen kimlik doğrulama yöntemlerinden herhangi biri başarılı + olursa yetkilendirme de sağlanmış olur.</p> + + + + <h3><a name="reqaccessctrl" id="reqaccessctrl">Erişim denetimi için yetkilendirme tedarikçilerinin + kullanımı</a></h3> + + <p>Kullanıcı adı ve parolasına göre kimlik doğrulama hikayenin + sadece bir bölümüdür. Sıklıkla insanlara kim olduklarına göre + değil birşeylere dayanarak izin vermek istersiniz. Örneğin nereden + geldikleri gibi.</p> + + <p><code>all</code>, <code>env</code>, <code>host</code> ve + <code>ip</code> gibi yetkilendirme tedarikçileri ile, bir belgenin + istendiği makinenin IP adresi veya konak ismi gibi bazı özelliklerine + dayalı olarak erişime izin verip vermeyeceğinizi belirtebilirsiniz.</p> + + <p>Bu tedarikçilerin kullanımı <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> yönergesinde açıklanmıştır. Bu yönergeler, + isteklerin işlenmesi sırasında yetkilendirme aşamasında + çağırılacak yetkilendirme tedarikçilerini kayda geçirir. Örneğin: + </p> + + <pre class="prettyprint lang-config">Require ip <var>adres</var> + </pre> + + + <p>Burada, <var>adres</var> bir IP adresidir (veya kısmi bir IP + addresidir)</p> + + <pre class="prettyprint lang-config">Require host <var>alan_adı</var> + </pre> + + + <p>Burada, <var>alan_adı</var> bir tam nitelikli alan adıdır + (ya da kısmi alan adıdır); gerekirse çok sayıda alan adı veya IP + adresi de belirtilebilir.</p> + + <p>Örneğin, yorum alanını gereksiz iletilerle dolduran birini uzak + tutmak istediğinizi varsayalım. Bu kişiyi uzak tutmak için şunları + yapabilirsiniz:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 10.252.46.165 +</RequireAll></pre> + + + <p>Bu adresden gelen ziyaretçiler bu yönergedeki içeriği + göremeyeceklerdir. Bunun yerine, elinizde IP adresi değil de + makine adı varsa şunu kullanabilirsiniz:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not host host.example.com +</RequireAll></pre> + + + <p>Eğer alan adının tamanıdan gelecek olan bütün erişimleri + engellemek isterseniz adresin ya da alan adının bir parçasını + belirtin:</p> + + <pre class="prettyprint lang-config"><RequireAll> + Require all granted + Require not ip 192.168.205 + Require not host phishers.example.com moreidiots.example + Require not host ke +</RequireAll></pre> + + + <p><code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> yönergesini çok sayıda + <code class="directive"><a href="../mod/mod_authz_core.html#require"><Require></a></code> yönergesi ile birlikte kullanarak, + sadece <code>not</code> ile olumsuzlanan tüm koşulları gerçekleyen + bağlantılara erişim verilir. Başka bir deyişle, olumsuzlanan koşulları + gerçeklemeyen bağlantıların erişimi engellenir.</p> + + + + <h3><a name="filesystem" id="filesystem">Erişim denetimi ve geriye uyumluluk</a></h3> + + <p>Kimlik doğrulama için tedarik tabanlı mekanizma kullanımının + yan etkilerinden birisi, + <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, + <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> ve + <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code> erişim + denetim yönergelerine artık ihtiyaç duyulmamasıdır. Ancak eski + yapılandırmalarla uyumluluğu sağlamak için bu yönergeler + <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> modülüne taşınmıştır.</p> + + <div class="warning"><h3>Note</h3> + <p><code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> ile sağlanan yönergelerin + kullanımı artık önerilmemekte, <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> + modülündeki yönergeler önerilmektedir. <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code> veya <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> ile + <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> gibi daha yeni + olanlarının yenilerle karışık kullanımı teknik olarak mümkünse de + önerilmemektedir. <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> modülü, 2.4 + yükseltmesini kolaylaştırmak için sadece eski yönergeleri içeren + yapılandırmaları desteklemek üzere oluşturulmuştur. Daha ayrıntılı + bilgi için <a href="../upgrading.html">yükseltme</a> belgesine bakınız. + </p> + </div> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="socache" id="socache">Kimlik Doğrulama Arabelleği</a></h2> + <p>Zaman zaman kimlik doğrulama ağınızda veya sağlayıcı(ları)nızda kabul + edilemez yükler oluşturur. Bu çoğunlukla <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> + (veya üçüncü parti/özel sağlayıcıların) kullanıcılarını etkiler. Bununla + ilgilenmek için httpd 2.3/2.4, kimlik bilgilerini arabelleklemek ve özgün + sağlayıcıların yüklerini azaltmak için yeni bir arabellekleme sağlayıcısı + olarak <code class="module"><a href="../mod/mod_authn_socache.html">mod_authn_socache</a></code> modülü ile gelmektedir.</p> + <p>Bu, bazı kullanıcılar için önemli bir başarım artışı sağlayabilir.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinformation" id="moreinformation">Daha fazla bilgi</a></h2> + <p>Daha fazla bilgi için <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> ve + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> modüllerinin belgelerine bakınız. + <code class="directive"><a href="../mod/mod_authn_core.html#authnprovideralias">AuthnProviderAlias</a></code> + yönergesi ile bazı yapılandırmalarınızı basitleştirebilirsiniz.</p> + + <p>Apache tarafından desteklenen şifrelerle ilgili bilgi için <a href="../misc/password_encryptions.html">Parola Biçemleri</a> + belgesine bakınız.</p> + + <p><a href="access.html">Erişim Denetimi</a> nasıl belgesinden de + bazı bilgiler edinebilirsiniz.</p> + </div></div> +<div class="bottomlang"> +<p><span>Mevcut Diller: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/auth.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/auth.html" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorumlar</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p> +<p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html b/docs/manual/howto/cgi.html new file mode 100644 index 0000000..81f1cfc --- /dev/null +++ b/docs/manual/howto/cgi.html @@ -0,0 +1,21 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: cgi.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: cgi.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR diff --git a/docs/manual/howto/cgi.html.en b/docs/manual/howto/cgi.html.en new file mode 100644 index 0000000..ef5d866 --- /dev/null +++ b/docs/manual/howto/cgi.html.en @@ -0,0 +1,601 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache Tutorial: Dynamic Content with CGI - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: Dynamic Content with CGI</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configuring Apache to permit CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Writing a CGI program</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">But it's still not working!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">What's going on behind the scenes?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI modules/libraries</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">For more information</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introduction</a></h2> + + + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>The CGI (Common Gateway Interface) defines a way for a web + server to interact with external content-generating programs, + which are often referred to as CGI programs or CGI scripts. It + is a simple way to put dynamic content on + your web site, using whatever programming language you're most + familiar with. This document will be an introduction to setting + up CGI on your Apache web server, and getting started writing + CGI programs.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configuring Apache to permit CGI</a></h2> + + + <p>In order to get your CGI programs to work properly, you'll + need to have Apache configured to permit CGI execution. There + are several ways to do this.</p> + + <div class="warning">Note: If Apache has been built with shared module + support you need to ensure that the module is loaded; in your + <code>httpd.conf</code> you need to make sure the + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + directive has not been commented out. A correctly configured directive + may look like this: + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + + On Windows, or using a non-threaded MPM like prefork, A correctly + configured directive may look like this: + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>The + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + + directive tells Apache that a particular directory is set + aside for CGI programs. Apache will assume that every file in + this directory is a CGI program, and will attempt to execute + it, when that particular resource is requested by a + client.</p> + + <p>The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + directive looks like:</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>The example shown is from your default <code>httpd.conf</code> + configuration file, if you installed Apache in the default + location. The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + directive is much like the <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> directive, which defines a URL prefix that + is to mapped to a particular directory. <code class="directive">Alias</code> + and <code class="directive">ScriptAlias</code> are usually used for + directories that are outside of the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directory. The difference between + <code class="directive">Alias</code> and <code class="directive">ScriptAlias</code> + is that <code class="directive">ScriptAlias</code> has the added meaning + that everything under that URL prefix will be considered a CGI + program. So, the example above tells Apache that any request for a + resource beginning with <code>/cgi-bin/</code> should be served from + the directory <code>/usr/local/apache2/cgi-bin/</code>, and should be + treated as a CGI program.</p> + + <p>For example, if the URL + <code>http://www.example.com/cgi-bin/test.pl</code> + is requested, Apache will attempt to execute the file + <code>/usr/local/apache2/cgi-bin/test.pl</code> + and return the output. Of course, the file will have to + exist, and be executable, and return output in a particular + way, or Apache will return an error message.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI outside of ScriptAlias directories</a></h3> + + + <p>CGI programs are often restricted to <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>'ed directories for security reasons. + In this way, administrators can tightly control who is allowed to + use CGI programs. However, if the proper security precautions are + taken, there is no reason why CGI programs cannot be run from + arbitrary directories. For example, you may wish to let users + have web content in their home directories with the + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive. + If they want to have their own CGI programs, but don't have access to + the main <code>cgi-bin</code> directory, they will need to be able to + run CGI programs elsewhere.</p> + + <p>There are two steps to allowing CGI execution in an arbitrary + directory. First, the <code>cgi-script</code> handler must be + activated using the <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> or <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> directive. Second, + <code>ExecCGI</code> must be specified in the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive.</p> + + + <h3><a name="options" id="options">Explicitly using Options to permit CGI execution</a></h3> + + + <p>You could explicitly use the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive, inside your main server configuration + file, to specify that CGI execution was permitted in a particular + directory:</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <p>The above directive tells Apache to permit the execution + of CGI files. You will also need to tell the server what + files are CGI files. The following <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive tells the server to treat all + files with the <code>cgi</code> or <code>pl</code> extension as CGI + programs:</p> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">.htaccess files</a></h3> + + + <p>The <a href="htaccess.html"><code>.htaccess</code> tutorial</a> + shows how to activate CGI programs if you do not have + access to <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">User Directories</a></h3> + + + <p>To allow CGI program execution for any file ending in + <code>.cgi</code> in users' directories, you can use the + following configuration.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>If you wish designate a <code>cgi-bin</code> subdirectory of + a user's directory where everything will be treated as a CGI + program, you can use the following.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Writing a CGI program</a></h2> + + + <p>There are two main differences between ``regular'' + programming, and CGI programming.</p> + + <p>First, all output from your CGI program must be preceded by + a <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> header. This is HTTP header that tells the client + what sort of content it is receiving. Most of the time, this + will look like:</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>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 + content.</p> + + <p>Apart from those two things, writing a CGI program will look + a lot like any other program that you might write.</p> + + <h3><a name="firstcgi" id="firstcgi">Your first CGI program</a></h3> + + + <p>The following is an example CGI program that prints one + line to your browser. Type in the following, save it to a + file called <code>first.pl</code>, and put it in your + <code>cgi-bin</code> directory.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hello, World.";</pre> + + + <p>Even if you are not familiar with Perl, you should be able + to see what is happening here. The first line tells Apache + (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 <code>/usr/bin/perl</code>. + 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.</p> + + <p>If you open your favorite browser and tell it to get the + address</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p>or wherever you put your file, you will see the one line + <code>Hello, World.</code> 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.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">But it's still not working!</a></h2> + + + <p>There are four basic things that you may see in your browser + when you try to access your CGI program from the web:</p> + + <dl> + <dt>The output of your CGI program</dt> + <dd>Great! That means everything worked fine. If the output is correct, + but the browser is not processing it correctly, make sure you have the + correct <code>Content-Type</code> set in your CGI program.</dd> + + <dt>The source code of your CGI program or a "POST Method Not + Allowed" message</dt> + <dd>That means that you have not properly configured Apache + to process your CGI program. Reread the section on + <a href="#configuring">configuring + Apache</a> and try to find what you missed.</dd> + + <dt>A message starting with "Forbidden"</dt> + <dd>That means that there is a permissions problem. Check the + <a href="#errorlogs">Apache error log</a> and the section below on + <a href="#permissions">file permissions</a>.</dd> + + <dt>A message saying "Internal Server Error"</dt> + <dd>If you check the + <a href="#errorlogs">Apache error log</a>, you will probably + find that it says "Premature end of + script headers", possibly along with an error message + generated by your CGI program. In this case, you will want to + check each of the below sections to see what might be + preventing your CGI program from emitting the proper HTTP + headers.</dd> + </dl> + + <h3><a name="permissions" id="permissions">File permissions</a></h3> + + + <p>Remember that the server does not run as you. That is, + when the server starts up, it is running with the permissions + of an unprivileged user - usually <code>nobody</code>, or + <code>www</code> - and so it will need extra permissions to + execute files that are owned by you. Usually, the way to give + a file sufficient permissions to be executed by <code>nobody</code> + is to give everyone execute permission on the file:</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>Also, if your program reads from, or writes to, any other + files, those files will need to have the correct permissions + to permit this.</p> + + + + <h3><a name="pathinformation" id="pathinformation">Path information and environment</a></h3> + + + <p>When you run a program from your command line, you have + certain information that is passed to the shell without you + thinking about it. For example, you have a <code>PATH</code>, + which tells the shell where it can look for files that you + reference.</p> + + <p>When a program runs through the web server as a CGI program, + it may not have the same <code>PATH</code>. Any programs that you + invoke in your CGI program (like <code>sendmail</code>, for + example) will need to be specified by a full path, so that the + shell can find them when it attempts to execute your CGI + program.</p> + + <p>A common manifestation of this is the path to the script + interpreter (often <code>perl</code>) indicated in the first + line of your CGI program, which will look something like:</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Make sure that this is in fact the path to the + interpreter.</p> + <div class="warning"> + When editing CGI scripts on Windows, end-of-line characters may be + appended to the interpreter path. Ensure that files are then + transferred to the server in ASCII mode. Failure to do so may + result in "Command not found" warnings from the OS, due to the + unrecognized end-of-line character being interpreted as a part of + the interpreter filename. + </div> + + + <h3><a name="missingenv" id="missingenv">Missing environment variables</a></h3> + + + <p>If your CGI program depends on non-standard <a href="#env">environment variables</a>, you will need to + assure that those variables are passed by Apache.</p> + + <p>When you miss HTTP headers from the environment, make + sure they are formatted according to + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, + section 4.2: Header names must start with a letter, + followed only by letters, numbers or hyphen. Any header + violating this rule will be dropped silently.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Program errors</a></h3> + + + <p>Most of the time when a CGI program fails, it's because of + a problem with the program itself. This is particularly true + once you get the hang of this CGI stuff, and no longer make + the above two mistakes. The first thing to do is to make + sure that your program runs from the command line before + testing it via the web server. For example, try:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(Do not call the <code>perl</code> interpreter. The shell + and Apache should find the interpreter using the <a href="#pathinformation">path information</a> on the first line of + the script.)</p> + + <p>The first thing you see written by your program should be + a set of HTTP headers, including the <code>Content-Type</code>, + followed by a blank line. If you see anything else, Apache will + return the <code>Premature end of script headers</code> error if + you try to run it through the server. See <a href="#writing">Writing a CGI program</a> above for more + details.</p> + + + <h3><a name="errorlogs" id="errorlogs">Error logs</a></h3> + + + <p>The error logs are your friend. Anything that goes wrong + generates message in the error log. You should always look + there first. If the place where you are hosting your web site + does not permit you access to the error log, you should + probably host your site somewhere else. Learn to read the + error logs, and you'll find that almost all of your problems + are quickly identified, and quickly solved.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>The <a href="../suexec.html">suexec</a> support program + allows CGI programs to be run under different user permissions, + depending on which virtual host or user home directory they are + located in. Suexec has very strict permission checking, and any + failure in that checking will result in your CGI programs + failing with <code>Premature end of script headers</code>.</p> + + <p>To check if you are using suexec, run <code>apachectl + -V</code> and check for the location of <code>SUEXEC_BIN</code>. + If Apache finds an <code class="program"><a href="../programs/suexec.html">suexec</a></code> binary there on startup, + suexec will be activated.</p> + + <p>Unless you fully understand suexec, you should not be using it. + To disable suexec, simply remove (or rename) the <code class="program"><a href="../programs/suexec.html">suexec</a></code> + binary pointed to by <code>SUEXEC_BIN</code> and then restart the + server. If, after reading about <a href="../suexec.html">suexec</a>, + you still wish to use it, then run <code>suexec -V</code> to find + the location of the suexec log file, and use that log file to + find what policy you are violating.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">What's going on behind the scenes?</a></h2> + + + <p>As you become more advanced in CGI programming, it will + become useful to understand more about what's happening behind + the scenes. Specifically, how the browser and server + communicate with one another. Because although it's all very + well to write a program that prints "Hello, World.", it's not + particularly useful.</p> + + <h3><a name="env" id="env">Environment variables</a></h3> + + + <p>Environment variables are values that float around you as + you use your computer. They are useful things like your path + (where the computer searches for the actual file + implementing a command when you type it), your username, your + terminal type, and so on. For a full list of your normal, + every day environment variables, type + <code>env</code> at a command prompt.</p> + + <p>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 + (Netscape, IE, Lynx), the server type (Apache, IIS, WebSite), + the name of the CGI program that is being run, and so on.</p> + + <p>These variables are available to the CGI programmer, and + are half of the story of the client-server communication. The + complete list of required variables is at + <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>This simple Perl CGI program will display all of the + environment variables that are being passed around. Two + similar programs are included in the + <code>cgi-bin</code> + + directory of the Apache distribution. Note that some + variables are required, while others are optional, so you may + see some variables listed that were not in the official list. + In addition, Apache provides many different ways for you to + <a href="../env.html">add your own environment variables</a> + to the basic ones provided by default.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN and STDOUT</a></h3> + + + <p>Other communication between the server and the client + happens over standard input (<code>STDIN</code>) and standard + output (<code>STDOUT</code>). In normal everyday context, + <code>STDIN</code> means the keyboard, or a file that a + program is given to act on, and <code>STDOUT</code> + usually means the console or screen.</p> + + <p>When you <code>POST</code> a web form to a CGI program, + the data in that form is bundled up into a special format + and gets delivered to your CGI program over <code>STDIN</code>. + The program then can process that data as though it was + coming in from the keyboard, or from a file</p> + + <p>The "special format" is very simple. A field name and + its value are joined together with an equals (=) sign, and + pairs of values are joined together with an ampersand + (&). Inconvenient characters like spaces, ampersands, and + equals signs, are converted into their hex equivalent so that + they don't gum up the works. The whole data string might look + something like:</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>You'll sometimes also see this type of string appended to + a URL. When that is done, the server puts that string + into the environment variable called + <code>QUERY_STRING</code>. That's called a <code>GET</code> + request. Your HTML form specifies whether a <code>GET</code> + or a <code>POST</code> is used to deliver the data, by setting the + <code>METHOD</code> attribute in the <code>FORM</code> tag.</p> + + <p>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.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI modules/libraries</a></h2> + + + <p>When you write CGI programs, you should consider using a + code library, or module, to do most of the grunt work for you. + This leads to fewer errors, and faster development.</p> + + <p>If you're writing CGI programs in Perl, modules are + available on <a href="http://www.cpan.org/">CPAN</a>. The most + popular module for this purpose is <code>CGI.pm</code>. You might + also consider <code>CGI::Lite</code>, which implements a minimal + set of functionality, which is all you need in most programs.</p> + + <p>If you're writing CGI programs in C, there are a variety of + options. One of these is the <code>CGIC</code> library, from + <a href="https://web.mit.edu/wwwdev/www/cgic.html">https://web.mit.edu/wwwdev/www/cgic.html</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinfo" id="moreinfo">For more information</a></h2> + + + <p>The current CGI specification is available in the + <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>When you post a question about a CGI problem that you're + having, whether to a mailing list, or to a newsgroup, make sure + you provide enough information about what happened, what you + expected to happen, and how what actually happened was + different, what server you're running, what language your CGI + program was in, and, if possible, the offending code. This will + make finding your problem much simpler.</p> + + <p>Note that questions about CGI problems should <strong>never</strong> + be posted to the Apache bug database unless you are sure you + have found a problem in the Apache source code.</p> + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.es b/docs/manual/howto/cgi.html.es new file mode 100644 index 0000000..bfaebd7 --- /dev/null +++ b/docs/manual/howto/cgi.html.es @@ -0,0 +1,619 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutorial de Apache: Contenido Dinámico con CGI - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial de Apache: Contenido Dinámico con CGI</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +<div class="outofdate">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.</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introducción</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurando Apache para permitir CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Escribiendo un programa CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¡Pero todavía no funciona!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">¿Qué ocurre entre bastidores?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Módulos/librerías CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Para más información</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introducción</a></h2> + + <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) es un método por el cual + un servidor web puede interactuar con programas externos de + generación de contenido, a ellos nos referimos comúnmente como + programas CGI o scripts CGI. Es el método más común y sencillo de + mostrar contenido dinámico en su sitio web. Este documento es una + introducción para configurar CGI en su servidor web Apache, y de + iniciación para escribir programas CGI.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurando Apache para permitir CGI</a></h2> + + + <p>Para conseguir que sus programas CGI funcionen correctamente, + deberá configurar Apache para que permita la ejecución de CGI. Hay + distintas formas de hacerlo.</p> + + <div class="warning">Nota: Si Apache ha sido compilado con soporte + de módulos compartidos, necesitará que el módulo de CGI esté cargado; + en su <code>httpd.conf</code> tiene que asegurarse de que la directiva + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + no ha sido comentada. Una directiva configurada correctamente sería así: + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + En Windows, o si usa un mpm que no es multihilo, como prefork, una + directiva configurada correctamente podría definirse así: + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + indica a Apache que un directorio se ha configurado específicamente + para programas CGI. Apache asumirá que cada fichero en este + directorio es un programa CGI, e intentará ejecutarlos cuando un + cliente solicita este recurso.</p> + + <p>La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se puede + definir así:</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>El ejemplo que se muestra es de un archivo de configuración + <code>httpd.conf</code> por defecto si usted instaló Apache + en la ubicación por defecto. La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> es muy + parecida a la directiva <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, + ésta define un prefijo de URL que se enlaza a un directorio + en particular. <code class="directive">Alias</code> y + <code class="directive">ScriptAlias</code> se usan generalmente para + directorios que se encuentran fuera del directorio + <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La diferencia + entre <code class="directive">Alias</code> y <code class="directive">ScriptAlias</code> + es que en <code class="directive">ScriptAlias</code> cualquier elemento + debajo de ese prefijo de URL será considerado un programa CGI. Así, + el ejemplo de más arriba le indica a Apache que + cualquier solicitud para un recurso que comience con + <code>/cgi-bin/</code> debería servirse desde el directorio + <code>/usr/local/apache2/cgi-bin/</code>, y debería tratarse como un + programa CGI.</p> + + <p>Por ejemplo, si se solicita la URL + <code>http://www.example.com/cgi-bin/test.pl</code>, + Apache intentará ejecutar el archivo + <code>/usr/local/apache2/cgi-bin/test.pl</code> y dar + el resultado. Por supuesto el archivo debe existir y ser ejecutable, + y dar el resultado de una manera específica o Apache devolverá + un mensaje de error.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI fuera de directorios ScriptAlias</a></h3> + + + <p>Los programas CGI habitualmente se restringen a los directorios de + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> por razones de + seguridad. De esta manera, los administradores pueden controlar de una + manera más segura quien puede ejecutar programas CGI. Aun así, si no + se toman suficientes precauciones, no hay ninguna razón por la que + programas CGI no se puedan ejecutar desde directorios seleccionados de + manera arbitraria. Por ejemplo, quizás quiera permitir que usuarios del + sistema tengan contenido web en sus directorios home con la directiva + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Si quieren + tener sus propios programas CGI, pero no tienen acceso al directorio + principal <code>cgi-bin</code>, necesitarán ser capaces de + ejecutar sus scripts CGI en algún otro sitio.</p> + + <p>Hay dos pasos a seguir para permitir la ejecución CGI en directorios + seleccionados de manera arbitraria. Primero, el handler + <code>cgi-script</code> debe estar activado usando la directiva + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> o la directiva + <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. Segundo, el parámetro + <code>ExecCGI</code> debe estar definido en la directiva + <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p> + + + <h3><a name="options" id="options">Usando Options de manera explícita para permitir ejecución de + CGI</a></h3> + + + <p>Puede usar la directiva + <code class="directive"><a href="../mod/core.html#options">Options</a></code>, en el archivo de + configuración principal para especificar que se permite la ejecución + de CGI en un directorio en particular:</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <p>Esta directiva de aquí arriba le indica a Apache que debe + permitir la ejecución de archivos CGI. También necesitará indicarle + al servidor que los archivos son archivos CGI. La directiva + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> le indica al + servidor que debe tratar a todos los archivos con la extensión + <code>cgi</code> o <code>pl</code> como programas CGI:</p> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">Ficheros .htaccess</a></h3> + + + <p>El <a href="htaccess.html">tutorial <code>.htaccess</code></a> + enseña como activar programas CGI si no tienes acceso a + <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">Directorios de Usuario</a></h3> + + + <p>Para permitir la ejecución de programas CGI para cualquier + archivo que acabe en <code>.cgi</code> en directorios de usuario, + puedes usar la siguiente configuración:</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>Si quiere designar un subdirectorio <code>cgi-bin</code> dentro + de un directorio de usuario en el que todos los ficheros serán + tratados como un programa CGI, puede usar lo siguiente:</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Escribiendo un programa CGI</a></h2> + + + <p>Hay dos diferencias principales entre programación ``regular'' y + programación en CGI.</p> + + <p>Primera, el resultado al completo de tu programa CGI debe estar + precedido de una cabecera <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">MIME-type</a>. Esta + cabecera HTTP le indica al cliente que tipo de contenido está + recibiendo. La mayor parte de las veces, ésto será algo como:</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>Segunda, el resultado debe estar en formato HTML, o cualquier + otro formato que su navegador sea capaz de mostrar. La mayor + parte de las veces, será HTML, pero otras escribirá un programa + CGI que devuelve una imagen gif, u otro contenido no-HTML.</p> + + <p>Aparte de estas dos cosas, escribir un programa en CGI se + parecerá bastante a cualquier otro programa que vaya a escribir. + </p> + + + <h3><a name="firstcgi" id="firstcgi">Su primer programa CGI</a></h3> + + + <p>A continuación podrá ver un ejemplo de programa CGI que muestra + una línea de texto en su navegador. Escriba lo siguiente, + guárdelo en un archivo con el nombre <code>first.pl</code>, y + póngalo en su directorio <code>cgi-bin</code>.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hola, Mundo.";</pre> + + + <p>Incluso si Perl no le resulta familiar, podrá ver lo que está + ocurriendo aquí. La primera línea le dice a Apache (o a + cualquier shell en la que se esté ejecutando) que este programa + puede ejecutarse con el intérprete en la ubicación + <code>/usr/bin/perl</code>. La segunda línea imprime la + declaración de Content-Type que mencionamos antes, seguida de + dos pares de retornos de carro. Esto pone una línea en blanco + después de la cabecera para indicar el final de las cabeceras + HTTP, y el comienzo del cuerpo del contenido. La tercera + imprime la cadena de caracteres "Hola, Mundo.". Y ese es el + final del programa.</p> + + <p>Si lo abre con su navegador favorito y le dice que solicite la + dirección</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p>o donde quiera que pusiera el archivo, verá una línea + <code>Hola, Mundo.</code> aparecerán la ventana del navegador. No es + muy emocionante, pero una vez que consiga que funcione podrá hacer + lo mismo con casi cualquier programa.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">¡Pero todavía no funciona!</a></h2> + + + <p>Hay 4 cosas básicas que puede llegar a ver en su navegador cuando + intenta acceder a un programa CGI desde la web:</p> + + <dl> + <dt>El resultado del programa CGI</dt> + <dd>¡Genial! Esto indica que todo funcionó correctamente. Si el + resultado es correcto, pero el navegador no lo procesa + correctamente, asegúrese de que tiene especificado + correctamente el <code>Content-Type</code> en su programa + CGI.</dd> + + <dt>El código fuente de su programa CGI o un mensaje del tipo + "POST Method Not Allowed".</dt> + + <dd>Eso significa que no ha configurado Apache de manera + apropiada para interpretar su programa CGI. Relea la sección + de <a href="#configuring">Configurando Apache</a> e intente + encontrar qué le falta.</dd> + + <dt>Un mensaje que empieza con "Forbidden"</dt> + <dd>Eso significa que hay un problema de permisos. Compruebe el + <a href="#errorlogs">Log de Errores de Apache</a> y la + sección de más abajo de <a href="#permissions">Permisos de + Fichero</a>.</dd> + + <dt>Un mensaje indicando "Internal Server Error"</dt> + <dd>Si comprueba el <a href="#errorlogs">Log de errores de + Apache</a>, probablemente encontrará que indica "Premature + end of script headers", posiblemente acompañado de otro + mensaje de error generado por su programa CGI. En este caso, + querrá comprobar cada una de las secciones de más adelante + para ver qué impide que su programa CGI genere las cabeceras + HTTP adecuadas.</dd> + </dl> + + <h3><a name="permissions" id="permissions">Permisos de Fichero</a></h3> + + + <p>Recuerde que el servidor no se ejecuta con su usuario. Es decir, + cuando el servidor arranca, está funcionando con un usuario sin + privilegios, generalmente el usuario <code>nobody</code>, o + <code>www-data</code>, así que necesitará permisos extra para + ejecutar los archivos de los que usted es dueño. Generalmente, + el método para dar permisos suficientes para que se pueda + ejecutar con <code>nobody</code> es dar permisos de ejecución a + todo el mundo en el fichero:</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>Además, si su programa lee desde o escribe a cualquier otro/s + archivo/s, esos archivos necesitarán tener los permisos correctos + para permitir esas acciones.</p> + + + + <h3><a name="pathinformation" id="pathinformation">Información de Ruta y Entorno</a></h3> + + + <p>Cuando ejecuta un programa desde la línea de comandos, usted tiene + cierta información que se le pasa a la shell sin que usted se + percate de ello. Por ejemplo, usted tiene un <code>PATH</code>, + que le indica a la shell dónde debe buscar archivos a los que usted + hace referencia.</p> + + <p>Cuando un programa se ejecuta a través del servidor web como un + programa CGI, puede que no tenga el mismo <code>PATH</code>. + Cualquier programa que invoque desde su programa CGI (como por + ejemplo <code>sendmail</code>) necesitará que se le indique la + ruta absoluta, así la shell puede encontrarlos cuando intenta + ejecutar su programa CGI.</p> + + <p>Una manifestación común de esto es la ruta del intérprete del + script (a menudo <code>perl</code>) indicado en la primera línea + de su programa CGI, que parecerá algo como:</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Asegúrese de que éste es de hecho el path de su intérprete.</p> + <div class="warning"> + Cuando edita scripts CGI en Windows, los caracteres de retorno de + carro podrían añadirse a la línea donde se especifica el intérprete. + Asegúrese de que los archivos se transfieren al servidor en modo + ASCII. Fallar en esto puede acabar con avisos del tipo "Command not + found" del Sistema Operativo, debido a que éste no reconoce los + caracteres de final de línea interpretados como parte del nombre + de fichero del intérprete. + </div> + + + <h3><a name="missingenv" id="missingenv">Faltan Variables de Entorno</a></h3> + + + <p>Si su programa CGI depende de <a href="#env">variables de entorno</a> no estándar, necesitará + asegurarse de que Apache pasa esas variables.</p> + + <p>Cuando no encuentra ciertas cabeceras HTTP del entorno, asegúrese + de que están formateadas según el + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, + sección 4.2: Nombres de Cabeceras deben empezar con una letra, + seguida solo de letras, números o guión. Cualquier cabecera + que no cumpla esta regla será ignorada de manera silenciosa.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Errores de Programa</a></h3> + + + <p>La mayor parte de las veces cuando un programa CGI falla, es por un + problema en el programa mismo. Esto ocurre generalmente cuando se + maneja bien con "esto del CGI", y ya no comete los dos errores + mencionados más arriba. Lo primero que hay que hacer es asegurarse + de que su programa se ejecuta correctamente en línea de comandos + antes de probarlo a través del servidor web. Por ejemplo, + intente:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(No llame al intérprete de <code>perl</code>. La consola y Apache + tienen que poder encontrar el intérprete usando línea + <a href="#pathinformation">línea de información</a> en la primera + línea del script.)</p> + + <p>Lo primero que debe ver escrito por su programa es un conjunto de + cabeceras HTTP, incluyendo el <code>Content-Type</code>, + seguido de una línea en blanco. Si ve alguna otra cosa, Apache + devolverá el error <code>Premature end of script headers</code> si + intenta lanzar el script en el servidor web. Vea + <a href="#writing">Escribiendo un programa CGI</a> más arriba para + más detalle.</p> + + + <h3><a name="errorlogs" id="errorlogs">Log de Errores</a></h3> + + + <p>El log de errores es su amigo. Cualquier cosa que vaya mal generará + un mensaje en el log de errores. Debería mirar siempre ahí primero. + Si el lugar donde está alojando su sitio web no permite que acceda + al log de errores, probablemente debería alojarlo en otro sitio. + Aprenda a leer el log de errores y se dará cuenta de que enseguida + averiguará el motivo del error y lo solucionará rápidamente.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>El programa de soporte <a href="../suexec.html">suexec</a> permite + que programas CGI se ejecuten con permisos de usuario distintos, + dependiendo del virtualhost o el directorio home donde se + encuentren. Suexec tiene una comprobación de permisos muy estricta, + y cualquier fallo en esa comprobación dará como resultado un error + con el mensaje <code>Premature end of script headers</code>.</p> + + <p>Para comprobar si está usando Suexec, ejecute + <code>apachectl -V</code> y compruebe la ubicación de + <code>SUEXEC_BIN</code>. Si Apache encuentra un binario + <code class="program"><a href="../programs/suexec.html">suexec</a></code> al arrancar, suexec se activará.</p> + + <p>A menos que comprenda suxec perfectamente, no debería usarlo. + Para desactivar suexec, basta con eliminar el binario + <code class="program"><a href="../programs/suexec.html">suexec</a></code> al que apunta <code>SUEXEC_BIN</code> y + reiniciar el servidor. Si después de leer sobre + <a href="../suexec.html">suexec</a> todavía quiere usarlo, entonces + ejecute <code>suexec -V</code> para encontrar la ubicación del + fichero log de suexec, y use ese log para encontrar que política no + está cumpliendo.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">¿Qué ocurre entre bastidores?</a></h2> + + + <p>En cuanto tenga conocimiento avanzado de programación CGI, le será + útil comprender más de lo que ocurre entre bastidores. + Específicamente, cómo el navegador y el servidor se comunican el uno + con el otro. Porque aunque esté muy bien escribir un programa que + diga "Hola, Mundo.", no tiene una gran utilidad.</p> + + <h3><a name="env" id="env">Variables de Entorno</a></h3> + + + <p>Las variables de entorno son valores que están ahí cuando + usa el ordenador. Son cosas útiles como el path (donde su ordenador + busca el archivo específico que se lanza cuando usted escribe un + comando), su nombre de usuario, el tipo de terminal que usa, etc. + Para una lista completa de la variables de entorno normales que se + se usan en su día a día escriba <code>env</code> en la línea de + comandos.</p> + + <p>Durante la transacción CGI, el servidor y el navegador también + configuran variables de entorno, y así pueden comunicarse entre + ellos. Cosas como el tipo de navegador (Netscape, IE, Lynx), el tipo + de servidor (Apache, IIS, WebSite), el nombre del programa CGI que + se está ejecutando, etc.</p> + + <p>Estas variables están disponibles para el programador de CGI, y son + la mitad de la historia de la comunicación cliente-servidor. La + lista completa de las variables necesarias se encuentra en + <a href="http://www.ietf.org/rfc/rfc3875">el RFC de Common Gateway + Interface</a>.</p> + + <p>Este sencillo programa CGI en Perl mostrará todas las variables + de entorno que se están pasando entre el cliente y el navegador. Dos + programas similares están incluidos en el directorio + <code>cgi-bin</code> de la distribución de Apache. Tenga en cuenta + que algunas variables son necesarias mientras que otras son + opcionales, así que es posible que vea algunas variables que no + están en la lista oficial. Adicionalmente, Apache aporta distintas + maneras diferentes para que pueda + <a href="../env.html">añadir sus variables de entorno</a> a las + básicas que se proveen por defecto.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; + +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN y STDOUT</a></h3> + + + <p>Otra comunicación entre el servidor y el cliente ocurre en la + entrada estándar (<code>STDIN</code>) y la salida estándar + (<code>STDOUT</code>). En el contexto normal de cada día, + <code>STDIN</code> es la entrada con el teclado, o un fichero que se + le da a un programa para que actúe sobre él, y <code>STDOUT</code> + generalmente es la consola o la pantalla.</p> + + <p>Cuando hace <code>POST</code> con un formulario de web a un programa + CGI, los datos en ese formulario se empaquetan en un formato especial + que se entrega a su programa CGI en el <code>STDIN</code>. + Entonces el programa puede procesar la información como si le llegara + desde el teclado, o desde un fichero.</p> + + <p>El "formato especial" es muy sencillo. Un nombre de campo y su + valor se asocian juntos con el signo igual (=), y pares de valores + se asocian juntos con el ampersand ó et en español (&). + Caracteres inconvenientes como los espacios, ampersands y signos de + igual, se convierten en su equivalente hexadecimal para no impidan + el funcionamiento correcto del programa. La cadena de datos al + completo será algo como:</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>A veces tendrá este tipo de cadena de caracteres al final de una + URL. Cuando esto ocurre, el servidor pone esa cadena en una variable + de entorno que se llama <code>QUERY_STRING</code>. Esto se llama + solicitud <code>GET</code>. Su formulario HTML especifica si se usa + un <code>GET</code> o un <code>POST</code> para entregar la + información, configurando el atributo <code>METHOD</code> en la + etiqueta <code>FORM</code>.</p> + + <p>Su programa es el responsable de convertir esa cadena de + caracteres en información útil. Afortunadamente, hay librerías y + módulos disponibles que ayudan a procesar la información, así como a + gestionar los distintos aspectos de su programa CGI.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">Módulos/librerías CGI</a></h2> + + + <p>Cuando escribe programas CGI, debería considerar usar una librería de + código, o módulo, para hacer todo el trabajo más arduo por usted. + Esto lleva a tener menos errores y un desarrollo de código más + rápido.</p> + + <p>Si está escribiendo un programa CGI en Perl, existen módulos + disponibles en <a href="http://www.cpan.org/">CPAN</a>. El módulo más + conocido para este propósito es <code>CGI.pm</code>. Quizás quiera + considerar <code>CGI::Lite</code>, que implementa una funcionalidad + mínima, que es todo lo que se necesita en la mayoría de los programas.</p> + + <p>Si está escribiendo programas CGI en C, hay varidad de opciones. Una + de estas es la librería <code>CGIC</code>, de + <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>. + </p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinfo" id="moreinfo">Para más información</a></h2> + + + <p>La especificación actual de CGI está disponible en el + <a href="http://www.ietf.org/rfc/rfc3875">RFC de Common Gateway + Interface</a>.</p> + + <p>Cuando envíe una pregunta sobre un problema de CGI, o bien a una + lista de correo, o a un grupo de noticias, asegúrese de que facilita suficiente + información de lo que ha ocurrido, de lo que espera que ocurra, y de + lo que está ocurriendo en su lugar que es diferente, el servidor que + está ejecutando, en qué lenguaje CGI está hecho su programa, y si es + posible, el código que falla. Esto hará encontrar el problema mucho más + fácil.</p> + + <p>Tenga en cuenta que las preguntas sobre problemas CGI + <strong>nunca</strong> deberían enviarse a la base de datos de bugs de + bugs de Apache a menos que esté seguro de haber encontrado un + problema en el código fuente de Apache.</p> + </div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.fr.utf8 b/docs/manual/howto/cgi.html.fr.utf8 new file mode 100644 index 0000000..8ce0d77 --- /dev/null +++ b/docs/manual/howto/cgi.html.fr.utf8 @@ -0,0 +1,643 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introduction</a></h2> + + + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) définit une méthode d'interaction + entre un serveur web et des programmes générateurs de contenu + externes, plus souvent appelés programmes CGI ou scripts CGI. + Il s'agit d'une méthode simple pour ajouter du contenu dynamique à votre site + web en utilisant votre langage de programmation préféré. + Ce document est une introduction à la configuration de CGI sur votre + serveur web Apache, et une initiation à l'écriture de programmes + CGI.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2> + + + <p>Apache 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.</p> + + <div class="warning">Note: si Apache 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 directive <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante n'a pas été + commentée dans votre <code>httpd.conf</code>. Une directive correcte + doit ressembler à ceci : + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + + Sous Windows, ou si l'on utilise un module MPM non-threadé comme prefork, + une directive correctement configurée sera du style : + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un + répertoire particulier est dédié aux programmes CGI. Apache + considérera que tout fichier situé dans ce répertoire est un + programme CGI, et tentera de l'exécuter lorsque cette ressource + fera l'objet d'une requête client.</p> + + <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit + :</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>Cet exemple est tiré de votre fichier de configuration + <code>httpd.conf</code> par défaut, si vous avez installé Apache + dans son répertoire par défaut. La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> est similaire à la + directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui + définit à quel répertoire particulier doit correspondre un préfixe + d'URL. <code class="directive">Alias</code> et + <code class="directive">ScriptAlias</code> sont généralement utilisés pour + accéder à des répertoires situés en dehors du répertoire défini + par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre + <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code> + réside dans le fait que <code class="directive">ScriptAlias</code> indique + en plus que tout ce qui se trouve sous le préfixe d'URL doit être + considéré comme un programme CGI. Ainsi, l'exemple ci-dessus + indique à Apache que toute requête pour une ressource commençant + par <code>/cgi-bin/</code> doit être servie depuis le répertoire + <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en + tant que programme CGI.</p> + + <p>Par exemple, si une requête pour l'URL + <code>http://www.example.com/cgi-bin/test.pl</code> est + effectuée, Apache tentera d'exécuter le fichier + <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la + sortie. Bien entendu, le fichier doit exister, être exécutable, et + retourner sa sortie d'une manière particulière, sinon Apache + renverra un message d'erreur.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3> + + + <p>Pour des raisons de sécurité, la localisation des programmes + CGI est souvent restreinte aux + répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs + peuvent contrôler précisément qui est autorisé à utiliser les + programmes CGI. Cependant, si les précautions adéquates quant à + la sécurité sont prises, il n'y a aucune raison pour que les + programmes CGI ne puissent pas être exécutés depuis d'autres + répertoires. Par exemple, vous pouvez autoriser les utilisateurs à + enregistrer des contenus web dans leurs répertoires home à l'aide + de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en + oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation + d'accès au répertoire <code>cgi-bin</code> principal, ils devront + être en mesure d'exécuter ces programmes depuis un autre + répertoire.</p> + + <p>L'autorisation d'exécution des programmes CGI dans un + répertoire arbitraire se fait en deux étapes. En premier lieu, le + gestionnaire <code>cgi-script</code> doit être activé à l'aide + d'une directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. En second lieu, + <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p> + + + <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution + des programmes CGI</a></h3> + + + <p>Vous pouvez utiliser de manière explicite la directive + <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de + configuration de votre serveur principal, pour indiquer que + l'exécution des programmes CGI est permise depuis un répertoire + particulier :</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <p>La directive ci-dessus indique à Apache qu'il doit permettre + l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur + quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au + serveur qu'il doit traiter tous les fichiers possédant une + extension <code>cgi</code> ou <code>pl</code> en tant que + programmes CGI :</p> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3> + + + <p>Le <a href="htaccess.html"><code>tutoriel + .htaccess</code></a> montre comment activer les programmes + CGI si vous n'avez pas accès au + fichier <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3> + + + <p>Pour permettre l'exécution en tant que programme CGI de tout + fichier possédant l'extension <code>.cgi</code> et situé dans un + répertoire utilisateur, vous pouvez utiliser la configuration + suivante :</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un + répertoire utilisateur où tout fichier sera traité en tant que + programme CGI, vous pouvez utiliser ceci :</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2> + + + <p>Il y a deux différences principales entre la programmation + "standard" et la programmation CGI.</p> + + <p>En premier lieu, toute sortie de votre programme CGI doit être + précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="voir glossaire">MIME-type</a>. Il s'agit d'un + en-tête HTTP qui indique au client quel type de contenu il reçoit. + La plupart du temps, il se présente comme suit :</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>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 + autre type de contenu non-HTML.</p> + + <p>A part ces deux différences, un programme CGI ressemblera à tout + autre programme que vous pourriez être amené à écrire.</p> + + <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3> + + + <p>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é + <code>premier.pl</code>, et placez le dans votre répertoire + <code>cgi-bin</code>.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hello, World.";</pre> + + + <p>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 à Apache (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 + <code>/usr/bin/perl</code>. 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.</p> + + <p>Si vous ouvrez votre navigateur favori et lui indiquez + l'adresse</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/premier.pl + </code></p></div> + + <p>ou toute autre URL correspondant à votre programme CGI, Vous + verrez la ligne <code>Bonjour tout le monde . . .</code> + s'afficher dans la fenêtre de votre navigateur. Ce n'est pas + extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes + chances d'y parvenir pour tout autre programme plus + sophistiqué.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2> + + + <p>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 :</p> + + <dl> + <dt>Le flux de sortie de votre programme CGI</dt> + <dd>Impeccable ! Cela signifie que tout fonctionne correctement. + Si la sortie est correcte mais n'est pas traitée correctement par + le navigateur, assurez-vous d'avoir défini + <code>Content-Type</code> de manière appropriée dans votre + programme CGI.</dd> + + <dt>Le code source de votre programme CGI ou un message "POST + Method Not Allowed"</dt> + <dd>Cela signifie que vous n'avez pas configuré Apache de manière + à ce qu'il puisse traiter votre programme CGI. Relisez la section + sur la <a href="#configuring">configuration d'Apache</a>, et + essayez de trouver votre erreur.</dd> + + <dt>Un message commençant par "Forbidden"</dt> + <dd>Ce type de message est révélateur d'un problème de + droits. Consultez le <a href="#errorlogs">journal des erreurs + d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd> + + <dt>Un message contenant "Internal Server Error"</dt> + <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs + d'Apache</a>, vous y trouverez probablement des messages du type + "Premature end of script headers" (Fin prématurée des en-têtes de + script), éventuellement accompagnés d'un message d'erreur généré + par votre programme CGI. Dans ce cas, il va vous falloir lire + chacune des sections ci-dessous pour déterminer ce qui empêche + votre programme CGI de générer les en-têtes appropriés.</dd> + </dl> + + <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3> + + + <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom. + En d'autres termes, lorsque le serveur a démarré, il s'exécute + avec les droits d'un utilisateur non privilégié - en général + <code>nobody</code>, ou <code>www</code> - et en conséquence, il + aura besoin de droits supplémentaires pour pouvoir exécuter des + fichiers dont vous êtes le propriétaire. En général, pour qu'un + fichier ait des droits suffisants pour être exécutable par + <code>nobody</code>, il suffit de lui attribuer des droits + d'exécution pour tout le monde :</p> + + <div class="example"><p><code> + chmod a+x premier.pl + </code></p></div> + + <p>En outre, si votre programme doit pouvoir accéder en lecture + et/ou écriture à d'autres fichiers, ces derniers devront avoir les + droits appropriés.</p> + + + + <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables + d'environnement</a></h3> + + + <p>Lorsque vous lancez un programme depuis la ligne de commande, + certaines informations sont passées au shell sans que vous vous en + doutiez. Par exemple, la variable <code>PATH</code> indique au + shell où il doit rechercher les exécutables auxquels vous faites + référence.</p> + + <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que + programme CGI, sa variable <code>PATH</code> n'aura peut-être pas + la même valeur. Tout programme que vous invoquez dans votre + programme CGI ( comme par exemple <code>sendmail</code>) devra + être spécifié par son chemin complet, de façon à ce que le shell + puisse le trouver lorsqu'il tentera d'exécuter votre programme + CGI.</p> + + <p>Un exemple typique de spécification de programme est le chemin + vers l'interpréteur de script (souvent <code>perl</code>) que l'on + trouve à la première ligne de votre programme CGI et qui va + ressembler à ceci :</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Assurez-vous qu'il s'agit bien du chemin correct vers + l'interpréteur.</p> + + <div class="warning"> + Lors de l'édition de scripts CGI sous Windows, il se peut que des + caractères de fin de ligne soient ajoutés au chemin de + l'interpréteur. Assurez-vous donc que les fichiers sont bien + transmis au serveur en mode ASCII. Dans le cas contraire, l'OS + pourra envoyer des avertissements "Command not found" à cause des + caractères de fin de ligne non reconnus car considérés comme + faisant partie du nom de fichier de l'interpréteur. + </div> + + + + <h3><a name="missingenv" id="missingenv">Variables d'environnement manquantes</a></h3> + + + <p>Si votre programme CGI dépend de <a href="#env">variables + d'environnement</a> non standards, vous devrez vous assurez que + ces variables lui sont bien transmises par Apache.</p> + + <p>Lorsque des en-têtes HTTP ne sont pas transmis à + l'environnement, assurez-vous qu'ils sont bien formatés selon la + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, section + 4.2 : les noms d'en-têtes doivent commencer par une lettre, + elle-même suivie de lettres, chiffres ou traits d'union. Tout + en-tête dont le nom viole cette règle sera ignoré.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3> + + + <p>La plupart des échecs dans l'exécution d'un programme CGI + proviennent du programme lui-même. Ceci est particulièrement vrai + lorsque ce satané programme CGI se bloque, alors que vous avez + appris à ne plus commettre les deux erreurs précédentes. La + première chose à faire est de vous assurer que votre programme + s'exécute depuis la ligne de commande, avant de le tester à partir + du serveur web. Par exemple, essayez :</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./premier.pl + </code></p></div> + + <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et + Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur + la première ligne du script.)</p> + + <p>La première chose que vous devriez voir affichée par votre + programme est un ensemble d'en-têtes HTTP, comprenant entre autres + le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous + voyez quoi que ce soit d'autre, Apache renverra l'erreur + <code>Premature end of script headers</code> si vous tentez + d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour + plus de détails.</p> + + + <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3> + + + <p>Les journaux d'erreurs sont vos amis. Toute anomalie de + fonctionnement est consignée dans le journal des erreurs et c'est + ici que vous devez regarder en premier en cas de problème. Si + l'hébergeur de votre site ne vous donne pas accès au journal des + erreurs, vous avez tout intérêt à vous tourner vers quelqu'un + d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous + vous apercevrez que la plupart des problèmes seront rapidement + identifiés . . . et résolus.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>Le programme <a href="../suexec.html">suexec</a> permet + d'exécuter les programmes CGI avec des droits différents selon le + serveur virtuel ou le répertoire utilisateur dans lequel ils + se situent. Suexec effectue une vérification des droits très + stricte, et toute anomalie détectée au cours de cette vérification + entraînera un echec d'exécution de votre programme CGI avec + affichage de l'erreur <code>Premature end of script + headers</code>.</p> + + <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande + <code>apachectl -V</code>, et regardez le chemin indiqué par + <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier + trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin, + suexec sera activé.</p> + + <p>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 <code class="program"><a href="../programs/suexec.html">suexec</a></code> + pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si + après une lecture de <a href="../suexec.html">suexec</a>, vous + décidez quand-même de l'utiliser, tapez la commande <code>suexec + -V</code> pour voir où se situe le journal de suexec, et utilisez + ce dernier pour déterminer quelles règles vous violez + éventuellement.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2> + + + <p>Lorsque vos compétences en programmation CGI seront plus + poussées, il s'avérera intéressant pour vous de mieux comprendre ce + qui se passe en coulisse, et en particulier la manière dont le + navigateur et le serveur dialoguent entre eux. En effet, bien qu'il + soit tout à fait louable d'écrire un programme qui affiche "Bonjour + tout le monde . . .", cela ne sert pas à grand chose.</p> + + <h3><a name="env" id="env">Variables d'environnement</a></h3> + + + <p>Les variables d'environnement sont des valeurs qui gravitent + autour de vous lorsque vous utilisez votre ordinateur. Elles sont + très utiles, à l'instar de votre chemin par défaut (où votre + ordinateur va rechercher le fichier physique correspondant à la + commande que vous avez tapée), votre nom d'utilisateur, le type de + votre terminal, etc... Pour obtenir une liste complète des + variables d'environnement standards que vous utilisez tous les + jours, tapez <code>env</code> dans votre interpréteur + de commandes.</p> + + <p>Au cours de la transaction CGI, le serveur et le navigateur + définissent aussi des variables d'environnement, de façon à ce + qu'ils puissent communiquer entre eux. Ces variables définissent + entre autre le type de navigateur (Netscape, IE, Lynx), le type de + serveur (Apache, IIS, WebSite), le nom du programme CGI en cours + d'exécution, etc...</p> + + <p>Ces variables sont à la disposition du programmeur CGI, et + elles constituent 50% de la communication client-serveur. La liste + complète des variables requises se trouve à + <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>Ce programme CGI basique en Perl permet d'afficher toutes les + variables d'environnement qui sont échangées. Deux programmes + similaires sont fournis avec la distribution d'Apache et situés + dans le répertoire <code>cgi-bin</code>. + Notez que certaines variables sont + obligatoires, alors que d'autres sont optionnelles, si bien que + vous verrez s'afficher certaines variables qui ne font pas partie + de la liste officielle. De plus, Apache vous propose de nombreuses + méthodes pour <a href="../env.html">ajouter vos propres + variables d'environnement</a> aux variables de base fournies par + défaut.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3> + + + <p>L'entrée standard (<code>STDIN</code>) et la sortie standard + (<code>STDOUT</code>) constituent d'autres voies de communication + entre le client et le serveur. Dans un contexte normal, + <code>STDIN</code> correspond au clavier, ou à un fichier fourni + au programme à des fins de traitement, et <code>STDOUT</code> à la + console ou à l'écran.</p> + + <p>Lorsque vous transmettez un formulaire web à un programme CGI + par la méthode <code>POST</code>, les données de ce formulaire + sont transcrites dans un format spécial et transmises à votre + programme CGI via <code>STDIN</code>. Le programme peut alors les + traiter comme si elles provenaient du clavier ou d'un + fichier.</p> + + <p>Ce "format spécial" est très simple. Un nom de champ et sa + valeur sont reliés entre eux par un signe "égal" (=), et chacune + de ces paires nom champ/valeur est séparée de la suivante par un + "et" commercial (&). Les caractères + spéciaux comme les espaces, les "et" commerciaux, et les signes + "égal" sont convertis en leur équivalent hexadécimal pour éviter + qu'ils ne gâchent le travail. La chaîne contenant les données doit + ressembler à ceci :</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>Vous verrez aussi parfois une chaîne de ce type accolée à une + URL. Dans ce cas, le serveur enregistre cette chaîne dans la + variable d'environnement appelée <code>QUERY_STRING</code>. On a + alors affaire à une requête de type <code>GET</code>. Votre + formulaire HTML indique laquelle des méthodes <code>GET</code> ou + <code>POST</code> est utilisée pour transmettre les données, en + définissant l'attribut <code>METHOD</code> au niveau de la balise + <code>FORM</code>.</p> + + <p>Votre programme est ensuite chargé d'extraire les informations + utiles de cette chaîne. Heureusement, des bibliothèques et des + modules sont à votre disposition pour vous aider à traiter ces + données, et à gérer les différents aspects de votre programme + CGI.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2> + + + <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser + une bibliothèque de code, ou un module, qui effectueront une grande + partie du travail de base pour vous. Ceci vous permettra de diminuer + le nombre d'erreurs et d'accélérer le développement.</p> + + <p>Si vous écrivez des programmes CGI en Perl, des modules sont à + votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce + sujet, le module le plus populaire est <code>CGI.pm</code>. Vous + pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les + fonctionnalités strictement nécessaires, mais suffisantes pour + la majorité des programmes.</p> + + <p>Si vous écrivez des programmes CGI en C, vous disposez de nombreuses + options. L'une d'elles est la bibliothèque <code>CGIC</code> de <a href="https://web.mit.edu/wwwdev/www/cgic.html">https://web.mit.edu/wwwdev/www/cgic.html</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2> + + + <p>La spécification CGI actuelle est disponible dans la <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>Lorsque vous postez une question à propos d'un problème CGI que + vous rencontrez, que ce soit dans une liste de diffusion ou dans un + newsgroup, faites en sorte de fournir suffisamment d'informations + sur le problème rencontré, ce que vous attendiez exactement, et en + quoi ce qui se produit est réellement différent de ce que vous + attendiez, quel serveur vous utilisez, en quel langage votre + programme CGI a été écrit, et, si possible, son code source. Ceci + permettra une résolution plus aisée de votre problème.</p> + + <p>Notez que les questions à propos de problèmes CGI ne doivent + <strong>jamais</strong> être postées dans la base de données de + bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un + problème dans le code source d'Apache.</p> + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.ja.utf8 b/docs/manual/howto/cgi.html.ja.utf8 new file mode 100644 index 0000000..476ac83 --- /dev/null +++ b/docs/manual/howto/cgi.html.ja.utf8 @@ -0,0 +1,593 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI による動的コンテンツ</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">はじめに</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI を許可するように Apache を設定する</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI プログラムを書く</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">しかし、まだ動かない !</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">裏で何が起こっているのか?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI モジュール/ライブラリ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">更なる情報</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">はじめに</a></h2> + + + <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) は、ウェブサーバが + コンテンツ生成をする外部プログラムと協調して動作するための方法を + 定義しています。そのプログラムはしばしば CGI プログラムや + CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な + コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、 + Apache ウェブサーバで CGI を設定し、 + CGI プログラムを書き始めるための入門書となるでしょう。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">CGI を許可するように Apache を設定する</a></h2> + + + <p>CGI プログラムを正しく動作させるには、CGI を許可するように + Apache の設定を行う必要があります。 + これを行なうための方法がいくつかあります。</p> + + <div class="warning"> + 注: Apache が共有モジュール機能着きでビルドされている場合、 + モジュールがロードされていることを確認してください。 + つまり <code>httpd.conf</code> で + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + がコメントアウトされていないことを確認してください。 + 正常に設定されていれば次のようになるはずです: + + <div class="example"><p><code> + LoadModule cgi_module modules/mod_cgi.so + </code></p></div></div> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブを使用して、 + CGI プログラム用の特別な別ディレクトリを Apache に設定します。 + Apache は、このディレクトリ中の全てのファイルを CGI + プログラムであると仮定します。 + そして、この特別なリソースがクライアントから要求されると、 + そのプログラムの実行を試みます。</p> + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブは以下のように使用します:</p> + + <div class="example"><p><code> + ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ + </code></p></div> + + <p>デフォルト位置に Apache をインストールしたならば、 + この例はデフォルト状態の <code>httpd.conf</code> + 設定ファイルに含まれています。 + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブは、URL の前に付加するディレクトリを定義する + <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> + ディレクティブとかなり似ています。 + <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code> + は通常、<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> + ディレクトリ外のディレクトリのために使用されます。 + <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code> + との差は、<code class="directive">ScriptAlias</code> が接頭辞で始まるすべての + URL は CGI プログラムとみなされるという追加の意味を含んでいることです。 + 従って、上記の例では、<code>/cgi-bin/</code> + で始まるリソースへのあらゆるリクエストに対して、ディレクトリ + <code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを + CGI プログラムとして扱うよう Apache に示します。</p> + + <p>例えば、URL <code>http://www.example.com/cgi-bin/test.pl</code> + が要求された場合、Apache は ファイル + <code>/usr/local/apache2/cgi-bin/test.pl</code> + を実行し、その出力を返すことを試みます。 + もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。 + そうでなければ、Apache はエラーメッセージを返します。</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ディレクトリ外の CGI</a></h3> + + + <p>CGI プログラムは、セキュリティ上の理由から + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + されたディレクトリに制限されることがしばしばあります。この方法により、 + CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。 + しかしながら、適切なセキュリティ事前対策がとられるならば、CGI + プログラムを任意のディレクトリで実行できないようにする理由はありません。 + 例えば、ユーザに <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。 + もし、彼らが CGI プログラムを持つことを望んでいても、メインの + <code>cgi-bin</code> ディレクトリへのアクセスができない場合、 + CGI プログラムを実行することができる他の場所が必要になります。</p> + + <p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。 + まず、<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> や <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> ディレクティブによって + <code>cgi-script</code> ハンドラが可能になっている必要があります。 + 次に、<code class="directive"><a href="../mod/core.html#options">Options</a></code> ディレクティブで + <code>ExecCGI</code> が指定されていなければなりません。</p> + + + <h3><a name="options" id="options">CGI の実行を可能にするために Options を明示的に使用する</a></h3> + + + <p>サーバのメインの設定ファイル中で <code class="directive"><a href="../mod/core.html#options">Options</a></code> + ディレクティブを明示的に使用することで、特定のディレクトリ配下で + CGI の実行を許可するように指定することができます:</p> + + <div class="example"><p><code> + <Directory /usr/local/apache2/htdocs/somedir><br /> + <span class="indent"> + Options +ExecCGI<br /> + </span> + </Directory> + </code></p></div> + + <p>上記ディレクティブは、CGI ファイルの実行を可能にするよう + Apache に伝えます。また、どのファイルが CGI ファイルかを + サーバに伝える必要があります。次の + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> + ディレクティブの例では、<code>cgi</code> または <code>pl</code> + を拡張子に持つすべてのファイルを CGI + プログラムとしてみなすことをサーバに伝えます:</p> + + <div class="example"><p><code> + AddHandler cgi-script .cgi .pl + </code></p></div> + + + <h3><a name="htaccess" id="htaccess">.htaccess ファイル</a></h3> + + + <p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a> + は <code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを + 使えるようにするかを説明しています。</p> + + + <h3><a name="userdir" id="userdir">User ディレクトリ</a></h3> + + + <p><code>.cgi</code> で終わるすべてのファイルに対して CGI プログラムの + 実行を許可するには、以下の設定を使用できます。</p> + + <div class="example"><p><code> + <Directory /home/*/public_html><br /> + <span class="indent"> + Options +ExecCGI<br /> + AddHandler cgi-script .cgi<br /> + </span> + </Directory> + </code></p></div> + + <p>ユーザディレクトリの <code>cgi-bin</code> サブディレクトリの + すべてのファイルを CGI プログラムとして指定したい場合には + 以下のようなものを使います。</p> + + <div class="example"><p><code> + <Directory /home/*/public_html/cgi-bin><br /> + <span class="indent"> + Options ExecCGI<br /> + SetHandler cgi-script<br /> + </span> + </Directory> + </code></p></div> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">CGI プログラムを書く</a></h2> + + + <p>「通常の」プログラミングと CGI + プログラミングの間には主に二つの違いがあります。</p> + + <p>一つは、CGI プログラムのすべての出力には<a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a> + ヘッダを付けなければなりません。 + これはどのような種類のコンテンツを受け取っているかをクライアントに示す + HTTP ヘッダです。ほとんどの場合では、次のように出力します:</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>もう一つは、出力を HTML + か、ブラウザが表示することができる何か他の形式にする必要があります。 + 大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML + コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p> + + <p>これら二点以外では、CGI プログラムを書くことは、 + あなたが書いている他のプログラムとよく似ているでしょう。</p> + + <h3><a name="firstcgi" id="firstcgi">最初の CGI プログラム</a></h3> + + + <p>次に示すのは、ブラウザに 1 行印字する CGI + プログラムの例です。以下を入力し、<code>first.pl</code> + というファイルに保存し、それを <code>cgi-bin</code> + ディレクトリに置いてください。</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + print "Hello, World."; + </code></p></div> + + <p>Perl に精通していなくても、 + 何が起こるかを理解することはできるでしょう。1 行目は、 + <code>/usr/bin/perl</code> で見つけられるインタプリタに + このファイルを供給することでこのプログラムが実行されることを + Apache に (シェル上で実行しようとしているならば、そのシェルに ) + 示します。2 行目は、前述したとおり content-type の定義を印字します。 + これには復帰改行の二つの組を後に付加します。 + これにより、ヘッダの終りに空行が置かれ、HTTP + ヘッダの終りとボディの始まりを示します。3 行目は、"Hello, World." + という文字列を印字し、これで終りとなります。</p> + + <p>好みのブラウザを開き、アドレス</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p>あるいはファイルを置いたロケーションを指定すると、 + <code>Hello, World.</code> + という 1 行がブラウザウィンドに現れるでしょう。 + それはあまりエキサイティングなことではありません。 + しかし、これがうまく動けば、 + 他のどのようなものでも動かすことができるようになります。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">しかし、まだ動かない !</a></h2> + + + <p>ウェブから CGI プログラムへのアクセスを行なったとき、 + ブラウザで見る可能性がある四つの基本的なことがあります:</p> + + <dl> + <dt>CGI プログラムの出力</dt> + <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。 + 出力が正常だけれども、ブラウザが正常に処理してくれない場合は、 + 正しい <code>Content-Type</code> を CGI プログラム内で + セットしたかを確認してください。</dd> + + <dt>CGI プログラムのソースコード、または "POST Method Not Allowed" + というメッセージ</dt> + <dd>これは、CGI プログラムを処理できるよう Apache + を適切に設定していなかったことを意味します。<a href="#configuring">「CGI を許可するように + Apache を設定する」</a>の章を読み直し、 + あなたが何を間違えたかを探してみてください。 + </dd> + + <dt>メッセージが "Forbidden" で始まっている</dt> + <dd>これはパーミッションの問題ということを意味します。 + <a href="#errorlogs">Apache のエラーログ</a>と、後述の<a href="#permissions">「ファイルのパーミッション」</a> + の章をチェックしてください。 + </dd> + + <dt>"Internal Server Error" というメッセージ</dt> + <dd><a href="#errorlogs">Apache + のエラーログ</a>をチェックすると、"Premature end of script headers" + というログが記録されていると思います。そして、おそらく CGI + プログラムによって生成されたエラーメッセージも記録されているでしょう。 + この場合、CGI プログラムが適切な + HTTP ヘッダを出力できない原因を知るために、 + 以下の各章でチェックしてみてください。</dd> + </dl> + + <h3><a name="permissions" id="permissions">ファイルのパーミッション</a></h3> + + + <p>サーバはあなたの権限で実行されていないのを忘れないように。 + つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code> + や <code>www</code> の権限で実行されます。したがって、あなたが所有する + ファイルを実行するには別のパーミッションが必要となります。 + 通常、<code>nobody</code> が実行するのに十分なパーミッションを与える方法は、 + ファイルに誰でも実行可能とするパーミッションを与えることです:</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、 + それらのファイルは、これが可能となる正しいパーミッション + を持っている必要があります。</p> + + + + <h3><a name="pathinformation" id="pathinformation">パス情報と環境</a></h3> + + + <p>コマンドラインからプログラムを実行するとき、 + 意識しなくてもシェルに渡される情報があります。 + 例えば、参照するファイルのためにどこを検索したらよいかを + シェルに伝える <code>PATH</code> があります。</p> + + <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、 + それは同じ <code>PATH</code> ではないかもしれません。 + CGI プログラム内で呼び出すあらゆるプログラム + (例えば、<code>sendmail</code> のようなもの) は、 + フルパスで指定する必要があるでしょう。それにより、CGI + プログラムを実行しようとしたとき、 + シェルはそのようなプログラムを見つけることができます。</p> + + <p>同様なことは、スクリプトのインタプリタ (しばしば <code>perl</code>) + へのパスで、CGI プログラムの 1 行目に次のように示されます:</p> + + <div class="example"><p><code> + #!/usr/bin/perl + </code></p></div> + + <p>これがインタープリタへの実際のパスであることを確認しておきます。</p> + + + <p>また、CGI プログラムが他の<a href="#env">環境変数</a>に依存している場合は、その環境変数が + Apache から渡されるようにする必要があります。</p> + + <h3><a name="syntaxerrors" id="syntaxerrors">プログラムエラー</a></h3> + + + <p>CGI + プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。 + 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、 + まず間違いなくそうでしょう。ブラウザを使ってテストする前に + まず確認することは、コマンドラインからプログラムが実行できることです。 + 例えば、以下を実行してみてください:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(<code>perl</code> インタプリタは呼ばないでください。 + シェルと Apache がスクリプトの最初の行の <a href="#pathinformation">パス情報</a> を使って見つけます。)</p> + + <p>最初にプログラムから出力されるのは <code>Content-Type</code> を含み、 + 後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている + 場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには + <code>Premature end of script headers</code> エラーを出力します。詳細は + 上記の <a href="#writing">CGI プログラムを書く</a> を読んでください。</p> + + + <h3><a name="errorlogs" id="errorlogs">エラーログ</a></h3> + + + <p>エラーログは友達です。 + 全てのうまくいかないことは、エラーログにメッセージを生成します。 + 必ずそれを最初に見るべきです。 + もし、あなたがウェブサイトを主催している場所が + エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。 + エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、 + 迅速に解決されるということが分かるでしょう。</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p><a href="../suexec.html">suexec</a> サポートプログラムは + バーチャルホストやユーザのホームディレクトリの場所に依って + CGI プログラムを違うユーザ権限の下で走らせることを可能にします。 + Suexec の権限のチェックは非常に厳しく、それを満たさない場合は + CGI プログラムが <code>Premature end of script headers</code> エラーで + 実行されません。</p> + + <p>suexec を使っているかどうかを調べためには <code>apachectl + -V</code> を実行して、<code>SUEXEC_BIN</code> の場所を調べてください。 + Apache がそこに <code class="program"><a href="../programs/suexec.html">suexec</a></code> のバイナリを発見した場合は、suexec が + 使用されます。</p> + + <p>suexec を完全に理解していない限り、使うべきではありません。 + suexec を無効にするには、<code>SUEXEC_BIN</code> から指されている + <code class="program"><a href="../programs/suexec.html">suexec</a></code> バイナリを削除 (か名前を変更) するだけです。 + <a href="../suexec.html">suexec</a> を読んだ後で、まだそれを + 使いたいのであれば、<code>suexec -V</code> を実行して suexec の + ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を + 見つけてください。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">裏で何が起こっているのか?</a></h2> + + + <p>CGI プログラミングに習熟すると、 + 裏で起こっていることについて更に理解することの役に立ちます。 + ブラウザとサーバがどのように相互通信するかについては特にそうです。 + なぜなら、"Hello, World." + を印字するプログラムを書くことはおおいに結構ですが、 + それは特に有益ではありません。</p> + + <h3><a name="env" id="env">環境変数</a></h3> + + + <p>環境変数は、 + あなたがコンピュータを使うときに辺りに存在している値です。 + それらは、パス + (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、 + ユーザ名、端末型などのような便利なものです。 + 通常、普段使用している環境変数の完全なリストを調べるには、 + コマンドプロンプトで <code>env</code> を入力します。</p> + + <p>CGI の処理中、サーバとブラウザも環境変数を設定し、 + それにより相互に通信することができるようになります。 + その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ + (Apache, IIS, WebSite)、実行されている CGI + プログラムの名前などです。</p> + + <p>これらの変数は CGI プログラマが使用できます。 + そして、それはクライアントとサーバの通信の話の半分です。 + 必要な変数の完全なリストは <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> にあります。</p> + + <p>以下の単純な Perl CGI + プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、 + Apache ディストリビューションの <code>cgi-bin</code> + ディレクトリに二つ含まれています。 + いくつかの変数が必須であり、いくつかは任意であることに注意してください。 + そして、公式のリストにはないいくつかの変数が表示されているかもしれません。 + さらに、Apache はデフォルトで用意されている基本的なものに + <a href="../env.html">あなた自身の環境変数を加える</a>ための、 + 多くの異なる方法を用意してします。</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + foreach $key (keys %ENV) {<br /> + <span class="indent"> + print "$key --> $ENV{$key}<br>";<br /> + </span> + } + </code></p></div> + + + <h3><a name="stdin" id="stdin">STDIN と STDOUT</a></h3> + + + <p>サーバとクライアント間のもう一つの通信は、標準入力 + (<code>STDIN</code>)と標準出力 (<code>STDOUT</code>) + を通じて行なわれます。通常の文脈において、<code>STDIN</code> + はキーボードやプログラムが動作するために与えられるファイルを意味し、 + <code>STDOUT</code> は通常コンソールまたはスクリーンを意味します。</p> + + <p>ウェブフォームから CGI プログラムへ<code>POST</code> + したとき、フォームのデータは特別なフォーマットで束ねられ、 + <code>STDIN</code> を通して、CGI プログラムに引き渡されます。 + プログラムはデータがキーボード + もしくはファイルから来ていたかのように処理することができます。</p> + + <p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール + (=) で結ばれます。そして値の組はアンパサンド (&) で結ばれます。 + スペース、アンパサンド、イコールのような面倒な文字は、 + それらが動作を駄目にしないようにその文字に相当する 16 進に変換されます。 + 全データ文字列は、以下のようになります: + </p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>時々、このような文字列が URL + に付加されるのを見るでしょう。その場合、サーバは + <code>QUERY_STRING</code> という環境変数にその文字列を入れます。それは + <code>GET</code> リクエストと呼ばれます。 + HTML フォームでは、データを渡すために <code>GET</code> と + <code>POST</code> のどちらを使用するかを、<code>FORM</code> タグの + <code>METHOD</code> 属性の設定で指定します。</p> + + <p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。 + 幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。 + これらは、CGI プログラムの他の面でも同様に役に立ちます。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI モジュール/ライブラリ</a></h2> + + + <p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる + コードライブラリまたはモジュールを使うことを検討すべきです。 + これはエラーを減らし、早い開発につながります。</p> + + <p>Perl で CGI プログラムを書いているなら、モジュールは <a href="http://www.cpan.org/">CPAN</a> で提供されています。 + この目的のための最も普及しているモジュールは <code>CGI.pm</code> です。 + <code>CGI::Lite</code> も検討しましょう。これは、ほとんどのプログラム + において必要とするすべての機能の最小セットの実装です。</p> + + <p>C で CGI プログラムを書いているなら、いろいろな + オプションがあります。これらの内の一つは <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a> + で提供されている <code>CGIC</code> ライブラリです。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinfo" id="moreinfo">更なる情報</a></h2> + + + <p>CGI に関する情報はウェブで数多く提供されています。CGI + の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> で、 + 他のユーザと論議することができます。HTML Writers Guide の + -servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。 + <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a> + で更に多くを探し出すことができます。</p> + + <p>そしてもちろん、おそらく CGI + プログラムの動作に関する詳細の全てが記述されている + CGI の仕様を読むべきです。オリジナルバージョンを + <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> + で、アップデートされたドラフトを + <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC + プロジェクト</a>で参照することができます。</p> + + <p>CGI の問題について、加わっているメーリングリストまたはニュース + グループに質問を送るとき、起こったもの、起こってほしいこと、 + 実際に起こったことがどう違うか、使用しているサーバ、 + CGI プログラムを記述している言語に関する十分な情報と、 + 可能であれば問題のコードを提供するようにしてください。 + そうすることで、問題がより間単に見つかるようになります。</p> + + <p>Apache のソースコードにおいて問題を発見したことを確信していない限り、 + CGI の問題に関する質問を Apache + バグデータベースに<strong>送るべきでない</strong> + ことに注目してください。</p> + </div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.ko.euc-kr b/docs/manual/howto/cgi.html.ko.euc-kr new file mode 100644 index 0000000..13f1372 --- /dev/null +++ b/docs/manual/howto/cgi.html.ko.euc-kr @@ -0,0 +1,533 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ġ 丮: CGI - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ġ 丮: CGI </h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" title="Korean"> ko </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Ұ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI ϵ ġ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI α ۼϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot"> ʾƿ!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">ڿ °?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI /̺귯</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo"> ...</a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Ұ</a></h2> + + + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) CGI α + Ȥ CGI ũƮ θ, ( ) ܺ + α ϴ Ѵ. Ʈ + ϰ ̴. ġ + CGI ϴ Ұϰ, CGI α + ۼغ.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">CGI ϵ ġ ϱ</a></h2> + + + <p>CGI α ùٷ Ϸ CGI ϵ + ġ ؾ Ѵ. ϴ .</p> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + þ ϸ ġ Ư 丮 CGI α + д. ġ 丮 ִ CGI + α̶ Ͽ Ŭ̾Ʈ ڿ ûϸ ڿ + Ϸ õѴ.</p> + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + þ Ѵ.</p> + + <div class="example"><p><code> + ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ + </code></p></div> + + <p> ġ ⺻ ҿ ġ + <code>httpd.conf</code> Ͽ ִ ̴. <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> þ <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> þ URL + պκ Ư 丮 Ѵ. + <code class="directive">Alias</code> + <code class="directive">ScriptAlias</code> <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> 丮 ۿ ִ + 丮 Ѵ. <code class="directive">Alias</code> + <code class="directive">ScriptAlias</code> + <code class="directive">ScriptAlias</code> ߰ URL պκ + ϴ CGI α ϴ ̴. + ġ <code>/cgi-bin/</code> + ϴ ڿ ûϸ + <code>/usr/local/apache2/cgi-bin/</code> 丮 + ãƼ CGI α ó϶ ˸.</p> + + <p> , URL + <code>http://www.example.com/cgi-bin/test.pl</code> + ûϸ ġ + <code>/usr/local/apache2/cgi-bin/test.pl</code> + Ͽ ȯѴ. ϰ డϸ + ε ؾ Ѵ. ġ + .</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias 丮 ۿ ִ CGI</a></h3> + + + <p> Ȼ CGI α <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> 丮 + Ѵ. ڴ CGI α + ִ ִ. ġ + ߴٸ ƹ 丮 CGI α + . , <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> þ Ͽ + ڰ ڽ Ȩ丮 츦 + . ڰ ڽ CGI α ϰ + <code>cgi-bin</code> 丮 ٱ ٸ, ٸ + CGI α ϰ ̴.</p> + + <p>ƹ 丮 CGI Ϸ + ʿϴ. , <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> þ Ͽ + <code>cgi-script</code> ڵ鷯 ۵ؾ Ѵ. ι°, + <code class="directive"><a href="../mod/core.html#options">Options</a></code> þ + <code>ExecCGI</code> ؾ Ѵ.</p> + + + <h3><a name="options" id="options">Options Ͽ CGI ϱ</a></h3> + + + <p> ּϿ <code class="directive"><a href="../mod/core.html#options">Options</a></code> þ Ͽ Ư + 丮 CGI ִ.</p> + + <div class="example"><p><code> + <Directory /usr/local/apache2/htdocs/somedir><br /> + <span class="indent"> + Options +ExecCGI<br /> + </span> + </Directory> + </code></p></div> + + <p> þ ġ CGI Ѵ. + CGI ˷ Ѵ. <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> þ + Ȯڰ <code>cgi</code> <code>pl</code> + CGI α̶ ˸.</p> + + <div class="example"><p><code> + AddHandler cgi-script .cgi .pl + </code></p></div> + + + <h3><a name="htaccess" id="htaccess">.htaccess </a></h3> + + + <p><a href="htaccess.html"><code>.htaccess</code> 丮</a> + <code>httpd.conf</code> ٱ 쿡 CGI α + ִ ˷ش.</p> + + + <h3><a name="userdir" id="userdir"> 丮</a></h3> + + + <p>Ʒ ϸ 丮 <code>.cgi</code> + CGI α Ѵ.</p> + + <div class="example"><p><code> + <Directory /home/*/public_html><br /> + <span class="indent"> + Options +ExecCGI<br /> + AddHandler cgi-script .cgi<br /> + </span> + </Directory> + </code></p></div> + + <p> ϸ 丮 <code>cgi-bin</code> + 丮 ִ CGI α νѴ.</p> + + <div class="example"><p><code> + <Directory /home/*/public_html/cgi-bin><br /> + <span class="indent"> + Options ExecCGI<br /> + SetHandler cgi-script<br /> + </span> + </Directory> + </code></p></div> + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">CGI α ۼϱ</a></h2> + + + <p>``Ϲ'' αְ CGI α ̿ ΰ + ֵ ִ.</p> + + <p>ù° ̴ CGI α ٸ ϱ + MIME-type ؾ Ѵٴ ̴. HTTP + Ŭ̾Ʈ Ŭ̾Ʈ ްԵ ̸ ˸. + .</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>ι° ̴ HTML Ȥ ִ + ؾ Ѵٴ ̴. κ HTML , + gif HTML ƴ ϴ CGI + α ۼϴ 쵵 ִ.</p> + + <p>ΰ ϰ CGI α ۼ ̹ + ٸ α ſ ϴ.</p> + + <h3><a name="firstcgi" id="firstcgi">ó CGI α</a></h3> + + + <p> CGI α . + ״ <code>first.pl</code>̶ Ͽ ϰ, + <code>cgi-bin</code> 丮 Ѵ.</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + print "Hello, World."; + </code></p></div> + + <p>Perl ͼ ʴ Ͼ + ִ. ù° ġ(Ȥ ϴ ) + <code>/usr/bin/perl</code> ġ ִ Ͽ + α ϶ ˸. ι° + content-type ϰ carriage-return ٹٲ + ι Ѵ. ڿ HTTP ϴ + , Ѵ. ° "Hello, World." + ڿ Ѵ. ̰ ̴.</p> + + <p> ϰ ּҸ ԷѴ</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p> Ҹ Էϸ, â <code>Hello, World.</code> + δ. е , ѹ ϴ + ٸ õ ִ.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot"> ʾƿ!</a></h2> + + + <p> CGI α Ҷ ִ + ⺻ װ.</p> + + <dl> + <dt>CGI α </dt> + <dd>! Ѵٴ ̴. Ȯ + ùٷ ó Ѵٸ, CGI α + ùٸ <code>Content-Type</code> Ͽ ȮѴ.</dd> + + <dt>CGI α ҽڵ Ȥ "POST Method Not Allowed" + </dt> + <dd>CGI α ϵ ġ + ʾҴٴ ̴. <a href="#configuring">ġ ϱ</a> + ٽ а κ ִ ãƺ.</dd> + + <dt>"Forbidden" ϴ </dt> + <dd> ִٴ ̴. <a href="#errorlogs">ġ + α</a> Ʒ <a href="#permissions">ϱ</a> + Ȯ϶.</dd> + + <dt>"Internal Server Error" </dt> + <dd><a href="#errorlogs">ġ α</a> Ƹ + CGI α Բ "Premature end of + script headers" ̴. Ʒ ϳ + ȮϿ CGI α HTTP + ߴ ˾ƺ.</dd> + </dl> + + <h3><a name="permissions" id="permissions">ϱ</a></h3> + + + <p> Ű ϶. + , ϸ Ư ( + <code>nobody</code> <code>www</code>) Ѵ. + Ϸ ʿϴ. + Ͽ <code>nobody</code> ϱ + ֱ ο ش.</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>, α ٸ аų ٸ Ͽ + ʿϴ.</p> + + + + <h3><a name="pathinformation" id="pathinformation"> ȯ</a></h3> + + + <p> α ϸ ڵ + ȴ. , <code>PATH</code> + ã Ҹ ˷ش.</p> + + <p> α CGI α Ҷ + <code>PATH</code> ٸ ִ. ( , + <code>sendmail</code> ) CGI α ȿ ϴ + ɾ η ؾ ɾ ã + ִ.</p> + + <p> CGI α ù° ٿ + ũƮ ( <code>perl</code>) ο + Ѵ.</p> + + <div class="example"><p><code> + #!/usr/bin/perl + </code></p></div> + + <p> ȮѴ.</p> + + <p>, CGI α ٸ <a href="#env">ȯ溯</a> + Ѵٸ ġ α ؾ + Ѵ.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">α </a></h3> + + + <p>CGI α ϴ κ α ü + ̴. Ư ΰ Ǽ ʾҰ + ִٸ . ϱ + α غ. , + Ѵ.</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(<code>perl</code> . + ġ ũƮ ù° ٿ ִ <a href="#pathinformation"> </a> Ͽ + ãƾ Ѵ.)</p> + + <p>α <code>Content-Type</code> + HTTP ϰ ؾ Ѵ. ٸ + Ѵٸ ġ <code>Premature + end of script headers</code> ȯѴ. ڼ + <a href="#writing">CGI α ۼϱ</a> ϶.</p> + + + <h3><a name="errorlogs" id="errorlogs"> α</a></h3> + + + <p> α״ ̴. ߸Ǹ α + . α Ѵ. Ʈ + ȣϴ α ϰ Ѵٸ, Ƹ + ٸ ü ˾ƺ Ѵ. α , + κ ľϿ ذ ִ.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p><a href="../suexec.html">suexec</a> α + ϸ ȣƮ Ȥ 丮 ִ + CGI α ٸ ִ. + Suexec ſ ϰ ˻ϸ, ˻縦 ϳ + ϸ CGI α ʰ <code>Premature + end of script headers</code> ȯѴ.</p> + + <p>suexec ϰ ִ ˷ <code>apachectl -V</code> + Ͽ <code>SUEXEC_BIN</code> ġ ȮѴ. ġ + Ҷ ҿ suexec ߰ϸ, suexec + ִ.</p> + + <p>suexec ߴٸ ؼ ȵȴ. + suexec <code>SUEXEC_BIN</code> ġ + ִ <code>suexec</code> (Ȥ ϸ + ٲٰ) ϸ ȴ. <a href="../suexec.html">suexec</a> + ϰ ʹٸ, <code>suexec -V</code> Ͽ suexec + α ġ ˾Ƴ αϿ Ģ + ִ ã´.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">ڿ °?</a></h2> + + + <p>CGI αֿ ͼ ڿ ϸ + ȴ. ü ϴ + ϴ ̴. "Hello, World." ϴ + α ۼ ̷ α + ̴.</p> + + <h3><a name="env" id="env">ȯ溯</a></h3> + + + <p>ȯ溯 ǻ ϴ + ٴϴ ̴. ȯ溯 path (ǻͰ Է + ɾ شϴ ã ), ڸ, ̳ + . Ϲ ȯ溯 + Ʈ <code>env</code> ԷѴ.</p> + + <p>CGI Ҷ ȯ溯 + ȯѴ. (Netscape, IE, + Lynx), (ġ, IIS, WebSite), ϴ CGI + α ִ.</p> + + <p>CGI αӴ ̷ ְ, + ȯ溯 Ŭ̾Ʈ- ſ Ϻκ Ѵ. + ü ʼ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> ִ.</p> + + <p>Ʒ Perl CGI α ڽſ + ȯ溯 ش. ġ <code>cgi-bin</code> + 丮 ̿ α ΰ ִ. + ʼ̰ ̴. Ͽ + δ. , ġ ⺻ ϴ ȯ溯 + ܿ <a href="../env.html"> ȯ溯 + ߰ ִ</a>.</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + foreach $key (keys %ENV) {<br /> + <span class="indent"> + print "$key --> $ENV{$key}<br>";<br /> + </span> + } + </code></p></div> + + + <h3><a name="stdin" id="stdin">STDIN STDOUT</a></h3> + + + <p>, Ŭ̾Ʈ ǥԷ(<code>STDIN</code>) + ǥ(<code>STDOUT</code>) Ѵ. ϻ + <code>STDIN</code> Ű峪 α óϴ + Ÿ, <code>STDOUT</code> ܼ̳ ȭ Ѵ.</p> + + <p>CGI α (form) <code>POST</code>ϸ + Ŀ Է ڷḦ Ư CGI α + <code>STDIN</code> Ѵ. α Ű峪 + Ͽ ڷḦ óϵ ڷḦ ó ִ.</p> + + <p>"Ư " ſ ϴ. ̸ ȣ(=) + ϰ, ̸ ֵ ۻ(&) + Ѵ. , ۻ, ȣ ڿ ڴ + ȥ ʵ 16 ȯѴ. ڷ ڿ + .</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p> URL ڿ ̷ ڿ ȴ. + ڿ <code>QUERY_STRING</code>̶ ȯ溯 Ѵ. + ̸ <code>GET</code> û̶ Ѵ. <code>FORM</code> + ± <code>METHOD</code> Ӽ Ͽ HTML (form) + ڷḦ <code>GET</code> <code>POST</code> Ѵ.</p> + + <p> α ̷ ڿ ɰ + Ѵ. ̷ ڷ ó CGI α ٸ + Ǵ ̺귯 ִ.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI /̺귯</a></h2> + + + <p>CGI α ۼҶ ۾ ִ ڵ + ̺귯 Ȥ غ Ѵ. ̷ + ϸ װ ٰ α ִ.</p> + + <p>Perl CGI α ۼѴٸ <a href="http://www.cpan.org/">CPAN</a> ã + ִ. CGI ߿ θ Ǵ + <code>CGI.pm</code>̴. κ α ּ + <code>CGI::Lite</code> ִ.</p> + + <p>C CGI α ۼѴٸ . + ϳ <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a> + ִ <code>CGIC</code> ̺귯.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="moreinfo" id="moreinfo"> ...</a></h2> + + + <p> ſ CGI ִ. <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> + CGI ִ. HTML Writers Guild -servers + ϸƮ ã Ǹ Ҵ. <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a> + ִ.</p> + + <p> CGI α ۿ + CGI Ծ о . <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> + ְ, ʾ <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface + RFC Ʈ</a> ִ.</p> + + <p>ϸƮ 쿡 ݰ ִ CGI + Ҷ , + ٸ, ϴ , CGI α ۼ + , ϸ ش ڵ带 ڼ . ذå + ã .</p> + + <p>ġ ҽڵ尡 ߸Ǿٰ Ȯ ʴ CGI + ġ ͺ̽ ø <strong></strong> + ȵȴ.</p> + </div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html b/docs/manual/howto/htaccess.html new file mode 100644 index 0000000..1e6a6f0 --- /dev/null +++ b/docs/manual/howto/htaccess.html @@ -0,0 +1,25 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: htaccess.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: htaccess.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: htaccess.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: htaccess.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: htaccess.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR + +URI: htaccess.html.pt-br +Content-Language: pt-br +Content-type: text/html; charset=ISO-8859-1 diff --git a/docs/manual/howto/htaccess.html.en b/docs/manual/howto/htaccess.html.en new file mode 100644 index 0000000..e16fc1f --- /dev/null +++ b/docs/manual/howto/htaccess.html.en @@ -0,0 +1,465 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache HTTP Server Tutorial: .htaccess files - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache HTTP Server Tutorial: .htaccess files</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div> + +<p><code>.htaccess</code> files provide a way to make configuration +changes on a per-directory basis.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess files</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">What they are/How to use them</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when">When (not) to use .htaccess files</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how">How directives are applied</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth">Authentication example</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes example</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Rewrite Rules in .htaccess files</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI example</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Troubleshooting</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">.htaccess files</a></h2> + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table> + + <div class="note">You should avoid using <code>.htaccess</code> files completely if you have access to + httpd main server config file. Using <code>.htaccess</code> files slows down your Apache http server. + Any directive that you can include in a <code>.htaccess</code> file is better set in a <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> block, as it will have the same effect with better performance.</div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">What they are/How to use them</a></h2> + + + <p><code>.htaccess</code> files (or "distributed configuration files") + provide a way to make configuration changes on a per-directory basis. A + file, containing one or more configuration directives, is placed in a + particular document directory, and the directives apply to that + directory, and all subdirectories thereof.</p> + + <div class="note"><h3>Note:</h3> + <p>If you want to call your <code>.htaccess</code> file something + else, you can change the name of the file using the <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> directive. For example, + if you would rather call the file <code>.config</code> then you + can put the following in your server configuration file:</p> + + <pre class="prettyprint lang-config">AccessFileName ".config"</pre> + + </div> + + <p>In general, <code>.htaccess</code> files use the same syntax as + the <a href="../configuring.html#syntax">main configuration + files</a>. What you can put in these files is determined by the + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive. This + directive specifies, in categories, what directives will be + honored if they are found in a <code>.htaccess</code> file. If a + directive is permitted in a <code>.htaccess</code> file, the + documentation for that directive will contain an Override section, + specifying what value must be in <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> in order for that + directive to be permitted.</p> + + <p>For example, if you look at the documentation for the <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code> + directive, you will find that it is permitted in <code>.htaccess</code> + files. (See the Context line in the directive summary.) The <a href="../mod/directive-dict.html#Context">Override</a> line reads + <code>FileInfo</code>. Thus, you must have at least + <code>AllowOverride FileInfo</code> in order for this directive to be + honored in <code>.htaccess</code> files.</p> + + <div class="example"><h3>Example:</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">Context:</a></td> + <td>server config, virtual host, directory, .htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>If you are unsure whether a particular directive is permitted in a + <code>.htaccess</code> file, look at the documentation for that + directive, and check the Context line for ".htaccess".</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when">When (not) to use .htaccess files</a></h2> + + <p>In general, you should only use <code>.htaccess</code> files when + you don't have access to the main server configuration file. There is, + for example, a common misconception that user authentication should + always be done in <code>.htaccess</code> files, and, in more recent years, + another misconception that <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> directives + must go in <code>.htaccess</code> files. This is simply not the + case. You can put user authentication configurations in the main server + configuration, and this is, in fact, the preferred way to do + things. Likewise, <code>mod_rewrite</code> directives work better, + in many respects, in the main server configuration.</p> + + <p><code>.htaccess</code> files should be used in a case where the + content providers need to make configuration changes to the server on a + per-directory basis, but do not have root access on the server system. + In the event that the server administrator is not willing to make + frequent configuration changes, it might be desirable to permit + individual users to make these changes in <code>.htaccess</code> files + for themselves. This is particularly true, for example, in cases where + ISPs are hosting multiple user sites on a single machine, and want + their users to be able to alter their configuration.</p> + + <p>However, in general, use of <code>.htaccess</code> files should be + avoided when possible. Any configuration that you would consider + putting in a <code>.htaccess</code> file, can just as effectively be + made in a <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> section in your main server + configuration file.</p> + + <p>There are two main reasons to avoid the use of + <code>.htaccess</code> files.</p> + + <p>The first of these is performance. When <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + is set to allow the use of <code>.htaccess</code> files, httpd will + look in every directory for <code>.htaccess</code> files. Thus, + permitting <code>.htaccess</code> files causes a performance hit, + whether or not you actually even use them! Also, the + <code>.htaccess</code> file is loaded every time a document is + requested.</p> + + <p>Further note that httpd must look for <code>.htaccess</code> files + in all higher-level directories, in order to have a full complement of + directives that it must apply. (See section on <a href="#how">how + directives are applied</a>.) Thus, if a file is requested out of a + directory <code>/www/htdocs/example</code>, httpd must look for the + following files:</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </code></p></div> + + <p>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 + <code>.htaccess</code> files were enabled for <code>/</code>, which + is not usually the case.)</p> + + <p>In the case of <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directives, in + <code>.htaccess</code> context these regular expressions must be + re-compiled with every request to the directory, whereas in main + server configuration context they are compiled once and cached. + Additionally, the rules themselves are more complicated, as one must + work around the restrictions that come with per-directory context + and <code>mod_rewrite</code>. Consult the <a href="../rewrite/intro.html#htaccess">Rewrite Guide</a> for more + detail on this subject.</p> + + <p>The second consideration is one of 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 + 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 + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> to, and pointing them + to the relevant documentation, will save yourself a lot of confusion + later.</p> + + <p>Note that it is completely equivalent to put a <code>.htaccess</code> + file in a directory <code>/www/htdocs/example</code> containing a + directive, and to put that same directive in a Directory section + <code><Directory "/www/htdocs/example"></code> in your main server + configuration:</p> + + <p><code>.htaccess</code> file in <code>/www/htdocs/example</code>:</p> + + <div class="example"><h3>Contents of .htaccess file in + <code>/www/htdocs/example</code></h3><pre class="prettyprint lang-config">AddType text/example ".exm"</pre> +</div> + + <div class="example"><h3>Section from your <code>httpd.conf</code> + file</h3><pre class="prettyprint lang-config"><Directory "/www/htdocs/example"> + AddType text/example ".exm" +</Directory></pre> +</div> + + <p>However, putting this configuration in your server configuration + file will result in less of a performance hit, as the configuration is + loaded once when httpd starts, rather than every time a file is + requested.</p> + + <p>The use of <code>.htaccess</code> files can be disabled completely + by setting the <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + directive to <code>none</code>:</p> + + <pre class="prettyprint lang-config">AllowOverride None</pre> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how">How directives are applied</a></h2> + + <p>The configuration directives found in a <code>.htaccess</code> file + are applied to the directory in which the <code>.htaccess</code> file + is found, and to all subdirectories thereof. However, it is important + to also remember that there may have been <code>.htaccess</code> files + in directories higher up. Directives are applied in the order that they + are found. Therefore, a <code>.htaccess</code> file in a particular + directory may override directives found in <code>.htaccess</code> files + found higher up in the directory tree. And those, in turn, may have + overridden directives found yet higher up, or in the main server + configuration file itself.</p> + + <p>Example:</p> + + <p>In the directory <code>/www/htdocs/example1</code> we have a + <code>.htaccess</code> file containing the following:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI</pre> + + + <p>(Note: you must have "<code>AllowOverride Options</code>" in effect + to permit the use of the "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" directive in + <code>.htaccess</code> files.)</p> + + <p>In the directory <code>/www/htdocs/example1/example2</code> we have + a <code>.htaccess</code> file containing:</p> + + <pre class="prettyprint lang-config">Options Includes</pre> + + + <p>Because of this second <code>.htaccess</code> file, in the directory + <code>/www/htdocs/example1/example2</code>, CGI execution is not + permitted, as only <code>Options Includes</code> is in effect, which + completely overrides any earlier setting that may have been in + place.</p> + + <h3><a name="merge" id="merge">Merging of .htaccess with the main + configuration files</a></h3> + + <p>As discussed in the documentation on <a href="../sections.html">Configuration Sections</a>, + <code>.htaccess</code> files can override the <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> sections for + the corresponding directory, but will be overridden by other types + of configuration sections from the main configuration files. This + fact can be used to enforce certain configurations, even in the + presence of a liberal <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> setting. For example, to + prevent script execution while allowing anything else to be set in + <code>.htaccess</code> you can use:</p> + + <pre class="prettyprint lang-config"><Directory "/www/htdocs"> + AllowOverride All +</Directory> + +<Location "/"> + Options +IncludesNoExec -ExecCGI +</Location></pre> + + + <div class="note">This example assumes that your <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> is <code>/www/htdocs</code>.</div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth">Authentication example</a></h2> + + <p>If you jumped directly to this part of the document to find out how + to do authentication, it is important to note one thing. There is a + common misconception that you are required to use + <code>.htaccess</code> files in order to implement password + authentication. This is not the case. Putting authentication directives + in a <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + section, in your main server configuration file, is the preferred way + to implement this, and <code>.htaccess</code> files should be used only + if you don't have access to the main server configuration file. See <a href="#when">above</a> for a discussion of when you should and should + not use <code>.htaccess</code> files.</p> + + <p>Having said that, if you still think you need to use a + <code>.htaccess</code> file, you may find that a configuration such as + what follows may work for you.</p> + + <p><code>.htaccess</code> file contents:</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Password Required" +AuthUserFile "/www/passwords/password.file" +AuthGroupFile "/www/passwords/group.file" +Require group admins</pre> + + + <p>Note that <code>AllowOverride AuthConfig</code> must be in effect + for these directives to have any effect.</p> + + <p>Please see the <a href="auth.html">authentication tutorial</a> for a + more complete discussion of authentication and authorization.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">Server Side Includes example</a></h2> + + <p>Another common use of <code>.htaccess</code> files is to enable + Server Side Includes for a particular directory. This may be done with + the following configuration directives, placed in a + <code>.htaccess</code> file in the desired directory:</p> + + <pre class="prettyprint lang-config">Options +Includes +AddType text/html shtml +AddHandler server-parsed shtml</pre> + + + <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride + FileInfo</code> must both be in effect for these directives to have any + effect.</p> + + <p>Please see the <a href="ssi.html">SSI tutorial</a> for a more + complete discussion of server-side includes.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Rewrite Rules in .htaccess files</a></h2> +<p>When using <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> in +<code>.htaccess</code> files, be aware that the per-directory context +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:</p> + +<pre class="prettyprint lang-config"># In httpd.conf +RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" + +# In .htaccess in root dir +RewriteRule "^images/(.+)\.jpg" "images/$1.png" + +# In .htaccess in images/ +RewriteRule "^(.+)\.jpg" "$1.png"</pre> + + +<p>In a <code>.htaccess</code> in your document directory, the leading +slash is removed from the value supplied to <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, and in the +<code>images</code> subdirectory, <code>/images/</code> is removed from +it. Thus, your regular expression needs to omit that portion as +well.</p> + +<p>Consult the <a href="../rewrite/">mod_rewrite documentation</a> for +further details on using <code>mod_rewrite</code>.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">CGI example</a></h2> + + <p>Finally, you may wish to use a <code>.htaccess</code> file to permit + the execution of CGI programs in a particular directory. This may be + implemented with the following configuration:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +AddHandler cgi-script cgi pl</pre> + + + <p>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:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +SetHandler cgi-script</pre> + + + <p>Note that <code>AllowOverride Options</code> and <code>AllowOverride + FileInfo</code> must both be in effect for these directives to have any + effect.</p> + + <p>Please see the <a href="cgi.html">CGI tutorial</a> for a more + complete discussion of CGI programming and configuration.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Troubleshooting</a></h2> + + <p>When you put configuration directives in a <code>.htaccess</code> + file, and you don't get the desired effect, there are a number of + things that may be going wrong.</p> + + <p>Most commonly, the problem is that <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> is not + set such that your configuration directives are being honored. Make + sure that you don't have a <code>AllowOverride None</code> in effect + for the file scope in question. A good test for this is to put garbage + in your <code>.htaccess</code> file and reload the page. If a server error is + not generated, then you almost certainly have <code>AllowOverride + None</code> in effect.</p> + + <p>If, on the other hand, you are getting server errors when trying to + access documents, check your httpd error log. It will likely tell you + that the directive used in your <code>.htaccess</code> file is not + permitted.</p> + + <div class="example"><p><code> + [Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here + </code></p></div> + + <p>This will indicate either that you've used a directive that is + never permitted in <code>.htaccess</code> files, or that you simply + don't have <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> set to + a level sufficient for the directive you've used. Consult the + documentation for that particular directive to determine which is + the case.</p> + + <p>Alternately, it may tell you that you had a syntax error in your + usage of the directive itself.</p> + + <div class="example"><p><code> + [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters + </code></p></div> + + <p>In this case, the error message should be specific to the + particular syntax error that you have committed.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/htaccess.html" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html.es b/docs/manual/howto/htaccess.html.es new file mode 100644 index 0000000..ad63d84 --- /dev/null +++ b/docs/manual/howto/htaccess.html.es @@ -0,0 +1,464 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutorial del Servidor Apache HTTP: Ficheros .htaccess - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial del Servidor Apache HTTP: Ficheros .htaccess</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div> + + <p>Los ficheros <code>.htaccess</code> facilitan una forma de realizar + cambios en la configuración en contexto directorio.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Ficheros .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">Qué son/Cómo usarlos</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when">Cuando (no) usar ficheros .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how">How directives are applied</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth">Ejemplo de Autenticación</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Ejemplo de Server Side Includes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Reglas de Rewrite en ficheros .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Ejemplo de CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Resolución de problemas</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Ficheros .htaccess</a></h2> + <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table> + + <div class="note">Debería evitar usar ficheros <code>.htaccess</code> completamente si + tiene acceso al fichero de configuración principal de httpd. Usar ficheros + <code>.htaccess</code> ralentiza su servidor Apache http. Cualquier + directiva que pueda incluir en un fichero <code>.htaccess</code> + estará mejor configurada dentro de una sección + <code class="directive"><a href="../mod/core.html#directory">Directory</a></code>, tendrá el mismo efecto y + mejor rendimiento.</div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">Qué son/Cómo usarlos</a></h2> + + + <p>Los ficheros <code>.htaccess</code> (o "ficheros de configuración + distribuida") facilitan una forma de realizar cambios en la configuración + en contexto directorio. Un fichero, que contiene una o más directivas, se + coloca en un documento específico de un directorio, y estas directivas + aplican a ese directorio y todos sus subdirectorios.</p> + + <div class="note"><h3>Nota:</h3> + <p>Si quiere llamar a su fichero <code>.htaccess</code> de otra manera, + puede cambiar el nombre del fichero usando la directiva <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Por ejemplo, si usted prefiere + llamar al fichero <code>.config</code>, entonces puede poner lo siguiente + en el fichero de configuración de su servidor:</p> + + <pre class="prettyprint lang-config">AccessFileName ".config"</pre> + + </div> + + <p>Generalmente, los ficheros <code>.htaccess</code> usan la misma sintáxis + que los <a href="../configuring.html#syntax">ficheros de la configuración + principal</a>. Lo que puede utilizar en estos ficheros lo determina la + directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Esta directiva + especifica, en categorías, qué directivas tendrán efecto si se encuentran en + un fichero <code>.htaccess</code>. Si se permite una directiva en un fichero + <code>.htaccess</code>, la documentación para esa directiva contendrá una + sección Override, especificando qué valor debe ir en + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> para que se permita esa + directiva.</p> + + <p>Por ejemplo, si busca en la documentación la directiva <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, encontrará que se permite en + ficheros <code>.htaccess</code>. (Vea la línea de Contexto en el sumario de + la directiva.) La línea <a href="../mod/directive-dict.html#Context">Override</a> muestra + <code>FileInfo</code>. De este modo, debe tener al menos + <code>AllowOverride FileInfo</code> para que esta directiva se aplique en + ficheros <code>.htaccess</code>.</p> + + <div class="example"><h3>Ejemplo:</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">Context:</a></td> + <td>server config, virtual host, directory, .htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>Si no está seguro de cuándo, una directiva en concreto, se puede usar en un + fichero <code>.htaccess</code>, consulte la documentación para esa directiva, + y compruebe la línea Context buscando ".htaccess".</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when">Cuando (no) usar ficheros .htaccess</a></h2> + + <p>Generalmente, solo debería usar ficheros <code>.htaccess</code> cuando no + tiene acceso al fichero principal de configuración del servidor. Hay, por + ejemplo, una creencia errónea de que la autenticación de usuario debería + hacerse siempre dentro de ficheros <code>.htaccess</code>, y, más recientemente, otra creencia errónea de que las directivas de + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> deben ir en ficheros <code>.htaccess</code>. + Esto sencillamente no es el caso. Puede poner las configuraciones de + autenticación de usuario en la configuración principal del servidor, y esto + es de hecho, el método preferido de configurar Apache. Del mismo modo, las + directivas <code>mod_rewrite</code> funcionan mejor, en muchos sentidos, en + el fichero de configuración principal del servidor.</p> + + <p>Los ficheros <code>.htaccess</code> deberían usarse cuando su proveedor + de contenidos le permite hacer modificaciones de configuración + en contexto directorio, pero usted no tiene acceso de root en el servidor. + En el caso de que el administrador no esté dispuesto a hacer cambios + frecuentes en la configuración, puede que sea necesario permitir a usuarios + individuales realizar estos cambios de configuración en ficheros + <code>.htaccess</code> por ellos mismos. Lo cual ocurre a menudo, por + ejemplo, en casos donde los ISP están albergando múltiples sitios web de + usuario en una sola máquina, y quieren que sus usuarios tengan la + posibilidad de modificar sus configuraciones.</p> + + <p>Aun así, generalmente, el uso de ficheros <code>.htaccess</code> debería + evitarse cuando sea posible. Cualquier configuración que consideraría poner + en un fichero <code>.htaccess</code>, puede usarse con la misma efectividad + en una sección <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> en el fichero de configuración + del servidor.</p> + + <p>Hay dos razones para evitar el uso de ficheros <code>.htaccess</code>.</p> + + <p>La primera es el rendimiento. Cuando <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + está configurado para permitir el uso de ficheros <code>.htaccess</code>, + httpd buscará ficheros <code>.htaccess</code> en cada directorio. Así, + permitiendo ficheros <code>.htaccess</code> provoca una pérdida de + rendimiento, ¡incluso aunque no los use! Además, los ficheros + <code>.htaccess</code> se cargan cada vez que se solicita un documento.</p> + + <p>Además tenga en cuenta que httpd debe buscar ficheros + <code>.htaccess</code> en todos los directorios de mayor jerarquía, + para poder terner la lista completa de directivas que debe aplicar. (Vea + la sección sobre <a href="#how">Cómo se aplican las directivas</a>.) Así, si + se solicita un fichero de un directorio <code>/www/htdocs/example</code>, + httpd debe buscar los siguientes ficheros:</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </code></p></div> + + <p>De esta manera, por cada acceso a un fichero de ese directorio, hay 4 + accesos adicionales al sistema de ficheros, incluso si ninguno de esos + ficheros está presente. (Tenga en cuenta que este caso solo se daría si los + ficheros <code>.htaccess</code> están activados en <code>/</code>, que + generalmente no es el caso.).</p> + + <p>En el caso de las directivas <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, en el contexto de + <code>.htaccess</code> estas expresiones regulares deben recompilarse con + cada solicitud a ese directorio, cuando en el contexto de configuración del + servidor solo se compilan una vez y se cachean. Adicionalmente, las reglas + en sí mismas son más complicadas, puesto que uno debe sortear las + restricciones que vienen acompañadas del contexto directorio y + <code>mod_rewrite</code>. Consulte la <a href="../rewrite/intro.html#htaccess">Guía de Rewrite</a> para un mayor + detalle sobre este tema.</p> + + <p>La segunda consideración es de seguridad. Estará permitiendo que usuarios + modifiquen la configuración del servidor, lo cual puede dar lugar a cambios sobre los que usted no tendrá ningún control. Medite profundamente si debe + dar a sus usuarios ese privilegio. Además tenga en cuenta que dar a los usuarios menos privilegios de los que necesitan dará lugar a más peticiones + de soporte. Asegúrese de que le indica a sus usuarios claramente el nivel de privilegios que les está dando. Especificando exactamente cómo ha + configurado <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, e invíteles + a revisar la documentación relacionada, lo cual le ahorrará + bastantes confusiones más adelante.</p> + + <p>Tenga en cuenta que esto es equivalente por completo a poner un fichero + <code>.htaccess</code> en un directorio <code>/www/htdocs/example</code> + con una directiva, y poner la misma directiva en una sección + Directory <code><Directory "/www/htdocs/example"></code> en su + configuración principal del servidor:</p> + + <p>Fichero <code>.htaccess</code> en <code>/www/htdocs/example</code>:</p> + + <div class="example"><h3>Contenido de fichero .htaccess en + <code>/www/htdocs/example</code></h3><pre class="prettyprint lang-config">AddType text/example ".exm"</pre> +</div> + + <div class="example"><h3>Sección de su fichero <code>httpd.conf</code></h3><pre class="prettyprint lang-config"><Directory "/www/htdocs/example"> + AddType text/example ".exm" +</Directory></pre> +</div> + + <p>Aun así, poniendo ésta en el fichero de configuración dará como resultado + una menor pérdida de rendimiento, y como la configuración se carga una vez + cuando el httpd arranca, en lugar de cada vez que se solicita un fichero.</p> + + <p>El uso de ficheros <code>.htaccess</code> puede desactivarse por completo + configurando la directiva <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + a <code>none</code>:</p> + + <pre class="prettyprint lang-config">AllowOverride None</pre> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how">How directives are applied</a></h2> + + <p>Las directivas de configuración que se encuentran en el fichero + <code>.htaccess</code> se aplican al directorio en el que el fichero + <code>.htaccess</code> se encuentra, y a todos sus subdirectorios. Sin + embargo, es importante recordar que puede haber otros ficheros + <code>.htaccess</code> en directorios previos. Las directivas se aplican en + el orden en el que se encuentran. Por lo tanto, un fichero + <code>.htaccess</code> puede sobrescribir directivas que se encuentran + en ficheros <code>.htaccess</code> que se encuentran en directorios previos + del árbol de directorios. Y estos, en cambio, pueden haber sobrescrito + directivas que se encontraban más arriba, o en el fichero principal de + configuración del servidor mismo.</p> + + <p>Ejemplo:</p> + + <p>En el directorio <code>/www/htdocs/example1</code> tenemos un fichero + <code>.htaccess</code> que contiene lo siguiente:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI</pre> + + + <p>(Nota: debe terner "<code>AllowOverride Options</code>" configurado para + permitir el uso de la directiva "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" en ficheros + <code>.htaccess</code> files.)</p> + + <p>En el directorio <code>/www/htdocs/example1/example2</code> tenemos un + fichero <code>.htaccess</code> que contiene:</p> + + <pre class="prettyprint lang-config">Options Includes</pre> + + + <p>Por este segundo fichero <code>.htaccess</code>, en el directorio + <code>/www/htdocs/example1/example2</code>, la ejecución de CGI execution no + está permitida, porque solo se ha definido <code>Options Includes</code>, + que sobrescribe completamente una configuración previa que se pudiera haber + definido.</p> + + <h3><a name="merge" id="merge">Incorporando el .htaccess en los ficheros de + configuración principal</a></h3> + + <p>Como se ha comentado en la documentación en las <a href="../sections.html">Secciones de Configuración</a>, los ficheros + <code>.htaccess</code> pueden sobrescribir las secciones <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> por el directorio + correspondiente, pero se sobrescribirán por otros tipos de secciones de + configuración de los ficheros de configuración principal. Este hecho se + puede usar para forzar ciertas configuraciones, incluso en presencia + de una configuración laxa de + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Por ejemplo, para + prevenir la ejecución de un script mientras se permite cualquier otra cosa + en <code>.htaccess</code> puede usar:</p> + + <pre class="prettyprint lang-config"><Directory "/www/htdocs"> + AllowOverride All +</Directory> + +<Location "/"> + Options +IncludesNoExec -ExecCGI +</Location></pre> + + + <div class="note">Este ejemplo asume que su <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> es <code>/www/htdocs</code>.</div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth">Ejemplo de Autenticación</a></h2> + + <p>Si saltó directamente a esta parte del documento para averiguar como + hacer la autenticación, es important que tenga en cuenta una cosa. Hay una + creencia errónea de que necesita usar ficheros <code>.htaccess</code> para + configurar autenticación con contraseña. Este no es el caso. Colocar las + directivas de autenticación en una sección + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, en su fichero + de configuración principal, es el método recomendado para configurar esto, + y los ficheros <code>.htaccess</code> deberían usarse solamente si no tiene + acceso al fichero de configuración principal del servidor. Vea <a href="#when">más arriba</a> una explicación de cuando debería y cuando no + debería usar ficheros <code>.htaccess</code>.</p> + + <p>Dicho esto, si todavía cree que debe usar el fichero + <code>.htaccess</code>, podrá ver que una configuración como la que sigue + podría servirle.</p> + + <p>Contenido del fichero <code>.htaccess</code>:</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Password Required" +AuthUserFile "/www/passwords/password.file" +AuthGroupFile "/www/passwords/group.file" +Require group admins</pre> + + + <p>Tenga en cuenta que <code>AllowOverride AuthConfig</code> debe estar + habilitado para que estas directivas tengan algún efecto.</p> + + <p>Por favor vea el <a href="auth.html">tutorial de autenticación</a> para + una explicación más completa de la autenticación y la autorización.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">Ejemplo de Server Side Includes</a></h2> + + <p>Otro uso común de ficheros <code>.htaccess</code> es activar Server Side + Includes para un directorio en particular. Esto puede hacerse + con las siguientes directivas de configuración, colocadas en un fichero + <code>.htaccess</code> y el directorio deseado:</p> + + <pre class="prettyprint lang-config">Options +Includes +AddType text/html "shtml" +AddHandler server-parsed shtml</pre> + + + <p>Tenga en cuenta que <code>AllowOverride Options</code> y + <code>AllowOverride FileInfo</code> deben estar activadas para que estas + directivas tengan efecto.</p> + + <p>Por favor vea el <a href="ssi.html">tutorial de SSI</a> para una + explicación más completa de server-side includes.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Reglas de Rewrite en ficheros .htaccess</a></h2> + <p>Cuando use <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> en + ficheros <code>.htaccess</code>, tenga en cuenta que el contexto + directorio cambia las cosas un poco. En concreto, las reglas son + relativas al directorio actual, en lugar de serlo de la petición de URI + solicitada originalmente. + Considere los siguientes ejemplos:</p> + +<pre class="prettyprint lang-config"># En httpd.conf +RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" + +# En .htaccess en el directorio raíz +RewriteRule "^images/(.+)\.jpg" "images/$1.png" + +# En .htaccess en images/ +RewriteRule "^(.+)\.jpg" "$1.png"</pre> + + + <p>En un <code>.htaccess</code> en cualquier directorio del DocumentRoot, la + barra ("/") inicial se elimina del valor facilitado a <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, y en el subdirectorio + <code>images</code>, se elimina <code>/images/</code> también de este valor. + Así, su expresión regular necesita omitir también esa parte.</p> + + <p>Consulte la <a href="../rewrite/">documentación de mod_rewrite</a> para + más detalles al usar <code>mod_rewrite</code>.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Ejemplo de CGI</a></h2> + + <p>Finalmente, puede que quiera usar un fichero <code>.htaccess</code> para + permitir la ejecución de programas CGI en un directorio en particular. Esto + se puede implementar con la siguiente configuración:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +AddHandler cgi-script "cgi" "pl"</pre> + + + <p>Alternativamente, si quiere considerar como programas CGI todos los + ficheros de un directorio concreto, esto se puede conseguir con la siguiente + configuración:</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +SetHandler cgi-script</pre> + + + <p>Tenga en cuenta que <code>AllowOverride Options</code> y + <code>AllowOverride FileInfo</code> deben estar ambas activadas para que + estas directivas tengan efecto.</p> + + <p>Por favor vea el <a href="cgi.html">tutorial CGI</a> para mayor detalle + sobre programación y configuración de CGI.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Resolución de problemas</a></h2> + + <p>Cuando pone directivas en un fichero <code>.htaccess</code> y no obtiene + el efecto deseado hay una serie de cosas que pueden haber ido mal.</p> + + <p>El problema más común es que <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride + </a></code> no está configurada para que sus directivas puedan surtir + efecto. Asegúrese de que no tiene <code>AllowOverride None</code> + configurado para el directorio en cuestión. Una buena forma de probar esto + es poner "basura" en su fichero <code>.htaccess</code> y recargar la página. + Si no se genera un error en el servidor, casi seguro que tiene configurado + <code>AllowOverride None</code>.</p> + + <p>Si, por otro lado, obtiene errores de servidor al intentar acceder a + documentos, compruebe el log de errores de httpd. Seguramente le indiquen + que la directiva en uso en su fichero <code>.htaccess</code> no está + permitida.</p> + + <div class="example"><p><code> + [Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here + </code></p></div> + + <p>Esto indicará que o bien ha usado una directiva que no se permite nunca + en ficheros <code>.htaccess</code>, o que simplementa no tiene + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> configurado + a un nivel suficiente para la directiva que ha usado. Consulte la + documentación para esa directiva en particular para determinar cual es el + caso.</p> + + <p>Alternativamente, puede que le indique que hay un error de sintaxis en + el uso de la propia directiva.</p> + + <div class="example"><p><code> + [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters + </code></p></div> + + <p>En este caso, el mensaje de error debería ser específico para el error de + sintaxis concreto que ha cometido.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html.fr.utf8 b/docs/manual/howto/htaccess.html.fr.utf8 new file mode 100644 index 0000000..2b71c5b --- /dev/null +++ b/docs/manual/howto/htaccess.html.fr.utf8 @@ -0,0 +1,512 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutoriel du serveur HTTP Apache : fichiers .htaccess - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel du serveur HTTP Apache : fichiers .htaccess</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div> + +<p>Les fichiers <code>.htaccess</code> fournissent une méthode pour +modifier la configuration du serveur au niveau de chaque répertoire.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Fichiers .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">Que sont ce fichiers, comment les utiliser ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when">Quand doit-on (ne doit-on pas) utiliser + les fichiers .htaccess ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how">Comment sont appliquées les directives ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth">Exemple d'authentification</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Exemple d'Inclusion Côté Serveur (Server Side +Includes - SSI)</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Les règles de réécriture dans les fichiers .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Exemple de CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Résolution des problèmes</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Fichiers .htaccess</a></h2> + + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table> + <div class="note">Les fichiers <code>.htaccess</code> ne doivent être utilisés + que si vous n'avez pas accès au fichier de configuration du serveur + principal. L'utilisation des fichiers <code>.htaccess</code> + ralentit le fonctionnement de votre serveur HTTP Apache. Il est toujours + préférable de définir les directives que vous pouvez inclure dans un + fichier <code>.htaccess</code> dans une section <code class="directive"><a href="../mod/core.html#directory">Directory</a></code>, car elles produiront le + même effet avec de meilleures performances.</div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">Que sont ce fichiers, comment les utiliser ?</a></h2> + + + <p>Les fichiers <code>.htaccess</code> (ou "fichiers de + configuration distribués") fournissent une méthode pour modifier la + configuration du serveur au niveau d'un répertoire. Un fichier, + contenant une ou plusieurs directives de configuration, est placé + dans un répertoire de documents particulier, et ses directives + s'appliquent à ce répertoire et à tous ses sous-répertoires.</p> + + <div class="note"><h3>Note :</h3> + <p>Si vous voulez donner un autre nom à votre fichier + <code>.htaccess</code>, vous pouvez le faire en utilisant la + directive <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Par + exemple, si vous préférez nommer votre fichier + <code>.config</code>, vous pouvez mettre ceci dans le fichier de + configuration de votre serveur :</p> + + <pre class="prettyprint lang-config">AccessFileName ".config"</pre> + + </div> + + <p>En général, les fichiers <code>.htaccess</code> utilisent la même + syntaxe que les <a href="../configuring.html#syntax">fichiers de + configuration principaux</a>. Ce que vous pouvez mettre dans ces + fichier est déterminé par la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Cette directive spécifie, + sous forme de catégories, quelles directives seront traitées si + elles se trouvent dans un fichier <code>.htaccess</code>. Si une + directive est permise dans un fichier <code>.htaccess</code> file, + la documentation de cette directive contiendra une section Override, + spécifiant quelle valeur doit prendre <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> pour que cette directive + soit traitée.</p> + + <p>Par exemple, si vous regardez la documentation de la directive + <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, vous verrez + que cette dernière est permise dans les fichiers + <code>.htaccess</code> (Voir la ligne de contexte dans le résumé de + la directive). La ligne <a href="../mod/directive-dict.html#Context">Override</a> indique + <code>FileInfo</code>. Vous devez donc avoir au moins + <code>AllowOverride FileInfo</code> pour que cette directive soit + traitée dans les fichiers <code>.htaccess</code>.</p> + + <div class="example"><h3>Exemple :</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">Contexte :</a></td> + <td>configuration du serveur, serveur virtuel, directory, .htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>Si vous n'êtes pas sûr qu'une directive particulière soit permise + dans un fichier <code>.htaccess</code>, lisez la documentation de + cette directive, et consultez la ligne de contexte pour + ".htaccess".</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when">Quand doit-on (ne doit-on pas) utiliser + les fichiers .htaccess ?</a></h2> + + <p>En principe, vous ne devriez utiliser les fichiers + <code>.htaccess</code> que lorsque vous n'avez pas accès au fichier de + configuration du serveur principal. Par exemple, la fausse + idée + selon laquelle l'authentification de l'utilisateur devrait toujours + être faite dans les fichiers <code>.htaccess</code> est très + répandue. Il est aussi souvent avancé, ces dernières + années, que les directives de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> doivent + être définies dans les fichiers <code>.htaccess</code>. Ceci est + tout simplement faux. Vous pouvez configurer + l'authentification des utilisateurs au niveau de la configuration du + serveur principal, et c'est en fait cette méthode qui doit être + privilégiée. De même, les directives de + <code>mod_rewrite</code> fonctionneront mieux, à de nombreux égards, + dans le contexte du serveur principal.</p> + + <p>Les fichiers <code>.htaccess</code> ne devraient être utilisés + que dans le cas où les fournisseurs de contenu ont besoin de + modifier la configuration du serveur au niveau d'un répertoire, mais + ne possèdent pas l'accès root sur le système du serveur. Si + l'administrateur du serveur ne souhaite pas effectuer des + modifications de configuration incessantes, il peut être intéressant + de permettre aux utilisateurs isolés d'effectuer eux-mêmes ces + modifications par le biais de fichiers <code>.htaccess</code>. Ceci + est particulièrement vrai dans le cas où le fournisseur d'accès à + Internet héberge de nombreux sites d'utilisateurs sur un seul + serveur, et souhaite que ces utilisateurs puissent modifier + eux-mêmes leurs configurations.</p> + + <p>Cependant et d'une manière générale, il vaut mieux éviter + d'utiliser les fichiers <code>.htaccess</code>. Tout élément de + configuration que vous pourriez vouloir mettre dans un fichier + <code>.htaccess</code>, peut aussi être mis, et avec la même + efficacité, dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de + votre serveur principal.</p> + + <p>Il y a deux raisons principales d'éviter l'utilisation des + fichiers <code>.htaccess</code>.</p> + + <p>La première est liée aux performances. Lorsque la directive + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> est définie de + façon à autoriser l'utilisation des fichiers <code>.htaccess</code>, + httpd va rechercher leur présence dans chaque répertoire. Ainsi, + permettre l'utilisation des fichiers <code>.htaccess</code> est déjà + en soi une cause de dégradation des performances, que vous utilisiez + effectivement ces fichiers ou non ! De plus, le fichier + <code>.htaccess</code> est chargé en mémoire chaque fois qu'un + document fait l'objet d'une requête.</p> + + <p>Notez aussi que httpd doit rechercher les fichiers + <code>.htaccess</code> 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 <a href="#how">comment sont + appliquées les directives</a>). Ainsi, si un fichier fait l'objet + d'une requête à partir d'un répertoire + <code>/www/htdocs/exemple</code>, httpd doit rechercher les + fichiers suivants :</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/exemple/.htaccess + </code></p></div> + + <p>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 <code>.htaccess</code>, même si + aucun de ces fichiers n'est présent. Notez que cet exemple ne peut + se produire que si les fichiers <code>.htaccess</code> ont été + autorisés pour le répertoire <code>/</code>, ce qui est rarement le + cas.</p> + + <p>La seconde raison d'éviter l'utilisation des fichiers + <code>.htaccess</code> est liée à la sécurité. Si vous permettez aux + 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 + 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 + avez attribué. Indiquer exactement comment vous avez défini la + directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> et + diriger les utilisateurs vers la documentation correspondante vous + évitera bien des confusions ultérieures.</p> + + <p>Notez que mettre un fichier <code>.htaccess</code> contenant une + directive dans un répertoire <code>/www/htdocs/exemple</code> + revient exactement au même que mettre la même directive dans une + section Directory <code><Directory "/www/htdocs/exemple"></code> + du fichier de configuration de votre serveur principal :</p> + + <p>Fichier <code>.htaccess</code> dans + <code>/www/htdocs/exemple</code> :</p> + + <div class="example"><h3>Contenu du fichier .htaccess dans + <code>/www/htdocs/exemple</code></h3><pre class="prettyprint lang-config">AddType text/example ".exm"</pre> +</div> + + <div class="example"><h3>Section de votre fichier + <code>httpd.conf</code></h3><pre class="prettyprint lang-config"><Directory "/www/htdocs/example"> + AddType text/example .exm +</Directory></pre> +</div> + + <p>Cependant, la perte de performances sera moindre si vous + définissez cette directive dans la configuration de + votre serveur principal, car cette dernière ne sera chargée qu'une + seule fois au moment du démarrage du serveur, alors qu'elle le sera + à chaque accès dans le cas d'un fichier <code>.htaccess</code>.</p> + + <p>L'utilisation des fichiers <code>.htaccess</code> peut être + entièrement désactivée en définissant la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à <code>none</code> :</p> + + <pre class="prettyprint lang-config">AllowOverride None</pre> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how">Comment sont appliquées les directives ?</a></h2> + + <p>Les directives de configuration situées dans un fichier + <code>.htaccess</code> s'appliquent au répertoire dans lequel ce + fichier <code>.htaccess</code> se trouve, ainsi qu'à tous ses + sous-répertoires. Cependant, il est important de garder à l'esprit + qu'il peut y avoir des fichiers <code>.htaccess</code> dans les + répertoires de niveau supérieur. Les directives sont appliquées + selon l'ordre dans lequel elles sont rencontrées. Ainsi, les + directives d'un fichier <code>.htaccess</code> situé dans un + répertoire particulier peuvent écraser les directives se trouvant + dans des fichiers <code>.htaccess</code> situés à un niveau + supérieur dans l'arborescence des répertoires. Et ces dernières + peuvent elles-mêmes avoir écrasé des directives d'un fichier + <code>.htaccess</code> situé à un niveau encore plus haut, ou dans + le fichier de configuration du serveur principal.</p> + + <p>Exemple :</p> + + <p>Dans le répertoire <code>/www/htdocs/exemple1</code> se trouve un + fichier <code>.htaccess</code> contenant ce qui suit :</p> + + <pre class="prettyprint lang-config">Options +ExecCGI</pre> + + + <p>Note : "<code>AllowOverride Options</code>" doit être présent + pour permettre l'utilisation de la directive "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" dans les fichiers + <code>.htaccess</code>.</p> + + <p>Dans le répertoire <code>/www/htdocs/exemple1/exemple2</code> se + trouve un fichier <code>.htaccess</code> contenant ce qui suit + :</p> + + <pre class="prettyprint lang-config">Options Includes</pre> + + + <p>Ainsi, à cause de ce second fichier <code>.htaccess</code> du + répertoire <code>/www/htdocs/exemple1/exemple2</code>, l'exécution + des CGI est interdite, car la dernière définition d'options + <code>Options Includes</code> écrase toute autre définition + d'options d'un fichier <code>.htaccess</code> situé dans un + répertoire de niveau supérieur.</p> + + <h3><a name="merge" id="merge">Interactions entre les fichiers .htaccess + et les fichiers de configuration du serveur principal</a></h3> + + <p>Comme indiqué dans la documentation sur les <a href="../sections.html">Sections de configuration</a>, les fichiers + <code>.htaccess</code> peuvent écraser les directives des sections + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour + le répertoire correspondant, mais peuvent eux-mêmes être écrasés + par d'autres types de sections des fichiers de la + configuration principale. Cette possibilité peut s'avérer utile pour + forcer certaines configurations, même en cas de présence de l'option + libérale <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Par + exemple, pour interdire l'exécution de scripts en autorisant la + définition de toute autre option dans les fichiers + <code>.htaccess</code>, vous pouvez utiliser :</p> + + <pre class="prettyprint lang-config"><Directory "/www/htdocs"> + AllowOverride All +</Directory> + +<Location "/"> + Options +IncludesNoExec -ExecCGI +</Location></pre> + + + <div class="note">Dans cet exemple, on considère que le chemin défini par la + directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> est + <code>/www/htdocs</code>.</div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth">Exemple d'authentification</a></h2> + + <p>Si vous accédez directement à ce point du document pour apprendre + à effectuer une authentification, il est important de noter ceci. Il + existe une fausse idée selon laquelle il serait nécessaire + d'utiliser les fichiers <code>.htaccess</code> pour implémenter + l'authentification par mot de passe. Ceci est tout simplement faux. + Pour y parvenir, il est préférable de mettre les directives + d'authentification dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de + votre serveur principal, et les fichiers <code>.htaccess</code> ne + devraient être utilisés que dans le cas où vous n'avez pas accès au + fichier de configuration du serveur principal. Voir <a href="#when">ci-dessus</a> pour savoir dans quels cas vous devez ou + ne devez pas utiliser les fichiers <code>.htaccess</code>.</p> + + <p>Ceci étant dit, si vous pensez que vous devez quand-même utiliser + un fichier <code>.htaccess</code>, vous pouvez utiliser la + configuration suivante :</p> + + <p>Contenu du fichier <code>.htaccess</code> :</p> + + <pre class="prettyprint lang-config">AuthType Basic +AuthName "Password Required" +AuthUserFile "/www/passwords/password.file" +AuthGroupFile "/www/passwords/group.file" +Require group admins</pre> + + + <p>Notez que <code>AllowOverride AuthConfig</code> doit être présent + pour que ces directives produisent leur effet.</p> + + <p>Vous pouvez vous référer au <a href="auth.html">tutoriel sur + l'authentification</a> pour une description plus détaillée de + l'authentification et de l'autorisation.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">Exemple d'Inclusion Côté Serveur (Server Side +Includes - SSI)</a></h2> + + <p>Les fichiers <code>.htaccess</code> sont aussi couramment + utilisés pour activer les SSI pour un répertoire particulier. Pour y + parvenir, on utilise les directives de configuration suivantes, + placées dans un fichier <code>.htaccess</code> enregistré dans le + répertoire considéré :</p> + + <pre class="prettyprint lang-config">Options +Includes +AddType text/html shtml +AddHandler server-parsed shtml</pre> + + + <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride + FileInfo</code> doivent être tous les deux présents pour que ces + directives puissent produire leur effet.</p> + + <p>Vous pouvez vous référer au <a href="ssi.html">tutoriel SSI</a> + pour une description plus détaillée des SSI.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="rewrite" id="rewrite">Les règles de réécriture dans les fichiers .htaccess</a></h2> +<p>Sivous utilisez des directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> dans un fichier +<code>.htaccess</code>, gardez à l'esprit que les choses sont légèrement +différentes dans un contexte de répertoire. En particulier, les règles +sont relatives au répertoire courant, et non à l'URI original. Considérez +les exemples suivants :</p> + +<pre class="prettyprint lang-config"># Dans httpd.conf +RewriteRule "^/images/(.+)\.jpg" "/images/$1.png" + +# Dans un fichier .htaccess situé dans le répertoire racine de vos +# documents +RewriteRule "^images/(.+)\.jpg" "images/$1.png" + +# Dans un fichier .htaccess situé dans le répertoire images/ +RewriteRule "^(.+)\.jpg" "$1.png"</pre> + + +<p>On voit que si le fichier <code>.htaccess</code> se situe à la racine +de vos documents, le slash de tête est supprimé de la valeur de +remplacement spécifiée pour la règle <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, et que si le fichier +<code>.htaccess</code> se situe dans le répertoire <code>images</code>, +la chaîne <code>/images/</code> disparaît de cette même valeur de +remplacement. Il doit donc en être de même dans votre expression +rationnelle.</p> + +<p>Veuillez vous référer à cette <a href="../rewrite/">documentation</a> +pour une étude détaillée de l'utilisation du module +<code>mod_rewrite</code>.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Exemple de CGI</a></h2> + + <p>En fin de compte, vous avez décidé d'utiliser un fichier + <code>.htaccess</code> pour permettre l'exécution des programmes CGI + dans un répertoire particulier. Pour y parvenir, vous pouvez + utiliser la configuration suivante :</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +AddHandler cgi-script cgi pl</pre> + + + <p>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 :</p> + + <pre class="prettyprint lang-config">Options +ExecCGI +SetHandler cgi-script</pre> + + + <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride + FileInfo</code> doivent être tous les deux présents pour que ces + directives puissent produire leur effet.</p> + + <p>Vous pouvez vous référer au <a href="cgi.html">tutoriel CGI</a> + pour une description plus détaillée de la configuration et de la + proprammation CGI.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Résolution des problèmes</a></h2> + + <p>De nombreuses raisons peuvent être à l'origine du fait que + les directives que vous avez mises dans un fichier + <code>.htaccess</code> ne produisent pas l'effet désiré.</p> + + <p>Le plus souvent, le problème vient du fait que la définition de + la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + ne permet pas l'activation des directives de votre fichier + <code>.htaccess</code>. Vérifiez si une directive + <code>AllowOverride None</code> n'affecte pas le répertoire où se + trouve votre fichier. Un bon test consiste à mettre des directives + dont la syntaxe est erronée dans votre ficher <code>.htaccess</code> + et de recharger la page. Si aucune erreur n'est générée par le + serveur, il est pratiquement certain qu'une directive + <code>AllowOverride None</code> affecte votre répertoire.</p> + + <p>Par contre, si vous obtenez des erreurs de serveur lorsque vous + tentez d'accéder à des documents, consultez votre journal des + erreurs de httpd. Il vous indiquera probablement que la directive + utilisée dans votre fichier <code>.htaccess</code> n'est pas + permise.</p> + +<div class="example"><p><code> + [Fri Sep 17 18:43:16 2010] [alert] [client 192.168.200.51] /var/www/html/.htaccess: DirectoryIndex not allowed here +</code></p></div> + <p>Cela signifie soit que vous utilisez une directive qui n'est + jamais permise dans les fichiers <code>.htaccess</code>, soit + que vous n'avez tout simplement pas défini la directive + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à un niveau + suffisant pour la directive que vous utilisez. Consultez la + documentation de cette directive pour déterminer quel cas + s'applique.</p> + + <p>Le journal des erreurs peut aussi vous signaler une erreur de + syntaxe dans l'usage de la directive elle-même.</p> + + <div class="example"><p><code> + [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters + </code></p></div> + + <p>Dans ce cas, le message d'erreur sera spécifique à l'erreur + de syntaxe que vous avez commise.</p> +</div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html.ja.utf8 b/docs/manual/howto/htaccess.html.ja.utf8 new file mode 100644 index 0000000..6d42801 --- /dev/null +++ b/docs/manual/howto/htaccess.html.ja.utf8 @@ -0,0 +1,417 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache チュートリアル: .htaccess ファイル</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> + +<p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更する方法を +提供します。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess ファイル</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">.htaccess ファイルとは何か/その使い方</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when">いつ .htaccess ファイルを使う(使わない)か。</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how">ディレクティブの適用のされ方</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth">認証の例</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">SSI の例</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI の例</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">問題解決</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">.htaccess ファイル</a></h2> + <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">.htaccess ファイルとは何か/その使い方</a></h2> + + + <p><code>.htaccess</code> ファイル (「分散設定ファイル」) は + ディレクトリ毎に設定を変更する方法を提供します。ディレクティブの + 書かれたファイルをディレクトリに置くことで、そのディレクトリとその + サブディレクトリすべてにディレクティブを適用させることができます。</p> + + <div class="note"><h3>注:</h3> + <p><code>.htaccess</code> ファイルを別の名前にしたい場合は、 + <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> ディレクティブを + 使って変更することができます。例えば、そのファイルを <code>.config</code> + という名前にしたい場合は、以下の設定をサーバ設定ファイルに入れることが + できます:</p> + + <div class="example"><p><code> + AccessFileName .config + </code></p></div> + </div> + + <p>一般に、<code>.htaccess</code> ファイルの構文は + <a href="../configuring.html#syntax">主設定ファイル</a> + と同じです。これらのファイルに書くことのできるディレクティブは <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブにより決まります。 + このディレクティブは、<code>.htaccess</code> ファイルに + 書かれたディレクティブの中で、、 + どのディレクティブが適用されるかをカテゴリー単位で指定します。 + <code>.htaccess</code> に書くことのできるディレクティブであれば、 + 説明文書には「上書き」という項目があり、.htaccess に書くことができるように + なるための <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> の値が指定されています。</p> + + <p>例えば、<code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code> ディレクティブの説明を + 見ると、<code>.htaccess</code> ファイルでの使用が許可されていることが + わかります。 (ディレクティブの概要の所にある「コンテキスト」と書かれている + 行を見てください。) <a href="../mod/directive-dict.html#Context">上書き</a>と書かれている行には + <code>FileInfo</code> とあります。ですから、<code>.htaccess</code> 中の + このディレクティブが有効になるためには、少なくとも + <code>AllowOverride FileInfo</code> が設定されている必要があります。</p> + + <div class="example"><h3>例:</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">コンテキスト:</a></td> + <td>サーバ設定ファイル,バーチャルホスト,ディレクトリ,.htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">上書き:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>あるディレクティブを <code>.htaccess</code> ファイルに書くことができるか + どうかわからないときは、そのディレクティブの説明を探して、".htaccess" + のための「コンテキスト」の行を調べてください。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when">いつ .htaccess ファイルを使う(使わない)か。</a></h2> + + <p>一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、 + <code>.htaccess</code> ファイルの使用は極力避けてください。 + 世の中には、例えば、ユーザ認証は常に <code>.htaccess</code> ファイルで + 行なわなければならない、という誤解が広まっていますが、まったくそんなことは + ありません。ユーザ認証の設定はサーバ主設定ファイルに書くことができ、 + 実際、その方がより良い設定方法です。</p> + + <p><code>.htaccess</code> ファイルはコンテンツ提供者がディレクトリ毎の + 設定を行ないたいけれど、サーバシステムの root アクセス権限を持っていない + という場合にのみ使うべきものです。サーバ管理者が頻繁に設定変更を行ないたくは + ない、というときには個々のユーザが <code>.htaccess</code> ファイルを使って + 自分で設定の変更を行なうことを許可した方が良いときもあるでしょう。 + これは特に、ISP が複数のユーザのサイトを一つのマシンでホストしていて、 + 各ユーザが設定の変更をできるようにしたいようなときにあてはまります。</p> + + <p>しかし、普通は可能であれば <code>.htaccess</code> ファイルの使用は + 避けてください。<code>.htaccess</code> ファイルに書こうと考えるような + すべての設定は、サーバの主設定ファイルの <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> セクションで同じように行なうことが + できます。</p> + + <p><code>.htaccess</code> ファイルの使用を避ける理由は主に二つあります。</p> + + <p>一つ目はサーバの性能の問題です。<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブが + <code>.htaccess</code> ファイルの設定を許可している場合は、Apache は + 各ディレクトリで <code>.htaccess</code> ファイルを探します。 + ですから、<code>.htaccess</code> ファイルを許可すると、実際に使用しているか + どうかに関わらず、性能の低下を招くことになります! また、<code>.htaccess</code> + ファイルは文書がリクエストされる度に読み込まれます。</p> + + <p>さらに、Apache は適用すべきディレクティブを集めるために、すべての + 上位のディレクトリの <code>.htaccess</code> ファイルを探す必要があることにも + 注意してください。(<a href="#how">ディレクティブが適用される方法</a>を + 参照してください。)ですから、<code>/www/htdocs/example</code> にある + ファイルがリクエストされたときは、Apache は以下のファイルを調べます。</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </code></p></div> + + <p>ですから、そのディレクトリのそれぞれのファイルへのアクセスに対して、 + 上の例のファイルがまったく存在しないときでも、追加のファイルシステムの + アクセスが行なわれることになります。(これは、<code>.htaccess</code> が + <code>/</code> に対して有効になっているときの場合で、普通はそうなって + いないことに注意してください。)</p> + + <p>二つ目はセキュリティです。ユーザにサーバの設定を変更することを + 許可することになりますので、あなた自身が管理できない変更をされる + 恐れがあります。ユーザにこの特権を与えるのが良いのかどうか、十分 + 検討してください。また、ユーザに与える権限が必要なものよりも少なすぎると、 + 余分な技術サポート報告を受け取るようになる可能性が高いことにも + 注意してください。確実に、ユーザにどの程度の権限を与えたか明確に告げるように + してください。<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> に + 何を設定したかということと、関連する文書を示すことで、 + 後々の混乱をぐっと減らすことが + できます。</p> + + <p>ところで、ディレクティブの書かれた <code>.htaccess</code> を + <code>/www/htdocs/example</code> に置くことと、同じディレクティブを + 主サーバ設定の Directory セクション + <code><Directory /www/htdocs/example></code> に書くことは + 完全に等価です:</p> + + <p><code>/www/htdocs/example</code> の <code>.htaccess</code> ファイル:</p> + + <div class="example"><h3><code>/www/htdocs/example</code> の .htaccess ファイルの + 内容</h3><p><code> + AddType text/example .exm + </code></p></div> + + <div class="example"><h3><code>httpd.conf のセクション</code> + file</h3><p><code> + <Directory /www/htdocs/example><br /> + <span class="indent"> + AddType text/example .exm<br /> + </span> + </Directory> + </code></p></div> + + <p>しかし、この設定はサーバ設定ファイルに書いた方がパフォーマンスの + 低下が少なくなります。ファイルがリクエストされる度に + 読み込まれる代わりに、Apache の起動時に 1 回だけ読み込めば + よくなるからです。</p> + + <p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブの + 値を <code>none</code> に設定することで <code>.htaccess</code> ファイル + の使用を完全に無効にすることができます。</p> + + <div class="example"><p><code> + AllowOverride None + </code></p></div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how">ディレクティブの適用のされ方</a></h2> + + <p><code>.htaccess</code> ファイルの設定ディレクティブは <code>.htaccess</code> + ファイルの存在するディレクトリと、そのサブディレクトリすべてに適用されます。 + しかし、上の階層のディレクトリにも <code>.htaccess</code> ファイルが + 存在するかもしれないことを覚えておくことは大切です。ディレクティブは現れる + 順番に適用されます。ですから、あるディレクトリの <code>.htaccess</code> は + ディレクトリツリーのより上の階層の <code>.htaccess</code> ファイルの + 設定を上書きするかもしれません。そして、その <code>.htaccess</code> も + より上の階層で書かれたディレクティブを上書きしたり、主サーバ設定ファイル + そのものの設定を上書きしたりしているかもしれません。</p> + + <p>例:</p> + + <p>ディレクトリ <code>/www/htdocs/example1</code> に以下の内容の + <code>.htaccess</code> ファイルがあります:</p> + + <div class="example"><p><code> + Options +ExecCGI + </code></p></div> + + <p>(注: <code>.htaccess</code> + ファイルで "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" ディレクティブが有効になるためには、 + "<code>AllowOverride Options</code>" を有効にする必要があります。)</p> + + <p>ディレクトリ <code>/www/htdocs/example1/example2</code> には + 以下のような <code>.htaccess</code> ファイルがあります:</p> + + <div class="example"><p><code> + Options Includes + </code></p></div> + + <p>二つめの <code>.htaccess</code> により、ディレクトリ + <code>/www/htdocs/example1/example2</code> では CGI の実行は + 許可されません。これは、<code>Options Includes</code> のみが + 効力を持ち、それがすべての以前の設定を上書きするからです。</p> + + <h3><a name="merge" id="merge">メイン設定ファイルに対する + .htaccess のマージ</a></h3> + + <p>As discussed in the documentation on <a href="../sections.html">Configuration Sections</a>, + <code>.htaccess</code> files can override the <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> sections for + the corresponding directory, but will be overriden by other types + of configuration sections from the main configuration files. This + fact can be used to enforce certain configurations, even in the + presence of a liberal <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> setting. For example, to + prevent script execution while allowing anything else to be set in + <code>.htaccess</code> you can use:</p> + <p><a href="../sections.html">セクションの設定</a> + に記載されているように、<code>.htaccess</code> ファイルを使って + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + セクションの設定をディレクトリ毎に上書きできますが、 + メイン設定ファイル中にある、他の種類の設定セクションによって + さらに上書きされることもあります。 + この特徴を使って、 + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + で自由度の高い設定があったとしても、ある特定の設定が確実に + 反映されるようにできます。例えば、CGI スクリプトの実行は + 不許可に、かつ、<code>.htaccess</code> でその他の項目は + 設定できるように、という場合は次のようにできます :</p> + + <div class="example"><p><code> +<Directory /><br /> +<span class="indent"> +Allowoverride All<br /> +</span> +</Directory><br /> +<br /> +<Location /><br /> +<span class="indent"> +Options +IncludesNoExec -ExecCGI<br /> +</span> +</Location> + </code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth">認証の例</a></h2> + + <p>もし認証の方法を知るためにこの部分に直接来たのであれば、次のことを + 知っておくことが重要です。よくある誤解に、パスワード認証を行なうためには + <code>.htaccess</code> ファイルを使う必要がある、というものがあります。 + これは正しくありません。主サーバ設定ファイルの <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> セクションに + 認証用のディレクティブを書く方が推奨される方法で、<code>.htaccess</code> + ファイルは主サーバ設定ファイルを変更できないときにのみ使用すべきです。 + いつ <code>.htaccess</code> ファイルを使うべきで、いつ使うべきではないかに + ついては <a href="#when">上</a>を参照してください。</p> + + <p>以上のことをふまえた上で、もし <code>.htaccess</code> の使用が + まだ必要だと思う場合は、次のようなものが望みのことをしてくれるかも + しれません。</p> + + <p><code>.htaccess</code> ファイルの内容:</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "Password Required"<br /> + AuthUserFile /www/passwords/password.file<br /> + AuthGroupFile /www/passwords/group.file<br /> + Require Group admins + </code></p></div> + + <p>これらのディレクティブが有効になるためには、 + <code>AllowOverride AuthConfig</code> が有効でなくてはならないことに + 注意してください。</p> + + <p>認証と承認については <a href="auth.html">認証チュートリアル</a>を + 参照してください。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">SSI の例</a></h2> + + <p>もう一つの <code>.htaccess</code> ファイルのよくある利用法は + 特定のディレクトリで SSI を有効にすることです。これは、望みのディレクトリの + <code>.htaccess</code> ファイルに以下の設定ディレクティブを書くことで + 達成できます:</p> + + <div class="example"><p><code> + Options +Includes<br /> + AddType text/html shtml<br /> + AddHandler server-parsed shtml + </code></p></div> + + <p>これらのディレクティブが有効になるためには、 + <code>AllowOverride Options</code> と <code>AllowOverride + FileInfo</code> が有効になっている必要があることに注意してください。</p> + + <p>よりまとまった SSI の説明は <a href="ssi.html">SSI チュートリアル</a>を + 参照してください。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">CGI の例</a></h2> + + <p>最後に、特定のディレクトリで CGI プログラムの実行を許可したいことが + あるでしょう。これは以下の設定で行なうことができます:</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + AddHandler cgi-script cgi pl + </code></p></div> + + <p>もしくは、あるディレクトリのすべてのファイルが CGI プログラムと + みなされるようにしたいなら、以下の設定で実現することができます:</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + SetHandler cgi-script + </code></p></div> + + <p>これらのディレクティブが有効になるためには、 + <code>AllowOverride Options</code> と <code>AllowOverride + FileInfo</code> が有効である必要があることに注意してください。</p> + + <p>CGI プログラムと設定のよりまとまった説明は <a href="cgi.html">CGI チュートリアル</a>を参照してください。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">問題解決</a></h2> + + <p>設定ディレクティブを <code>.htaccess</code> ファイルに書いたけれども、 + 期待した効果が得られないときには、いくつかの原因が考えられます。</p> + + <p>一番よくあることは、設定ディレクティブが考慮されるようには + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> が設定されていない + というものです。該当のファイルのスコープに <code>AllowOverride None</code> + が設定されていないことを確認してください。これを調べるための良い方法は、 + <code>.htaccess</code> ファイルにごみを書いて、リロードすることです。 + サーバのエラーが生成されないときは、ほぼ確実に <code>AllowOverride + None</code> が設定されている状態になっています。</p> + + <p>そうではなく、文書をアクセスしようとしたときにエラーが発生している + ときは、Apache のエラーログを調べてください。<code>.htaccess</code> ファイルで + 使用されたディレクティブが許可されていない、ということを知らせている + 可能性が高いです。または、構文の間違いがあることを述べているかもしれません。 + その場合にはまずそれを修正する必要があります。</p> + +</div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html.ko.euc-kr b/docs/manual/howto/htaccess.html.ko.euc-kr new file mode 100644 index 0000000..69d856f --- /dev/null +++ b/docs/manual/howto/htaccess.html.ko.euc-kr @@ -0,0 +1,363 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ġ 丮: .htaccess - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ġ 丮: .htaccess </h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> + +<p><code>.htaccess</code> Ͽ 丮 + ִ.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what"≯/ ϴ°</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when"> .htaccess ϳ + (Ȥ ʳ)</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how"> þ ϳ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth"> </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Server Side Includes </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">ذ</a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">.htaccess </a></h2> + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what"≯/ ϴ°</a></h2> + + + <p><code>.htaccess</code> (Ȥ "л ") + ϸ 丮 ִ. þ + ִ Ư 丮 θ, 丮 + 丮 þ Ѵ.</p> + + <div class="note"><h3>:</h3> + <p><code>.htaccess</code> ϸ ٸ ϰ ʹٸ, + <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> þ + Ͽ ִ. , <code>.config</code> + ϸ Ϸ Ͽ ߰Ѵ.</p> + + <div class="example"><p><code> + AccessFileName .config + </code></p></div> + </div> + + <p>Ϲ <code>.htaccess</code> <a href="../configuring.html#syntax">ּ</a> + . <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + þ Ͽ ִ Ѵ. þ + <code>.htaccess</code> Ͽ ϴ þ з Ѵ. + þ <code>.htaccess</code> Ͽ ִٸ, + ش þ Override þ ϱ + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + ˷ش.</p> + + <p> , <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code> + þ þ <code>.htaccess</code> Ͽ + ִ. (þ .) + <a href="../mod/directive-dict.html#Context">Override</a> + ٿ <code>FileInfo</code> ִ. þ + <code>.htaccess</code> Ͽ ϱؼ ּ + <code>AllowOverride FileInfo</code> ʿϴ.</p> + + <div class="example"><h3>:</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">:</a></td> + <td>ּ, ȣƮ, directory, .htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>Ư þ <code>.htaccess</code> Ͽ + ִ ñϸ þ ".htaccess" + ִ ȮѴ.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when"> .htaccess ϳ + (Ȥ ʳ)</a></h2> + + <p>Ϲ ּϿ 찡 ƴ϶ + <code>.htaccess</code> ϸ ȵȴ. , + <code>.htaccess</code> Ͽ ־ + Ѵٴ ߸ ˷ ش. ̴ ƴϴ. ּ + ְ, ̷ Ѵ.</p> + + <p><code>.htaccess</code> ڰ 丮 + ٸϰ ýۿ root + 쿡 Ѵ. ڰ ϰ + Ϲ ڰ <code>.htaccess</code> + ϵ ϴ ٶϴ. , + ǻͿ Ʈ ϴ ISP ڰ + ڽ ϰ 찡 ϴ.</p> + + <p> Ϲ <code>.htaccess</code> + ؾ Ѵ. <code>.htaccess</code> Ͽ ϴ þ + ּ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ǰ ȿ + ִ.</p> + + <p> ΰ ū <code>.htaccess</code> + ؾ Ѵ.</p> + + <p>ù° ̴. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>.htaccess</code> + ϵ ϸ, ġ 丮 + <code>.htaccess</code> ã´. + <code>.htaccess</code> ϸ + ʴ 쿡 ! , <code>.htaccess</code> + ûҶ оδ.</p> + + <p>Դٰ ؾ ϴ ü þ ġ + 丮 <code>.htaccess</code> ã´. + (<a href="#how"> þ ϳ</a> .) + <code>/www/htdocs/example</code> 丮 ִ + ûϸ, ġ ϵ ãƾ Ѵ.</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </code></p></div> + + <p> 丮 ִ + Ͻý 4 ؾ Ѵ. + (<code>/</code> <code>.htaccess</code> + 츦 Ѵ. ʴ´.)</p> + + <p>ι° ̴. ڿ + ָ ȭ Ͼ ִ. ڿ + ̷ ϶. , ڰ ϴ ͺ + ָ û ´. ڿ + Ȯ ˷. ڿ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> Ͽ + Ȯ ˸ ϸ ȥ + ִ.</p> + + <p>þ <code>/www/htdocs/example</code> 丮 + <code>.htaccess</code> δ Ͱ ּ + <code><Directory /www/htdocs/example></code> Directory + δ .</p> + + <p><code>/www/htdocs/example</code> ִ + <code>.htaccess</code> :</p> + + <div class="example"><h3><code>/www/htdocs/example</code> ִ + .htaccess </h3><p><code> + AddType text/example .exm + </code></p></div> + + <div class="example"><h3><code>httpd.conf</code> Ͽ ִ </h3><p><code> + <Directory /www/htdocs/example><br /> + <span class="indent"> + AddType text/example .exm<br /> + </span> + </Directory> + </code></p></div> + + <p> û ʰ ġ + Ҷ ѹ б Ͽ + ϸ .</p> + + <p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> þ + <code>none</code> ϸ <code>.htaccess</code> + .</p> + + <div class="example"><p><code> + AllowOverride None + </code></p></div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how"> þ ϳ</a></h2> + + <p><code>.htaccess</code> ߰ 丮 丮 + 丮 <code>.htaccess</code> Ͽ ִ + þ Ѵ. 丮 <code>.htaccess</code> + ؾ Ѵ. ߰ þ Ѵ. Ư + 丮 ִ <code>.htaccess</code> 丮 + ִ <code>.htaccess</code> þ ȿ + ְ, 丮 ִ þ 丮 Ȥ + ּϿ ִ þ ȿ ִ.</p> + + <p>:</p> + + <p><code>/www/htdocs/example1</code> 丮 + <code>.htaccess</code> ִ.</p> + + <div class="example"><p><code> + Options +ExecCGI + </code></p></div> + + <p>(: <code>.htaccess</code> Ͽ "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" þ Ϸ + "<code>AllowOverride Options</code>" ʿϴ.)</p> + + <p><code>/www/htdocs/example1/example2</code> 丮 + <code>.htaccess</code> ִ.</p> + + <div class="example"><p><code> + Options Includes + </code></p></div> + + <p> ι° <code>.htaccess</code> + <code>Options Includes</code> ȿ + <code>/www/htdocs/example1/example2</code> + 丮 CGI ʴ´.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth"> </a></h2> + + <p> ˱ ٷ ̰ д´ٸ + ִ. ȣ Ϸ <code>.htaccess</code> + ʿϴٴ ذ θ ִ. ̴ ƴϴ. + ּ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ǿ þ + δ ϴ ̰, ּ + 쿡 <code>.htaccess</code> ؾ + Ѵ. <code>.htaccess</code> ؾ ϴ + ƾ ϴ <a href="#when"></a> + Ͽ.</p> + + <p>տ <code>.htaccess</code> + ʿϴٰ Ǹ Ʒ ̴.</p> + + <p><code>.htaccess</code> .</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "Password Required"<br /> + AuthUserFile /www/passwords/password.file<br /> + AuthGroupFile /www/passwords/group.file<br /> + Require Group admins + </code></p></div> + + <p> þ ϱؼ + <code>AllowOverride AuthConfig</code> þ ʿ + ϶.</p> + + <p> Ѻο ڼ <a href="auth.html"> + 丮</a> ٶ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">Server Side Includes </a></h2> + + <p>Ǵٸ Ϲ <code>.htaccess</code> 뵵 + Ư 丮 Server Side Includes ϰ + ̴. ϴ 丮 <code>.htaccess</code> Ͽ + þ ϸ ȴ.</p> + + <div class="example"><p><code> + Options +Includes<br /> + AddType text/html shtml<br /> + AddHandler server-parsed shtml + </code></p></div> + + <p> þ Ϸ <code>AllowOverride Options</code> + <code>AllowOverride FileInfo</code> ʿ ϶.</p> + + <p>server-side includes ڼ <a href="ssi.html">SSI 丮</a> ٶ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">CGI </a></h2> + + <p> <code>.htaccess</code> Ͽ Ư + 丮 CGI α ϰ ʹٸ, + Ѵ.</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + AddHandler cgi-script cgi pl + </code></p></div> + + <p>Ȥ 丮 ִ CGI α + óϰ ʹٸ ϴ.</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + SetHandler cgi-script + </code></p></div> + + <p> þ Ϸ <code>AllowOverride Options</code> + <code>AllowOverride FileInfo</code> ʿ ϶.</p> + + <p>CGI αְ ڼ <a href="cgi.html">CGI 丮</a> ٶ.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">ذ</a></h2> + + <p><code>.htaccess</code> Ͽ þ ϴ + ʴ ִ.</p> + + <p> Ϲ þ ϰ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> + . Ǵ <code>AllowOverride None</code> + ȮѴ. <code>.htaccess</code> ƹԳ + ٽ Ͽ ˻غ ִ. + Ȯ + <code>AllowOverride None</code> .</p> + + <p>ݴ Ҷ ϸ ġ α + . Ƹ <code>.htaccess</code> Ͽ ִ þ + ʴ´ٰ ̴. ƴϰ ִٸ + ģ.</p> + +</div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/htaccess.html.pt-br b/docs/manual/howto/htaccess.html.pt-br new file mode 100644 index 0000000..1468957 --- /dev/null +++ b/docs/manual/howto/htaccess.html.pt-br @@ -0,0 +1,407 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutorial do Apache: arquivos .htaccess - Servidor HTTP Apache Versão 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Diretrizes</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossário</a> | <a href="../sitemap.html">Mapa do site</a></p> +<p class="apache">Servidor HTTP Apache Versão 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentação</a> > <a href="../">Versão 2.4</a> > <a href="./">How-To / Tutoriais</a></div><div id="page-content"><div id="preamble"><h1>Tutorial do Apache: arquivos .htaccess</h1> +<div class="toplang"> +<p><span>Línguas Disponíveis: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" title="Português (Brasil)"> pt-br </a></p> +</div> +<div class="outofdate">Esta tradução pode estar desatualizada. + Confira a versão em Inglês para mudanças recentes.</div> + +<p>Arquivos <code>.htaccess</code> oferecem um meio de fazer mudanças + nas configurações por-diretório.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Arquivos .htaccess </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">O que eles são/Como usá-los</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#when">Quando (não) usar arquivos .htaccess</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#how">Como as diretrizes são aplicadas</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#auth">Exemplo de Autenticação</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Exemplo de Server Side Includes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Exemplo de CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Resolvendo Problemas</a></li> +</ul><h3>Veja também</h3><ul class="seealso"><li><a href="#comments_section">Comentários</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Arquivos .htaccess </a></h2> + <table class="related"><tr><th>Módulos Relacionados</th><th>Diretrizes Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">O que eles são/Como usá-los</a></h2> + + + <p>Os arquivos <code>.htaccess</code> (ou "arquivos de + configuração distribuída") oferecem um meio de fazer mudanças nas + configurações por-diretório. Um arquivo, contendo uma ou mais + diretrizes de configurações, é colocado em um diretório + em particular, e as diretrizes se aplicam para aquele diretório e todos + os seu subdiretórios subseqüentes.</p> + + <div class="note"><h3>Nota:</h3> + <p>Se você quiser renomear o seu arquivo <code>.htaccess</code> + para outro nome, você deve usar a diretriz <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Por exemplo, se você + prefere que o arquivo se chame <code>.config</code>, então você + pode adicionar a seguinte linha ao seu arquivo de configuração + do servidor:</p> + + <div class="example"><p><code> + AccessFileName .config + </code></p></div> + </div> + + <p>No geral, arquivos <code>.htaccess</code> usam a mesma sintaxe + que os <a href="../configuring.html#syntax">arquivos de + configuração principal</a>. O que você pode colocar nesses + arquivos é determinado pele diretriz <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Essa diretriz especifica, + em categorias, quais diretrizes serão aceitas caso sejam + encontradas em um arquivo <code>.htaccess</code>. Se uma diretriz + for permitida em um arquivo <code>.htaccess</code>, a documentação + para essa diretriz irá conter uma seção <em>Override</em>, + especificando que valor precisa estar em <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> para que esta diretriz + seja permitida.</p> + + <p>Por exemplo, se você procurar na documentação pela diretriz + <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, você + achará que ela é permitida nos arquivos <code>.htaccess</code>. + (Veja a linha Contexto no sumário das diretivas.) A + linha <a href="../mod/directive-dict.html#Context">Override</a> lê + <code>FileInfo</code>. Então, você deve ao menos ter + <code>AllowOverride FileInfo</code> para que essa diretriz seja + aceita nos arquivos <code>.htaccess</code>.</p> + + <div class="example"><h3>Exemplo:</h3><table> + <tr> + <td><a href="../mod/directive-dict.html#Context">Contexto:</a></td> + <td>configuração do servidor, hospedeiros virtuais, diretório, .htaccess</td> + </tr> + + <tr> + <td><a href="../mod/directive-dict.html#Override">Override:</a></td> + <td>FileInfo</td> + </tr> + </table></div> + + <p>Se você estiver incerto se uma diretriz em particular é + aceita em um arquivo <code>.htaccess</code>, procure na + documentação por essa diretriz, e verifique a linha de + Contexto por ".htaccess".</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="when" id="when">Quando (não) usar arquivos .htaccess</a></h2> + + <p>No geral, você nunca deve usar arquivos <code>.htaccess</code> + a não ser que você não tenha acesso ao arquivo de configuração + principal do servidor. Existe, por exemplo, um erro de concepção + que dita que a autenticação de usuários sempre deve + ser feita usando os arquivos <code>.htaccess</code>. Esse + simplesmente não é o caso. Você pode usar as configurações de + autenticação de usuário no arquivo de configuração principal do + servidor, e isso é, de fato, a maneira mais adequada de se fazer + as coisas.</p> + + <p>Arquivos <code>.htaccess</code> devem ser usados em casos onde + os provedores de conteúdo do site precisem fazer mudanças na + configuração do servidor por-diretório, mas não tem + acesso <em>root</em> ao sistema do servidor. Caso o administrador do + servidor não esteja disposto a fazer mudanças freqüentes nas + configurações do servidor, é desejável permitir que os + usuários possam fazer essas mudanças através de arquivos + <code>.htaccess</code> eles mesmos. Isso é particularmente + verdade, por exemplo, em casos onde provedores estão fornecendo + múltiplos sites para usuários em apenas uma máquina, e querem que + seus usuários possam alterar suas configurações.</p> + + <p>No entanto, de modo geral, o uso de arquivos <code>.htaccess</code> + deve ser evitado quando possível. Quaisquer configurações + que você considerar acrescentar em um arquivo <code>.htaccess</code>, podem + ser efetivamente colocadas em uma seção <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> no arquivo principal de + configuração de seu servidor.</p> + + <p>Existem duas razões principais para evitar o uso de arquivos + <code>.htaccess</code>.</p> + + <p>A primeira delas é a performance. Quando <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> é configurado para + permitir o uso de arquivos <code>.htaccess</code>, o Apache procura + em todos diretórios por arquivos <code>.htaccess</code>. + Logo, permitir arquivos <code>.htaccess</code> causa um impacto na + performance, mesmo sem você usá-los de fato! Além disso, + o arquivo <code>.htaccess</code> é carregado toda vez que um documento + é requerido.</p> + + <p>Além disso, note que o Apache precisa procurar pelos arquivos + <code>.htaccess</code> em todos os diretórios superiores, para ter + o complemento total de todas as diretivas que devem ser + aplicadas. (Veja a seção <a href="#how">como as diretrizes são + aplicadas</a>.) Então, se um arquivo de um diretório + <code>/www/htdocs/example</code> é requerido, o Apache precisa + procurar pelos seguintes arquivos:</p> + + <div class="example"><p><code> + /.htaccess<br /> + /www/.htaccess<br /> + /www/htdocs/.htaccess<br /> + /www/htdocs/example/.htaccess + </code></p></div> + + <p>Assim, para cada acesso de arquivo fora desse diretório, + existem 4 acessos ao sistema de arquivos adicionais, mesmo + que nenhum desses arquivos estejam presentes. (Note que esse + só será o caso se os arquivos <code>.htaccess</code> + estiverem habilitados para <code>/</code>, o que + normalmente não é o verdade.)</p> + + <p>A segunda consideração é relativa à segurança. + Você está permitindo que os usuários modifiquem as + configurações do servidor, o que pode resultar em mudanças + que podem fugir ao seu controle. Considere com cuidado se você quer + ou não dar aos seus usuários esses privilégios. Note também + que dar aos usuários menos privilégios que eles precisam, acarreta em + pedidos de suporte técnico adicionais. Tenha certeza que você comunicou + aos usuários que nível de privilégios você os deu. + Especificar exatamente o que você configurou na diretriz <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, e direcioná-los para a + documentação relevante, irá poupá-lo de muita confusão + depois.</p> + + <p>Perceba que é exatamente equivalente colocar o arquivo + <code>.htaccess</code> em um diretório + <code>/www/htdocs/example</code> contendo uma diretriz, e + adicionar a mesma diretriz em uma seção <em>Directory</em> + <code><Directory /www/htdocs/example></code> na configuração + principal do seu servidor:</p> + + <p>Arquivo <code>.htaccess</code> em <code>/www/htdocs/example</code>:</p> + + <div class="example"><h3>Conteúdo de um arquivo .htaccess em + <code>/www/htdocs/example</code></h3><p><code> + AddType text/example .exm + </code></p></div> + + <div class="example"><h3>Seção do seu arquivo <code>httpd.conf</code></h3><p><code> + <Directory /www/htdocs/example><br /> + <span class="indent"> + AddType text/example .exm<br /> + </span> + </Directory> + </code></p></div> + + <p>No entanto, adicionando isso ao seu arquivo de configuração do + servidor resultará em uma menor perda de performance, na medida que + a configuração é carregada no momento da inicialização do + servidor, ao invés de toda que que um arquivo é requerido.</p> + + <p>O uso de arquivos <code>.htaccess</code> pode ser totalmente + desabilitado, ajustando a diretriz <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> para <code>none</code>:</p> + + <div class="example"><p><code> + AllowOverride None + </code></p></div> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="how" id="how">Como as diretrizes são aplicadas</a></h2> + + <p>As diretrizes de configuração que se encontram em um arquivo + <code>.htaccess</code> são aplicadas para o diretório no qual o + arquivo <code>.htaccess</code> se encontra, e para todos os + subdiretórios ali presentes. Mas, é importante lembrar também que + podem existir arquivos <code>.htaccess</code> no diretórios + superiores. As diretrizes são aplicadas na ordem que são + achadas. Logo, um arquivo <code>.htaccess</code> em um diretório + em particular, pode sobrescrever as diretrizes encontradas em um + diretório acima deste em sua respectiva árvore. Estes, por sua vez, + podem ter suas diretrizes sobrescritas por diretrizes ainda mais + acima, ou no próprio arquivo de configuração principal do + servidor.</p> + + <p>Exemplo:</p> + + <p>No diretório <code>/www/htdocs/example1</code> nós temos + um arquivo <code>.htaccess</code> contendo o seguinte:</p> + + <div class="example"><p><code> + Options +ExecCGI + </code></p></div> + + <p>(Nota: você deve ter "<code>AllowOverride Options</code>" para + permitir o uso da diretriz "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" nos arquivos + <code>.htaccess</code> .)</p> + + <p>No diretório <code>/www/htdocs/example1/example2</code> nós temos + um arquivo <code>.htaccess</code> contendo:</p> + + <div class="example"><p><code> + Options Includes + </code></p></div> + + <p>Devido a esse segundo arquivo <code>.htaccess</code>, no + diretório <code>/www/htdocs/example1/example2</code>, a execução + de scripts CGI não é permitida, pois somente <code>Options + Includes</code> está em efeito, o que sobrescreve completamente + quaisquer outros ajustes previamente configurados.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="auth" id="auth">Exemplo de Autenticação</a></h2> + + <p>Se você veio diretamente à esta parte do documento para + aprender como fazer autenticação, é importante notar uma + coisa. Existe uma concepção errada, mas muito comum, de que é + necessário o uso de arquivos <code>.htaccess</code> para implementar + a autenticação por senha. Este não é o caso. Colocar + diretrizes de senha em uma seção <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, no seu arquivo principal de + configuração do servidor, é a melhor maneira de se implementar + isto, e os arquivos <code>.htaccess</code> devem ser usados apenas + se você não tem acesso ao arquivo principal de configuração do + servidor. Veja <a href="#when">acima</a> a discussão sobre quando + você deve e quando não deve usar os arquivos + <code>.htaccess</code>.</p> + + <p>Dito isso, se você ainda acredita que precisa usar um arquivo + <code>.htaccess</code>, a configuração a seguir provavelmente + funcionará para você.</p> + + <p>Conteúdo de um arquivo <code>.htaccess</code>:</p> + + <div class="example"><p><code> + AuthType Basic<br /> + AuthName "Password Required"<br /> + AuthUserFile /www/passwords/password.file<br /> + AuthGroupFile /www/passwords/group.file<br /> + Require Group admins + </code></p></div> + + <p>Note que <code>AllowOverride AuthConfig</code> precisa estar + habilitado para que estas diretrizes tenham efeito.</p> + + <p>Por favor veja o <a href="auth.html">tutorial de + autenticação</a> para uma discussão mais completa sobre + autenticação e autorização.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="ssi" id="ssi">Exemplo de Server Side Includes</a></h2> + + <p>Outro uso comum de arquivos <code>.htaccess</code> é ativar o + Server Side Includes para um diretório em particular. Isto pode + ser feito com as seguintes diretrizes de configuração, colocadas em + um arquivo <code>.htaccess</code> no diretório desejado:</p> + + <div class="example"><p><code> + Options +Includes<br /> + AddType text/html shtml<br /> + AddHandler server-parsed shtml + </code></p></div> + + <p>Note que ambos <code>AllowOverride Options</code> e + <code>AllowOverride FileInfo</code> precisam estar habilitados + para essas diretrizes terem efeito.</p> + + <p>Por favor veja o <a href="ssi.html">tutorial de SSI</a> para + uma discussão mais completa sobre server-side includes.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Exemplo de CGI</a></h2> + + <p>Finalmente, você pode querer que um arquivo + <code>.htaccess</code> permita a execução de programas CGI em um + diretório em particular. Isto pode ser implementado com as + seguintes configurações:</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + AddHandler cgi-script cgi pl + </code></p></div> + + <p>Alternativamente, se você desejar que todos os arquivos de um + dado diretório, sejam considerados programas CGI, isso pode ser + feito com a seguinte configuração:</p> + + <div class="example"><p><code> + Options +ExecCGI<br /> + SetHandler cgi-script + </code></p></div> + + <p>Note que ambos <code>AllowOverride Options</code> e + <code>AllowOverride FileInfo</code> precisam estar habilitados + para que essas diretrizes tenham quaisquer efeito.</p> + + <p>Por favor veja o <a href="cgi.html">tutorial de CGI + tutorial</a> para uma discussão mais completa sobre programação + e configuração CGI.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Resolvendo Problemas</a></h2> + + <p>Quando você adiciona diretrizes de configuração em um arquivo + <code>.htaccess</code>, e não obtém o efeito desejado, existe uma + série de pontos que podem estar errados.</p> + + <p>Mais comumente, o problema é que a diretriz <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> não está habilitada + corretamente para que as suas diretrizes de configurações sejam + honradas. Verifique se você não possui <code>AllowOverride + None</code> ajustado para o escopo do arquivo em questão. Um bom + meio de testar isso é colocar "lixo" em seu arquivo + <code>.htaccess</code> e recarregá-lo. Se não for gerado nenhum + erro do servidor, certamente você tem <code>AllowOverride + None</code> habilitado.</p> + + <p>Se, por outro lado, você está obtendo erros do servidor ao + tentar acessar documentos, verifique o registro de erros do + Apache. Ele provavelmente irá indicar que a diretriz usada em + seu arquivo <code>.htaccess</code> não é permitida. + Alternativamente, ele pode acusar erros de sintaxe que você terá + que corrigir.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Línguas Disponíveis: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/htaccess.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/htaccess.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../pt-br/howto/htaccess.html" title="Português (Brasil)"> pt-br </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentários</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/htaccess.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licenciado sob a <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Diretrizes</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossário</a> | <a href="../sitemap.html">Mapa do site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/http2.html b/docs/manual/howto/http2.html new file mode 100644 index 0000000..7de4a43 --- /dev/null +++ b/docs/manual/howto/http2.html @@ -0,0 +1,13 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: http2.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: http2.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: http2.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/http2.html.en b/docs/manual/howto/http2.html.en new file mode 100644 index 0000000..8e96089 --- /dev/null +++ b/docs/manual/howto/http2.html.en @@ -0,0 +1,346 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>HTTP/2 guide - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>HTTP/2 guide</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/http2.html" title="English"> en </a> | +<a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div> + + <p>This is the howto guide for the HTTP/2 implementation in Apache httpd. This + feature is <em>production-ready</em> and you may expect interfaces and directives to + remain consistent releases. + </p> + </div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">The HTTP/2 protocol</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#implementation">HTTP/2 in Apache httpd</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#building">Build httpd with HTTP/2 support</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic-config">Basic Configuration</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#mpm-config">MPM Configuration</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#clients">Clients</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#tools">Useful tools to debug HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#push">Server Push</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#earlyhints">Early Hints</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code></li><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="protocol" id="protocol">The HTTP/2 protocol</a></h2> + + <p>HTTP/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 + you already know HTTP/1, you know 95% about HTTP/2 as well.</p> + <p>There has been a lot written about HTTP/2 and how it works. The most normative is, of course, + its <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> + (<a href="http://httpwg.org/specs/rfc7540.html">also available in more readable formatting, YMMV</a>). + So, there you'll find the nuts and bolts.</p> + <p>But, as RFC do, it's not really a good thing to read first. It's better to first understand + <em>what</em> a thing wants to do and then read the RFC about <em>how</em> it is done. A much + better document to start with is <a href="https://daniel.haxx.se/http2/">http2 explained</a> + by Daniel Stenberg, the author of <a href="https://curl.haxx.se">curl</a>. It is available in + an ever growing list of languages, too!</p> + <p>Too Long, Didn't read: there are some new terms and gotchas that need to be kept in mind while reading this document:</p> + <ul> + <li>HTTP/2 is a <strong>binary protocol</strong>, as opposed to HTTP 1.1 that is plain text. The latter is meant to be human readable (for example sniffing network traffic) meanwhile the former is not. More info in the official FAQ <a href="https://http2.github.io/faq/#why-is-http2-binary">question</a>.</li> + <li><strong>h2</strong> is HTTP/2 over TLS (protocol negotiation via ALPN).</li> + <li><strong>h2c</strong> is HTTP/2 over TCP.</li> + <li>A <strong>frame</strong> is the smallest unit of communication within an HTTP/2 connection, consisting of a header and a variable-length sequence of octets structured according to the frame type. More info in the official documentation <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer"> section</a>.</li> + <li>A <strong>stream</strong> is a bidirectional flow of frames within the HTTP/2 connection. The correspondent concept in HTTP 1.1 is a request/response message exchange. More info in the official documentation <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer"> section</a>.</li> + <li>HTTP/2 is able to run <strong>multiple streams</strong> of data over the same TCP connection, avoiding the classic HTTP 1.1 head of blocking slow request and avoiding to re-instantiate TCP connections for each request/response (KeepAlive patched the problem in HTTP 1.1 but did not fully solve it).</li> + </ul> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="implementation" id="implementation">HTTP/2 in Apache httpd</a></h2> + + <p>The HTTP/2 protocol is implemented by its own httpd module, aptly named + <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. It implements the complete set + of features described by RFC 7540 and supports HTTP/2 over cleartext (http:), as + well as secure (https:) connections. The cleartext variant is named '<code>h2c</code>', + the secure one '<code>h2</code>'. For <code>h2c</code> it allows the <em>direct</em> + mode and the <code>Upgrade:</code> via an initial HTTP/1 request.</p> + <p>One feature of HTTP/2 that offers new capabilities for web developers is + <a href="#push">Server Push</a>. See that section on how your web application + can make use of it.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="building" id="building">Build httpd with HTTP/2 support</a></h2> + + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> uses the library of <a href="https://nghttp2.org">nghttp2</a> + as its implementation base. In order to build <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> you need at least version 1.2.1 of + <code>libnghttp2</code> installed on your system.</p> + <p>When you <code>./configure</code> your Apache httpd source tree, you need to give it + '<code>--enable-http2</code>' as additional argument to trigger the build of the module. + Should your <code>libnghttp2</code> reside in an unusual place (whatever that is on your + operating system), you may announce its location with '<code>--with-nghttp2=<path></code>' + to <code>configure</code>.</p> + <p>While that should do the trick for most, they are people who might prefer a statically + linked <code>nghttp2</code> in this module. For those, the option <code>--enable-nghttp2-staticlib-deps</code> + exists. It works quite similar to how one statically links openssl to <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p> + <p>Speaking of SSL, you need to be aware that most browsers will speak HTTP/2 only on <code>https:</code> + URLs, so you need a server with SSL support. But not only that, you will need a SSL library + that supports the <code>ALPN</code> extension. If OpenSSL is the library you use, you need + at least version 1.0.2.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic-config" id="basic-config">Basic Configuration</a></h2> + + + <p>When you have a <code>httpd</code> built with <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> you need some + basic configuration for it becoming active. The first thing, as with every Apache module, + is that you need to load it:</p> + <pre class="prettyprint lang-config">LoadModule http2_module modules/mod_http2.so</pre> + + + <p>The second directive you need to add to your server configuration is</p> + <pre class="prettyprint lang-config">Protocols h2 http/1.1</pre> + + <p>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:</p> + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + <p>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:</p> + <pre class="prettyprint lang-config">Protocols http/1.1 +<VirtualHost ...> + ServerName test.example.org + Protocols h2 http/1.1 +</VirtualHost></pre> + + + <p>This allows only HTTP/1 on connections, except SSL connections to <code>test.example.org</code> + which offer HTTP/2.</p> + <div class="note"><h3>Choose a strong SSLCipherSuite</h3> + <p>The <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> needs to be configured with + a strong TLS cipher suite. The current version of <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> does not enforce any cipher but most + clients do so. Pointing a browser to a <code>h2</code> enabled 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 + long debugging sessions! If you want to be sure about the cipher suite to choose please avoid + the ones listed in the <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">HTTP/2 TLS reject list</a>.</p> + </div> + <p>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</p> + <pre class="prettyprint lang-config">Protocols http/1.1 h2</pre> + + <p>the most preferred protocol is HTTP/1 and it will always be selected unless a + client <em>only</em> supports h2. Since we want to talk HTTP/2 to clients that + support it, the better order is</p> + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + + <p>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:</p> + <pre class="prettyprint lang-config">ProtocolsHonorOrder Off</pre> + + <p>makes the order <em>you</em> wrote the Protocols irrelevant and only the client's + ordering will decide.</p> + <p>A last thing: the protocols you configure are not checked for correctness + or spelling. You can mention protocols that do not exist, so there is no need + to guard <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code> with any + <code class="directive"><a href="../mod/core.html#ifmodule"><IfModule></a></code> checks.</p> + <p>For more advanced tips on configuration, see the <a href="../mod/mod_http2.html#dimensioning"> + modules section about dimensioning</a> and <a href="../mod/mod_http2.html#misdirected"> + how to manage multiple hosts with the same certificate</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="mpm-config" id="mpm-config">MPM Configuration</a></h2> + + + <p>HTTP/2 is supported in all multi-processing modules that come with httpd. However, if + you use the <code class="module"><a href="../mod/prefork.html">prefork</a></code> mpm, there will be severe restrictions.</p> + <p>In <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> will only process one request at at 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.</p> + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> will not work around this limit by default. The reason is that + <code class="module"><a href="../mod/prefork.html">prefork</a></code> is today only chosen, if you run processing engines that are not + prepared for multi-threading, e.g. will crash with more than one request.</p> + <p>If your setup can handle it, configuring <code class="module"><a href="../mod/event.html">event</a></code> mpm is nowadays + the best one (if supported on your platform).</p> + <p>If you are really stuck with <code class="module"><a href="../mod/prefork.html">prefork</a></code> and want multiple requests, + you can tweak the <code class="directive"><a href="../mod/mod_http2.html#h2minworkers">H2MinWorkers</a></code> to make + that possible. If it breaks, however, you own both parts.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="clients" id="clients">Clients</a></h2> + + <p>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) (<a href="http://caniuse.com/#search=http2">source</a>).</p> + <p>Other clients, as well as servers, are listed + <a href="https://github.com/http2/http2-spec/wiki/Implementations">on the Implementations wiki</a>, + among them implementations for c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, + python, perl, ruby, rust, scala and swift.</p> + <p>Several of the non-browser client implementations support HTTP/2 over cleartext, h2c. The + most versatile being <a href="https://curl.haxx.se">curl</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="tools" id="tools">Useful tools to debug HTTP/2</a></h2> + + <p>The first tool to mention is of course <a href="https://curl.haxx.se">curl</a>. Please make sure that + your version supports HTTP/2 checking its <code>Features</code>:</p> + <pre class="prettyprint lang-config"> $ 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 <strong>HTTP2</strong> + </pre> + + <div class="note"><h3>Mac OS homebrew notes</h3> + brew install curl --with-openssl --with-nghttp2 + </div> + <p>And for really deep inspection <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p> + <p>The <a href="https://nghttp2.org">nghttp2</a> package also includes clients, such as:</p> + <ul> + <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp</a> - useful to visualize the HTTP/2 frames and get a better idea of the protocol.</li> + <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - useful to stress-test your server.</li> + </ul> + <p>Chrome offers detailed HTTP/2 logs on its connections via the + <a href="chrome://net-internals/#http2">special net-internals page</a>. There is also an + interesting extension for <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> + and <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> + to visualize when your browser is using HTTP/2.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="push" id="push">Server Push</a></h2> + + <p>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..."</p> + <p>But there are restrictions: the client can disable this feature and the + server may only ever PUSH on a request that came from the client.</p> + <p>The intention is to allow the server to send resources to the client that + it will most likely need: a css or javascript resource that belongs to a html + page the client requested. A set of images that is referenced by a css, etc.</p> + <p>The advantage for the client is that it saves the time to send the request which + may range from a few milliseconds to half a second, depending on where on the + globe both are located. The disadvantage is that the client may get sent + things it already has in its cache. Sure, HTTP/2 allows for the early cancellation + of such requests, but still there are resources wasted.</p> + <p>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?</p> + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> inspect response header for <code>Link</code> headers + in a certain format:</p> + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload, </xxx.js>; rel=preload</pre> + + <p>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</p> + <pre class="prettyprint lang-config"><Location /xxx.html> + Header add Link "</xxx.css>;rel=preload" + Header add Link "</xxx.js>;rel=preload" +</Location></pre> + + <p>If you want to use <code>preload</code> links without triggering a PUSH, you + can use the <code>nopush</code> parameter, as in</p> + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload;nopush</pre> + + <p>or you may disable PUSHes for your server entirely with the directive</p> + <pre class="prettyprint lang-config">H2Push Off</pre> + + <p>And there is more:</p> + <p>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.</p> + <p>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.</p> + <p>Another experimental draft that has been implemented in <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> + is the <a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> + Accept-Push-Policy Header Field</a> where a client can, for each request, define + what kind of PUSHes it accepts.</p> + <p> + 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 + a browser will actually use the data.</p> + <p>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 <code>accept-language</code> + header and if yes with what value?</p> + <p>Apache will look at the original request (the one that triggered the PUSH) and copy the + following headers over to PUSH requests: <code>user-agent</code>, <code>accept</code>, + <code>accept-encoding</code>, <code>accept-language</code>, <code>cache-control</code>.</p> + <p>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.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="earlyhints" id="earlyhints">Early Hints</a></h2> + + <p>An alternative to PUSHing resources is to send <code>Link</code> headers to the + client before the response is even ready. This uses the HTTP feature called "Early Hints" and + is described in <a href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p> + <p>In order to use this, you need to explicitly enable it on the server via</p> + <pre class="prettyprint lang-config">H2EarlyHints on</pre> + + <p>(It is not enabled by default since some older browser tripped on such responses.)</p> + <p>If this feature is on, you can use the directive <code class="directive"><a href="../mod/mod_http2.html#h2pushresource">H2PushResource</a></code> to + trigger early hints and resource PUSHes:</p> + <pre class="prettyprint lang-config"><Location /xxx.html> + H2PushResource /xxx.css + H2PushResource /xxx.js +</Location></pre> + + <p>This will send out a <code>"103 Early Hints"</code> response to a client as soon + as the server <em>starts</em> processing the request. This may be much early than + the time the first response headers have been determined, depending on your web + application.</p> + <p>If <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> is enabled, this will also start the PUSH right after the + 103 response. If <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> is disabled however, the 103 response will be send + nevertheless to the client.</p> + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/http2.html" title="English"> en </a> | +<a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/http2.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/http2.html.es b/docs/manual/howto/http2.html.es new file mode 100644 index 0000000..81fd4b3 --- /dev/null +++ b/docs/manual/howto/http2.html.es @@ -0,0 +1,421 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Guía HTTP/2 - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Guía HTTP/2</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/http2.html" title="Español"> es </a> | +<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div> +<div class="outofdate">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.</div> + + <p> + Esta es la guía para configurar HTTP/2 en Apache httpd. Ésta característica + está <em>lista en produción</em> así que es de esperar que las interfaces + y las directivas se mantengan consistentes en cada verión. + </p> + </div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">El protocolo HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#implementation">HTTP/2 en Apache httpd</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#building">Compilar httpd con soporte HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic-config">Configuración básica</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#mpm-config">Configuración MPM</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#clients">Clientes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#tools">Herramientas útiles para depurar HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#push">Server Push</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#earlyhints">"Early Hints"</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code></li><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="protocol" id="protocol">El protocolo HTTP/2</a></h2> + + + <p>HTTP/2 es la evolución del protocolo de la capa de aplicación con más + éxito, HTTP. Se centra en hacer un uso más eficiente de los recursos de red. + No cambia la característica fundamental de HTTP, la semántica. Todavía hay + olicitudes, respuestas, cabeceras y todo los elementos típicos de HTTP/1. Así + que, si ya conoce HTTP/1, también conoce el 95% de HTTP/2.</p> + + <p>Se ha escrito mucho sobre HTTP/2 y de cómo funciona. La norma más + estándar es, por supuesto, su + <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> + (<a href="http://httpwg.org/specs/rfc7540.html"> también disponible en un + formato más legible, YMMV</a>). Así que, ahí encontrará toda la especificación + del protocolo.</p> + + <p>Pero, como con todos los RFC, no es ideal como primera lectura. Es mejor + entender primero <em>qué</em> se quiere hacer y después leer el RFC sobre + <em>cómo</em> hacerlo. Un documento mucho mejor con el que empezar es + <a href="https://daniel.haxx.se/http2/">http2 explicado</a> + por Daniel Stenberg, el autor de <a href="https://curl.haxx.se">curl</a>. + ¡También está disponible cada vez en un mayor número lenguajes!</p> + + <p>Si le parece demasiado largo, o no lo ha leido, hay algunos términos + y elementos a tener en cuenta cuando lea este documento:</p> + <ul> + <li>HTTP/2 es un <strong>protocolo binario</strong>, al contrario que + HTTP 1.1 que es texto plano. La intención para HTTP 1.1 es que sea + legible (por ejemplo capturando el tráfico de red) mientras que para + HTTP/2 no. Más información en el FAQ oficial + <a href="https://http2.github.io/faq/#why-is-http2-binary">¿Por qué es + binario HTTP/2?</a></li> + + <li><strong>h2</strong> es HTTP/2 sobre TLS (negociación de protocolo a + través de ALPN).</li> + + <li><strong>h2c</strong> es HTTP/2 sobre TCP.</li> + + <li>Un <strong>frame</strong> es la unidad más pequeña de comunicación + dentro de una conexión HTTP/2, que consiste en una cabecera y una secuencia + de octetos de longitud variable estructurada de acuerdo con el tipo de + frame. Más información en la documentación oficial + <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">Sección de + Capa de Frame</a>.</li> + + <li>Un <strong>stream</strong> es un flujo bidireccional de frames dentro + de una conexión HTTP/2. El concepto correspondiente en HTTP 1.1 es un + intercambio de mensajes de solicitud/respuesta. Más información en la + documentación oficial + <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">Sección Capa + de Stream</a>.</li> + + <li> + HTTP/2 es capaz de llevar <strong>múltiples streams</strong> de datos + sobre la misma conexión TCP, evitando la clásica solicitud lenta + "head-of-line blocking" de HTTP 1.1 y evitando generar múltiples conexiones + TCP para cada solicitud/respuesta (KeepAlive parcheó el problema en + HTTP 1.1 pero no lo resolvió completamente). + </li> + </ul> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="implementation" id="implementation">HTTP/2 en Apache httpd</a></h2> + + + <p> + El protocolo HTTP/2 se implementa con su propio módulo httpd, llamado + acertadamente <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. Incluye el set completo de + características descritas por el RFC 7540 y soporta HTTP/2 sobre texto + plano (http:), así como conexiones seguras (https:). La variante de texto + plano se llama '<code>h2c</code>', la segura '<code>h2</code>'. Para + <code>h2c</code> permite el modo <em>direct</em> + y el <code>Upgrade:</code> a través de una solicitud inicial HTTP/1. + </p> + + <p> + Una característica de HTTP/2 que ofrece capacidades nuevas para + desarrolladores de web es <a href="#push">Server Push</a>. Vea esa sección + para saber como su aplicación web puede hacer uso de ella. + </p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="building" id="building">Compilar httpd con soporte HTTP/2</a></h2> + + + <p> + <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> usa la librería <a href="https://nghttp2.org"> + nghttp2</a>como su implementación base. Para compilar + <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> necesita al menos la versión 1.2.1 de + <code>libnghttp2</code> instalada en su sistema. + </p> + + <p> + Cuando usted ejecuta <code>./configure</code> en el código fuente de + Apache HTTPD, necesita indicarle '<code>--enable-http2</code>' como una + opción adicional para activar la compilación de este módulo. Si su + <code>libnghttp2</code> está ubicado en una ruta no habitual (cualquiera que + sea en su sistema operativo), puede indicar su ubicación con + '<code>--with-nghttp2=<path></code>' para <code>./configure</code>. + </p> + + <p>Aunque puede que eso sirva para la mayoría, habrá quien prefiera un <code>nghttp2</code> compilado estáticamente para este módulo. Para ellos existe la opción <code>--enable-nghttp2-staticlib-deps</code>. Funciona de manera muy similar a como uno debe enlazar openssl estáticamente para <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p> + + <p>Hablando de SSL, necesita estar al tanto de que la mayoría de los navegadores hablan HTTP/2 solo con URLs <code>https:</code>. Así que necesita un servidor con soporte SSL. Pero no solo eso, necesitará una librería SSL que de soporte a la extensión <code>ALPN</code>. Si usa OpenSSL, necesita al menos la versión 1.0.2.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic-config" id="basic-config">Configuración básica</a></h2> + + + <p>Cuando tiene un <code>httpd</code> compilado con <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> necesita una configuración básica para activarlo. Lo primero, como con cualquier otro módulo de Apache, es que necesita cargarlo:</p> + + <pre class="prettyprint lang-config">LoadModule http2_module modules/mod_http2.so</pre> + + + <p>La segunda directiva que necesita añadir a la configuración de su servidor es:</p> + + <pre class="prettyprint lang-config">Protocols h2 http/1.1</pre> + + + <p>Esto permite h2, la variante segura, para ser el protocolo preferido de las conexiones en su servidor. Cuando quiera habilitar todas las variantes de HTTP/2, entonces simplemente configure:</p> + + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + + <p>Dependiendo de dónde pone esta directiva, afecta a todas las conexiones o solo a las de ciertos host virtuales. La puede anidar, como en:</p> + + <pre class="prettyprint lang-config">Protocols http/1.1 +<VirtualHost ...> + ServerName test.example.org + Protocols h2 http/1.1 +</VirtualHost></pre> + + + <p>Esto solo permite HTTP/1, excepto conexiones SSL hacia <code>test.example.org</code> que ofrecen HTTP/2.</p> + + <div class="note"><h3>Escoger un SSLCipherSuite seguro</h3> + <p>Es necesario configurar <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> con una suite segura de cifrado TLS. La versión actual de mod_http2 no fuerza ningún cifrado pero la mayoría de los clientes si lo hacen. Encaminar un navegador hacia un servidor con <code>h2</code> activado con una suite inapropiada de cifrados forzará al navegador a rehusar e intentar conectar por HTTP 1.1. Esto es un error común cuando se configura httpd con HTTP/2 por primera vez, ¡así que por favor tenga en cuenta que debe evitar largas sesiones de depuración! Si quiere estar seguro de la suite de cifrados que escoja, por favor evite los listados en la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites">Lista Negra de TLS para HTTP/2</a>.</p> + </div> + + <p>El orden de los protocolos mencionados también es relevante. Por defecto, el primero es el protocolo preferido. Cuando un cliente ofrece múltiples opciones, la que esté más a la izquierda será la escogida. En</p> + <pre class="prettyprint lang-config">Protocols http/1.1 h2</pre> + + + <p>el protocolo preferido es HTTP/1 y siempre será seleccionado a menos que el cliente <em>sólo</em> soporte h2. Puesto que queremos hablar HTTP/2 con clientes que lo soporten, el orden correcto es:</p> + + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + + <p>Hay algo más respecto al orden: el cliente también tiene sus propias preferencias. Si quiere, puede configurar su servidor para seleccionar el protocolo preferido por el cliente:</p> + + <pre class="prettyprint lang-config">ProtocolsHonorOrder Off</pre> + + + <p>Hace que el orden en que <em>usted</em> escribió los Protocols sea irrelevante y sólo el orden de preferencia del cliente será decisorio.</p> + + <p>Una última cosa: cuando usted configura los protocolos no se comprueba si son correctos o están bien escritos. Puede mencionar protocolos que no existen, así que no hay necesidad de proteger <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code> con ningún <code class="directive"><a href="../mod/core.html#ifmodule"><IfModule></a></code> de comprobación.</p> + + <p>Para más consejos avanzados de configuración, vea la <a href="../mod/mod_http2.html#dimensioning"> + sección de módulos sobre dimensionamiento</a> y <a href="../mod/mod_http2.html#misdirected"> + como gestionar multiples hosts con el mismo certificado</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="mpm-config" id="mpm-config">Configuración MPM</a></h2> + + + <p>HTTP/2 está soportado en todos los módulos de multi-proceso que se ofrecen con httpd. Aun así, si usa el mpm <code class="module"><a href="../mod/prefork.html">prefork</a></code>, habrá restricciones severas.</p> + + <p>En <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> solo procesará una solicitud cada vez por conexión. Pero los clientes, como los navegadores, enviarán muchas solicitudes al mismo tiempo. Si una de ellas tarda mucho en procesarse (o hace un sondeo que dura más de la cuenta), las otras solicitudes se quedarán atascadas.</p> + + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> no evitará este límite por defecto. El motivo es que <code class="module"><a href="../mod/prefork.html">prefork</a></code> hoy en día solo se escoge si ejecuta motores de proceso que no están preparados para multi-hilo, p.ej. fallará con más de una solicitud.</p> + + <p>Si su configuración lo soporta, hoy en día <code class="module"><a href="../mod/event.html">event</a></code> es el mejor mpm que puede usar.</p> + + <p>Si realmente está obligado a usar <code class="module"><a href="../mod/prefork.html">prefork</a></code> y quiere multiples solicitudes, puede configurar la directiva <code class="directive"><a href="../mod/mod_http2.html#h2minworkers">H2MinWorkers</a></code> para hacerlo posible. Sin embargo, si esto falla, es bajo su cuenta y riesgo.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="clients" id="clients">Clientes</a></h2> + + + <p>Casi todos los navegadores modernos dan soporte a HTTP/2, pero solo en conexiones SSL: Firefox (v43), Chrome (v45), Safari (since v9), iOS Safari (v9), Opera (v35), Chrome para Android (v49) e Internet Explorer (v11 en Windows10) (<a href="http://caniuse.com/#search=http2">Fuente</a>).</p> + + <p>Otros clientes, así cómo otros servidores, están listados en la + <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki de Implementaciones</a>, entre ellos, implementaciones para c, c++, common lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, scala y swift.</p> + + <p>Muchos de las implementaciones de clientes que no son navegadores soportan HTTP/2 sobre texto plano, h2c. La más versátil es <a href="https://curl.haxx.se">curl</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="tools" id="tools">Herramientas útiles para depurar HTTP/2</a></h2> + + + <p>La primera herramienta a mencionar es por supuesto <a href="https://curl.haxx.se">curl</a>. Por favor asegúrese de que su versión soporta HTTP/2 comprobando sus <code>Características</code>:</p> + <pre class="prettyprint lang-config"> $ 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 <strong>HTTP2</strong> + </pre> + + <div class="note"><h3>Notas sobre Mac OS homebrew</h3> + brew install curl --with-openssl --with-nghttp2 + </div> + <p>Y para una inspección en gran profundidad <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p> + <p>El paquete <a href="https://nghttp2.org">nghttp2</a> también incluye clientes, tales como:</p> + <ul> + <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp + </a> - util para visualizar la frames de HTTP/2 y tener una mejor idea de como funciona el protocolo.</li> + <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - útil para hacer un stress-test de su servidor.</li> + </ul> + + <p>Chrome ofrece logs detallados de HTTP/2 en sus conexiones a través de la <a href="chrome://net-internals/#http2">página especial de net-internals</a>. También hay una extensión interesante para <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> y <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> con la que visualizar cuando su navegador usa HTTP/2.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="push" id="push">Server Push</a></h2> + + + <p>El protocolo HTTP/2 permite al servidor hacer PUSH de respuestas a un cliente que nunca las solicitó. El tono de la conversación es: "Aquí tiene una solicitud que nunca envió y la respuesta llegará pronto..."</p> + + <p>Pero hay restricciones: el cliente puede deshabilitar esta característica y el servidor entonces solo podrá hacer PUSH en una solicitud que hizo previamente del cliente.</p> + + <p>La intención es permitir al servidor enviar recursos que el cliente seguramente vaya a necesitar, p. ej. un recurso css o javascript que pertenece a una página html que el cliente solicitó, un grupo de imágenes a las que se hace referencia en un css, etc.</p> + + <p>La ventaja para el cliente es que ahorra tiempo para solicitudes que pueden tardar desde unos pocos milisegundos a medio segundo, dependiendo de la distancia entre el cliente y el servidor. La desventaja es que el cliente puede recibir cosas que ya tiene en su cache. Por supuesto que HTTP/2 soporta cancelación previa de tales solicitudes, pero aun así se malgastan recursos.</p> + + <p>Resumiendo: no hay una estrategia mejor sobre cómo usar esta característica de HTTP/2 y todo el mundo está experimentando con ella. Así que, ¿cómo experimenta usted con ella en Apache httpd?</p> + + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> busca e inspecciona las cabeceras de respuesta + <code>Link</code> con cierto formato:</p> + + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload, </xxx.js>; rel=preload</pre> + + + <p> + Si la conexión soporta PUSH, estos dos recursos se enviarán al cliente. + Como desarrollador web, puede configurar estas cabeceras o bien + directamente en la respuesta de su aplicación o configurar su servidor con: + </p> + + <pre class="prettyprint lang-config"><Location /xxx.html> + Header add Link "</xxx.css>;rel=preload" + Header add Link "</xxx.js>;rel=preload" +</Location></pre> + + + <p>Si quiere usar enlaces con <code>preload</code> sin activar un PUSH, puede + usar el parámetro <code>nopush</code>, como en:</p> + + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload;nopush</pre> + + + <p>o puede desactivar PUSH para su servidor por completo con la directiva </p> + + <pre class="prettyprint lang-config">H2Push Off</pre> + + + <p>Y hay más:</p> + + <p> + El módulo mantiene un registro de lo que se ha enviado con PUSH para cada + conexión (hashes de URLs, básicamente) y no hará PUSH del mismo recurso dos + veces. Cuando la conexión se cierra, la información es descartada. + </p> + + <p> + Hay gente pensando cómo un cliente puede decirle al servidor lo que ya + tiene, para evitar los PUSH de esos elementos, pero eso algo muy + experimental ahora mismo. + </p> + + <p>Otro borrador experimental que ha sido implementado en + <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> es el <a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> Campo de Cabecera + Accept-Push-Policy</a> en la que un cliente puede, para cada solicitud, definir + qué tipo de PUSH acepta.</p> + + <p> + Puede que PUSH no siempre lance la peticion/respuesta/funcionamiento que + uno espera. Hay varios estudios sobre este tema en internet, que explican + el beneficio y las debilidades de como diferentes funcionalidades del + cliente y de la red influyen en el resultado. + Por Ejemplo, que un servidor haga "PUSH" de recursos, no significa que el + navegador vaya a usar dichos datos. + </p> + <p> + Lo más importante que influye en la respuesta que se envía, es la solicitud + que se simuló. La url de solicitud de un PUSH es dada por la aplicación, + pero ¿de donde vienen las cabeceras de la petición? por ejemplo si el PUSH + pide una cabecera <code>accept-language</code> y si es así, ¿con qué valor? + </p> + <p>Httpd mirará la petición original (la que originó el PUSH) y copiará las + siguientes cabeceras a las peticiones PUSH: + <code>user-agent</code>, <code>accept</code>, <code>accept-encoding</code>, + <code>accept-language</code>, <code>cache-control</code>. + </p> + <p> + Todas las otras cabeceras son ignorados. Las cookies tampoco serán copiadas. + Impulsar los recursos que requieren una cookie para estar presente no + funcionará. Esto puede ser una cuestión de debate. Pero a menos que esto se + discuta más claramente con el navegador, evitemos el exceso de precaución y + no expongamos las cookies donde podrían o no ser visibles. + </p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="earlyhints" id="earlyhints">"Early Hints"</a></h2> + + + <p>Una alternativa de "Pushear" recursos es mandar una cabecera + <code>Link</code> al cliente antes que la respuesta esté lista. Esto usa + una caracteristica de HTTP que se llama "Early Hints" y está descrita en + la <a href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p> + <p>Para poder usar esto, necesita habilitarlo explicitamente en el servidor + via</p> + + <pre class="prettyprint lang-config">H2EarlyHints on</pre> + + + <p>(No está habilitado por defecto ya q ue algunos navegadores más antiguos + se caen con dichas respuestas.) + </p> + + <p>si esta funcionalidad esta activada, puede usar la directiva + <code class="directive"><a href="../mod/mod_http2.html#h2pushresource">H2PushResource</a></code> para que lance + "Early hints" y recursos mediante push: + </p> + <pre class="prettyprint lang-config"><Location /xxx.html> + H2PushResource /xxx.css + H2PushResource /xxx.js +</Location></pre> + + <p> + Esto lanzará una respuesta <code>"103 Early Hints"</code> a un cliente + tan pronto como el servidor <em>comience</em> a procesar la solicitud. + Esto puede ser mucho antes que en el momento en que se determinaron los + primeros encabezados de respuesta, dependiendo de su aplicación web. + </p> + + <p> + Si la directiva <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> está + habilitada, esto comenzará el PUSH justo después de la respuesta 103. + Sin embargo, si la directiva <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> está dehabilitada, la respuesta 103 se le enviará al cliente. + </p> + </div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/http2.html" title="Español"> es </a> | +<a href="../fr/howto/http2.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/http2.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/http2.html.fr.utf8 b/docs/manual/howto/http2.html.fr.utf8 new file mode 100644 index 0000000..9694f09 --- /dev/null +++ b/docs/manual/howto/http2.html.fr.utf8 @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Guide HTTP/2 - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Guide HTTP/2</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/http2.html" title="Français"> fr </a></p> +</div> + + <p>Ce document est le guide de l'utilisateur de l'implémentation de HTTP/2 + dans Apache httpd. Cette fonctionnalité en est au stade + <em>de production</em>, et les interfaces et directives devraient donc être + dorénavant relativement stables. + </p> + </div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#protocol">Le protocole HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#implementation">HTTP/2 dans Apache httpd</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#building">Compilation de httpd avec le support de HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic-config">Configuration de base</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#mpm-config">Configuration du MPM</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#clients">Clients</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#tools">Outils efficaces pour déboguer HTTP/2</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#push">Push serveur</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#earlyhints">Suggestions précoces</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code></li><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="protocol" id="protocol">Le protocole HTTP/2</a></h2> + + <p>HTTP/2 est une évolution du protocole de la couche application le plus + utilisé au monde, HTTP. Cette évolution permet en particulier une utilisation + 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.</p> + <p>Beaucoup a déjà été écrit à propos de HTTP/2 et de son fonctionnement. La + documentation la plus officielle est bien entendu sa <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a> (ou <a href="http://httpwg.org/specs/rfc7540.html">cette version au format plus + lisible</a>). Vous trouverez ici une description des rouages de HTTP/2 dans + leurs moindres détails.</p> + <p>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 <em>ce + que</em> ce mécanisme est censé faire, et seulement ensuite de lire sa RFC + pour comprendre <em>comment</em> il fonctionne. <a href="https://daniel.haxx.se/http2/">http2 explained</a> de Daniel Stenberg + (l'auteur de <a href="https://curl.haxx.se">curl</a>) + 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 !</p> + <p>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 :</p> + <ul> + <li>A la différence de HTTP/1 qui est en texte pur, HTTP/2 est un + <strong>protocole binaire</strong>, 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 <a href="https://http2.github.io/faq/#why-is-http2-binary">FAQ + officielle</a> pour plus de détails.</li> + <li><strong>h2</strong> correspond à HTTP/2 sur TLS (négociation de + protocole via ALPN).</li> + <li><strong>h2c</strong> correspond à HTTP/2 sur TCP.</li> + <li>Une <strong>frame</strong> 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 <a href="http://httpwg.org/specs/rfc7540.html#FramingLayer">section + correspondante</a> de la documentation officielle pour plus de + détails.</li> + <li>Un <strong>stream</strong> 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 <a href="http://httpwg.org/specs/rfc7540.html#StreamsLayer">section + correspondante</a> de la documentation officielle pour plus de détails.</li> + <li>HTTP/2 peut gérer <strong>plusieurs streams</strong> 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)</li> + </ul> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="implementation" id="implementation">HTTP/2 dans Apache httpd</a></h2> + + <p>Le protocole HTTP/2 est implémenté dans Apache httpd via un module + propre, pertinemment nommé <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>. Ce + module implémente toutes les fonctionnalités décrites par la RFC 7540 et + supporte les connexions en texte pur (http:), ou sécurisées (https:). + La variante texte pur se nomme '<code>h2c</code>', et la variante sécurisée + '<code>h2</code>'. <code>h2c</code> peut être en mode <em>direct</em> ou + <code>Upgrade:</code> via une requête initiale en HTTP/1.</p> + <p><a href="#push">Server Push</a> 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.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="building" id="building">Compilation de httpd avec le support de HTTP/2</a></h2> + + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> se base sur la bibliothèque + de <a href="https://nghttp2.org">nghttp2</a> pour son implémentation. Pour + pouvoir compiler <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>, <code>libnghttp2</code> version + 1.2.1. ou supérieure doit être installée dans votre système.</p> + <p>Pour déclencher la compilation de <code>mod_http2</code>, vous devez + ajouter l'argument '<code>--enable-http2</code>' au script + <code>./configure</code> que vous exécutez à la racine de l'arborescence des + sources de httpd. Si <code>libnghttp2</code> est installée dans un + répertoire non connu du chemin de vos bibliothèques, vous devez indiquer ce + répertoire au script <code>./configure</code> via l'argument + '<code>--with-nghttp2=<path></code>'.</p> + <p>Alors que cette méthode de compilation conviendra à la plupart, certains + préféreront lier statiquement <code>nghttp2</code> à ce module. Pour ce + faire, utilisez l'argument <code>--enable-nghttp2-staticlib-deps</code>. + Cette méthode est pratiquement la même que celle utilisée pour lier + statiquement openssl à <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.</p> + <p>En parlant de SSL, vous devez savoir que la plupart des navigateurs ne + communiqueront en HTTP/2 que sur des URLs sécurisées de type + <code>https:</code> ; votre serveur doit donc supporter SSL. Mais de plus, + votre bibliothèque SSL devra supporter l'extension <code>ALPN</code>. Enfin, + si la bibliothèque que vous utilisez est OpenSSL, sa version devra être + 1.0.2. ou supérieure.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic-config" id="basic-config">Configuration de base</a></h2> + + + <p>Maintenant que vous disposez d'un binaire <code>httpd</code> compilé avec le + module <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>, 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 :</p> + <pre class="prettyprint lang-config">LoadModule http2_module modules/mod_http2.so</pre> + + + <p>La seconde directive que vous devez ajouter à votre fichier de + configuration est</p> + <pre class="prettyprint lang-config">Protocols h2 http/1.1</pre> + + <p>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 :</p> + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + <p>Selon l'endroit où vous placez cette directive, elle affectera l'ensemble + de votre serveur, ou seulement un ou plusieurs serveurs virtuels. Vous + pouvez aussi l'imbriquer comme dans l'exemple suivant :</p> + <pre class="prettyprint lang-config">Protocols http/1.1 +<VirtualHost ...> + ServerName test.example.org + Protocols h2 http/1.1 +</VirtualHost></pre> + + + <p>Seules les connexions en HTTP/1 seront alors permises, sauf pour le serveur + virtuel <code>test.example.org</code> qui acceptera aussi les connexions SSL + en HTTP/2.</p> + <div class="note"><h3>Utilisez une chaîne d'algorithmes de chiffrement forte</h3> + <p>La directive <code class="directive"><a href="../mod/mod_ssl.html#sslciphersuite">SSLCipherSuite</a></code> doit + être définie avec une chaîne d'algorithmes de chiffrement TLS forte. Même si + la version actuelle de <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> n'impose pas d'algorithmes + de chiffrement particuliers, la plupart des clients le font. Faire pointer + un navigateur vers un serveur où <code>h2</code> est activé avec une chaîne + d'algorithmes de chiffrement inappropriée entraînera un rejet et une + retrogradation vers HTTP 1.1. C'est une erreur que l'on fait couramment + lorsqu'on configure httpd pour HTTP/2 pour la première fois ; donc gardez la + à l'esprit si vous voulez éviter de longues sessions de débogage ! Si vous + voulez être sûr de définir une chaîne d'algorithmes de chiffrement + appropriée, évitez ceux qui sont listés dans la <a href="http://httpwg.org/specs/rfc7540.html#BadCipherSuites"> </a>liste des + algorithmes de chiffrement TLS HTTP/2 à proscrire.</p> + </div> + <p>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</p> + <pre class="prettyprint lang-config">Protocols http/1.1 h2</pre> + + <p>le protocole préféré sera HTTP/1 et il sera toujours sélectionné sauf si + un client ne supporte <em>que</em> h2. Comme nous souhaitons communiquer en + HTTP/2 avec les clients qui le supportent, la meilleure définition de la + directive est</p> + <pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre> + + + <p>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 :</p> + <pre class="prettyprint lang-config">ProtocolsHonorOrder Off</pre> + + <p>Avec cette directive, l'ordre des protocoles que <em>vous</em> avez + défini devient caduque et seul l'ordre défini par le client sera pris en + compte.</p> + <p>Une dernière chose : les protocoles que vous définissez ne sont pas + vérifiés quant à leurs validité ou orthographe. Vous pouvez très bien + définir des protocoles qui n'existent pas, et il n'est donc pas nécessaire + de filtrer le contenu de la directive <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code> avec des vérifications de type + <code class="directive"><a href="../mod/core.html#ifmodule"><IfModule></a></code>.</p> + <p>Pour des conseils plus avancés à propos de la configuration, voir la <a href="../mod/mod_http2.html">Documentation de mod_http2</a>, et en particulier + la section à propos de la <a href="../mod/mod_http2.html#dimensioning">consommation supplémentaire de + ressources</a>, ainsi que la section expliquant comment gérer les <a href="../mod/mod_http2.html#misdirected">serveurs multiples avec certificat + commun</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="mpm-config" id="mpm-config">Configuration du MPM</a></h2> + + + <p>Tous les modules multiprocessus (MPM) fournis avec httpd supportent + HTTP/2. Cependant, si vous utilisez le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code>, vous allez + faire face à de sévères restrictions.</p> + <p>Avec le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code>, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ne traitera + qu'une requête à la fois par connexion alors que les clients tels que les + navigateurs internet envoient de nombreuses requêtes au même moment. Si + l'une d'entre elles est longue à traiter (ou implique une longue + interrogation), les autres requêtes seront mises en attente.</p> + <p>Par défaut, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ne passe pas outre cette limitation pour + la simple et bonne raison que le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> n'est aujourd'hui + choisi que si vous exécutez des moteurs de traitement qui ne sont pas préparés + pour le multithreading (par exemple qui se crashent lorsque plusieurs + requêtes arrivent).</p> + <p>Si votre plateforme et votre installation de httpd le supportent, la + meilleur solution consiste actuellement à utiliser le MPM + <code class="module"><a href="../mod/event.html">event</a></code>. + </p> + <p>Si vous n'avez pas d'autre choix que d'utiliser le MPM + <code class="module"><a href="../mod/prefork.html">prefork</a></code>, mais souhaitez tout de même traiter plusieurs requêtes + simultanément, vous pouvez jouer avec la directive <code class="directive"><a href="../mod/mod_http2.html#h2minworkers">H2MinWorkers</a></code>, sans garantie que cela + fonctionne.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="clients" id="clients">Clients</a></h2> + + <p>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 <a href="http://caniuse.com/#search=http2">source</a>).</p> + <p>D'autres clients et serveurs sont listés dans le <a href="https://github.com/http2/http2-spec/wiki/Implementations">wiki des + implémentations</a> ; entre autres des implémentations pour c, c++, common + lisp, dart, erlang, haskell, java, nodejs, php, python, perl, ruby, rust, + scala et swift.</p> + <p>De nombreuses implémentations clientes autres que les navigateurs + supportent HTTP/2 en texte pur, h2c. L'une des plus efficaces d'entre elles + est <a href="https://curl.haxx.se">curl</a>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="tools" id="tools">Outils efficaces pour déboguer HTTP/2</a></h2> + + <p>Le premier d'entre eux est bien entendu <a href="https://curl.haxx.se">curl</a>. Assurez-vous au préalable que votre + version supporte HTTP/2 en vérifiant ses <code>Fonctionnalités</code> :</p> + <pre class="prettyprint lang-config"> $ 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 <strong>HTTP2</strong> + </pre> + + <div class="note"><h3>homebrew sous Mac OS :</h3> + brew install curl --with-openssl --with-nghttp2 + </div> + <p>Pour une inspection en profondeur : <a href="https://wiki.wireshark.org/HTTP2">wireshark</a>.</p> + <p>Le paquet <a href="https://nghttp2.org">nghttp2</a> inclut aussi des + outils comme :</p> + <ul> + <li><a href="https://nghttp2.org/documentation/nghttp.1.html">nghttp</a> + - permet de visualiser les trames HTTP/2 et ainsi de se faire une meilleure + idée du protocole.</li> + <li><a href="https://nghttp2.org/documentation/h2load-howto.html">h2load</a> - + permet de tester votre serveur dans des conditions extremes.</li> + </ul> + <p>Chrome fournit des journaux détaillés des connexions HTTP/2 via la page + <a href="chrome://net-internals/#http2">special net-internals page</a>. Il y + a aussi cette extension intéressante pour <a href="https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=en">Chrome</a> + et <a href="https://addons.mozilla.org/en-us/firefox/addon/spdy-indicator/">Firefox</a> + qui permet d'indiquer que votre navigateur utilise HTTP/2.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="push" id="push">Push serveur</a></h2> + + <p>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 + envoyée, et la réponse vous parviendra bientôt tout de même ..."</p> + <p>Il y a cependant des conditions : le client peut désactiver cette + fonctionnalité et le serveur ne pourra alors lui proposer des réponses que + pour les requêtes qu'il a effectivement envoyées.</p> + <p>Cette fonctionnalité a pour but de permettre au serveur d'envoyer au + client des ressources dont il va probablement avoir besoin : par exemple une + ressource css ou javascript appartenant à une page html que le client a + demandée, un jeu d'images référencé par un css, etc...</p> + <p>Cette anticipation a pour avantage de permettre au client d'économiser le + temps qu'il lui aurait fallu pour envoyer une requête, quelques + millisecondes à une demi-seconde en fonction de l'éloignement du serveur. + Elle a cependant pour inconvénient d'imposer au client le téléchargement de + ressources qu'il possède peut-être déjà dans son cache. Bien entendu, HTTP/2 + permet d'annuler prématurément de telles requêtes, mais des ressources sont + tout de même gaspillées.</p> + <p>En résumé : il n'existe pas encore de stratégie efficace pour faire le + meilleur usage de cette fonctionnalité de HTTP/2 et tout le monde en est + encore au stade de l'expérimentation. À ce titre, voici des conseils pour + procéder vous-même à ces expérimentations :</p> + <p><code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> inspecte l'en-tête de la réponse et recherche les + en-têtes <code>Link</code> sous un certain format :</p> + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload, </xxx.js>; rel=preload</pre> + + <p>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</p> + <pre class="prettyprint lang-config"><Location /xxx.html> + Header add Link "</xxx.css>;rel=preload" + Header add Link "</xxx.js>;rel=preload" +</Location></pre> + + <p>Si vous souhaitez utiliser des liens <code>preload</code> sans déclencher + de PUSH, vous pouvez utiliser le paramètre <code>nopush</code> comme suit :</p> + <pre class="prettyprint lang-config">Link </xxx.css>;rel=preload;nopush</pre> + + <p>Vous pouvez aussi désactiver les PUSHes pour l'ensemble de votre + serveur via la directive</p> + <pre class="prettyprint lang-config">H2Push Off</pre> + + <p>À savoir aussi :</p> + <p>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 + n'effectuera pas deux fois un PUSH pour la même ressource. Cependant, + lorsque la connexion est fermée, le journal de ses PUSHes est supprimé.</p> + <p>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.</p> + <p>L'<a href="https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00"> + en-tête Accept-Push-Policy</a> est un autre dispositif expérimental + implémenté dans <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> ; il permet au client de définir pour + chaque requête quels genres de PUSHes il accepte.</p> + + + <p> + 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 + sujet sur internet qui en expliquent les avantages et inconvénients et + comment les particularités des clients et du réseau en influencent le + fonctionnement. Par exemple, le seul fait que le serveur PUSHes une + ressource n'implique pas forcément que le navigateur l'utilisera.</p> + <p>Ce qui influence le plus la réponse PUSHed, c'est la requête qui a été + simulée. En effet, l'URL de la requête pour un PUSH est fournie par + l'application, mais d'où viennent les en-têtes ? Par exemple, La requête + PUSH requiert-elle un en-tête <code>accept-language</code> et si oui, quelle + sera sa valeur ?</p> + <p>httpd va consulter la requête originale (celle qui a déclenché le PUSH) + et copier les en-têtes suivants vers la requête PUSH : + <code>user-agent</code>, <code>accept</code>, <code>accept-encoding</code>, + <code>accept-language</code> et <code>cache-control</code>.</p> + <p>Tous les autres en-têtes sont ignorés. Les cookies eux non plus ne seront + pas copiés. PUSHer des ressources qui requièrent la présence d'un cookie ne + fonctionnera pas. Ceci peut être sujet à débat, mais tant que ce ne sera pas + clairement discuté avec les navigateurs, restons prudents et évitons + d'exposer les cookies là où ils ne sont pas censés être visibles.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="earlyhints" id="earlyhints">Suggestions précoces</a></h2> + + <p>A l'instar des ressources PUSHées, une autre méthode consiste à envoyer + des en-têtes <code>Link</code> au client avant même que la réponse ne soit + prête. Cette méthode utilise la fonctionnalité appelée "Suggestions + précoces" (Early Hints) décrite dans la <a href="https://tools.ietf.org/html/rfc8297">RFC 8297</a>.</p> + <p>Pour utiliser cette fonctionnalité, vous devez l'activer explicitement + sur le serveur via :</p> + <pre class="prettyprint lang-config">H2EarlyHints on</pre> + + <p>Elle n'est en effet pas activée par défaut car certains navigateurs + anciens perdent pied avec de telles réponses.</p> + <p>Une fois cette fonctionnalité activée, vous pouvez utiliser la directive + <code class="directive"><a href="../mod/mod_http2.html#h2pushresource">H2PushResource</a></code> pour déclencher les + suggestions précoces et les PUSHes de ressources :</p> + <pre class="prettyprint lang-config"><Location /xxx.html> + H2PushResource /xxx.css + H2PushResource /xxx.js +</Location></pre> + + <p>Le serveur enverra alors au client une réponse <code>"103 Early + Hints"</code> dès qu'il <em>commencera</em> à traiter la requête. Selon + votre application web, cet envoi peut intervenir beaucoup plus tôt que le + moment où les premiers en-têtes de réponse auront été déterminés.</p> + <p>Si <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> est activé, ceci + déclenchera aussi le PUSH juste après la réponse 103. Mais si <code class="directive"><a href="../mod/mod_http2.html#h2push">H2Push</a></code> n'est pas activé, la réponse 103 sera + quand-même envoyée au client.</p> + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/http2.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/http2.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/http2.html" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/http2.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html b/docs/manual/howto/index.html new file mode 100644 index 0000000..9a25dfa --- /dev/null +++ b/docs/manual/howto/index.html @@ -0,0 +1,25 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: index.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: index.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: index.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: index.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: index.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR + +URI: index.html.zh-cn.utf8 +Content-Language: zh-cn +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/index.html.en b/docs/manual/howto/index.html.en new file mode 100644 index 0000000..a0dc578 --- /dev/null +++ b/docs/manual/howto/index.html.en @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>How-To / Tutorials - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>How-To / Tutorials</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">How-To / Tutorials</a></h2> + + + + <dl> + <dt>Authentication and Authorization</dt> + <dd> + <p>Authentication is any process by which you verify that + someone is who they claim they are. Authorization is any + process by which someone is allowed to be where they want to + go, or to have information that they want to have.</p> + + <p>See: <a href="auth.html">Authentication, Authorization</a></p> + </dd> + </dl> + + <dl> + <dt>Access Control</dt> + <dd> + <p>Access control refers to the process of restricting, or + granting access to a resource based on arbitrary criteria. There + are a variety of different ways that this can be + accomplished.</p> + + <p>See: <a href="access.html">Access Control</a></p> + </dd> + </dl> + + <dl> + <dt>Dynamic Content with CGI</dt> + <dd> + <p>The CGI (Common Gateway Interface) defines a way for a web + server to interact with external content-generating programs, + which are often referred to as CGI programs or CGI scripts. It + is a simple way to put dynamic content on + your web site. This document will be an introduction to setting + up CGI on your Apache web server, and getting started writing + CGI programs.</p> + + <p>See: <a href="cgi.html">CGI: Dynamic Content</a></p> + </dd> + </dl> + + <dl> + <dt><code>.htaccess</code> files</dt> + <dd> + <p><code>.htaccess</code> files provide a way to make configuration + changes on a per-directory basis. A file, containing one or more + configuration directives, is placed in a particular document directory, + and the directives apply to that directory, and all subdirectories thereof.</p> + + <p>See: <a href="htaccess.html"><code>.htaccess</code> files</a></p> + </dd> + </dl> + + <dl> + <dt>HTTP/2 with httpd</dt> + <dd> + <p>HTTP/2 is the evolution of the world's most successful application layer protocol, HTTP. + It focuses on making more efficient use of network resources without changing the semantics of HTTP. + This guide explains how HTTP/2 is implemented in httpd, showing basic configurations tips and + best practices. + </p> + + <p>See: <a href="http2.html">HTTP/2 guide</a></p> + </dd> + </dl> + + + <dl> + <dt>Introduction to Server Side Includes</dt> + <dd> + <p>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.</p> + + <p>See: <a href="ssi.html">Server Side Includes (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>Per-user web directories</dt> + <dd> + <p>On systems with multiple users, each user can be permitted to have a + web site in their home directory using the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive. Visitors + to a URL <code>http://example.com/~username/</code> will get content + out of the home directory of the user "<code>username</code>", out of + the subdirectory specified by the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.</p> + + <p>See: <a href="public_html.html">User web directories (<code>public_html</code>)</a></p> + </dd> + </dl> + + <dl> + <dt>Reverse Proxy guide</dt> + <dd> + <p>Apache httpd has extensive capabilities as a reverse proxy server using the + <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> directive as well as + <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> to create sophisticated + reverse proxying implementations which provide for high-availability, load + balancing and failover, cloud-based clustering and dynamic on-the-fly reconfiguration.</p> + + <p>See: <a href="reverse_proxy.html">Reverse proxy guide</a></p> + </dd> + </dl> + + <dl> + <dt>Rewriting URLs with mod_rewrite</dt> + <dd> + <p>Rewriting URLs with (and without) + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> tends to be one of the most + frequently asked topics on our mailing lists and IRC channels. + We have devoted <a href="../rewrite/">and entire section of our + documentation</a> to howtos and recipes around this topic.</p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html.es b/docs/manual/howto/index.html.es new file mode 100644 index 0000000..a089254 --- /dev/null +++ b/docs/manual/howto/index.html.es @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>How-To / Tutoriales - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a></div><div id="page-content"><div id="preamble"><h1>How-To / Tutoriales</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">How-To / Tutoriales</a></h2> + + + + <dl> + <dt>Autenticación y Autorización</dt> + <dd> + <p>Autenticación es un proceso en el cual se verifica + que alguien es quien afirma ser. Autorización es cualquier + proceso en el que se permite a alguien acceder donde quiere ir, + o a obtener la información que desea tener.</p> + + <p>Ver: <a href="auth.html">Autenticación, Autorización</a></p> + </dd> + </dl> + + <dl> + <dt>Control de Acceso</dt> + <dd> + <p>Control de acceso hace referencia al proceso de restringir, o + garantizar el acceso a un recurso en base a un criterio arbitrario. + Esto se puede conseguir de distintas formas.</p> + + <p>Ver: <a href="access.html">Control de Acceso</a></p> + </dd> + </dl> + + <dl> + <dt>Contenido Dinámico con CGI</dt> + <dd> + <p>El CGI (Common Gateway Interface) es un método por el cual + un servidor web puede interactuar con programas externos de + generación de contenido, a ellos nos referimos comúnmente como + programas CGI o scripts CGI. Es un método sencillo para mostrar + contenido dinámico en tu sitio web. Este documento es una + introducción para configurar CGI en tu servidor web Apache, y de + inicio para escribir programas CGI.</p> + + <p>Ver: <a href="cgi.html">CGI: Contenido Dinámico</a></p> + </dd> + </dl> + + <dl> + <dt>Ficheros <code>.htaccess</code></dt> + <dd> + <p>Los ficheros <code>.htaccess</code> facilitan una forma de + hacer configuraciones por-directorio. Un archivo, que + contiene una o más directivas de configuración, se coloca en un + directorio específico y las directivas especificadas solo aplican + sobre ese directorio y los subdirectorios del mismo.</p> + + <p>Ver: <a href="htaccess.html"><code>.htaccess</code> files</a></p> + </dd> + </dl> + + <dl> + <dt>HTTP/2 con httpd</dt> + <dd> + <p>HTTP/2 es la evolución del protocolo de capa de aplicación más conocido, HTTP. + Se centra en hacer un uso más eficiente de los recursos de red sin cambiar la + semántica de HTTP. Esta guía explica como se implementa HTTP/2 en httpd, + mostrando buenas prácticas y consejos de configuración básica. + </p> + + <p>Ver: <a href="http2.html">Guía HTTP/2</a></p> + </dd> + </dl> + + + <dl> + <dt>Introducción a los SSI</dt> + <dd> + <p>Los SSI (Server Side Includes) son directivas que se colocan + en las páginas HTML, y son evaluadas por el servidor mientras + éste las sirve. Le permiten añadir contenido generado + dinámicamente a una página HTML existente, sin tener que servir + la página entera a través de un programa CGI u otro método + dinámico.</p> + + <p>Ver: <a href="ssi.html">Server Side Includes (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>Directorios web Por-usuario</dt> + <dd> + <p>En sistemas con múltiples usuarios, cada usuario puede tener + su directorio "home" compartido usando la directiva + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Aquellos + que visiten la URL <code>http://example.com/~username/</code> + obtendrán contenido del directorio del usuario "<code>username</code>" + que se encuentra en el directorio "home" del sistema.</p> + + <p>Ver: <a href="public_html.html"> + Directorios Web de Usuario (<code>public_html</code>)</a></p> + </dd> + </dl> + + <dl> + <dt>Guía de Proxy Inverso</dt> + <dd> + <p>Apache httpd ofrece muchas posibilidades como proxy inverso. Usando la + directiva <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> así como + <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> puede crear + sofisticadas configuraciones de proxy inverso que proveen de alta + disponibilidad, balanceo de carga, clustering basado en la nube y + reconfiguración dinámica en caliente.</p> + + <p>Ver: <a href="reverse_proxy.html">Guía de Proxy Inverso</a></p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html.fr.utf8 b/docs/manual/howto/index.html.fr.utf8 new file mode 100644 index 0000000..f38c685 --- /dev/null +++ b/docs/manual/howto/index.html.fr.utf8 @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>How-To / Tutoriels - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>How-To / Tutoriels</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">How-To / Tutoriels</a></h2> + + + + <dl> + <dt>Authentification et autorisation</dt> + <dd> + <p>L'authentification représente tout processus par lequel vous + vérifiez si quelqu'un correspond bien à la personne qu'il + prétend être. L'autorisation représente tout processus + permettant de savoir si une personne est autorisée à aller là où + elle veut aller, ou à obtenir les informations qu'elle demande.</p> + + <p>Voir <a href="auth.html">Authentification, Autorisation</a></p> + </dd> + </dl> + + <dl> + <dt>Contrôle d'accès</dt> + <dd> + <p>Le contrôle d'accès se réfère au processus permettant + d'interdire ou d'accorder l'accès à une ressource en fonction de + certains critères, et il existe de nombreuses façons d'y + parvenir.</p> + + <p>Voir <a href="access.html">Contrôle d'accès</a></p> + </dd> + </dl> + + <dl> + <dt>Contenu dynamique avec CGI</dt> + <dd> + <p>L'interface CGI (Common Gateway Interface) + fournit au serveur web une méthode d'interaction avec des + programmes externes générateurs de contenu, souvent nommés + programmes CGI ou scripts CGI. Il s'agit d'une méthode + simple permettant d'ajouter du contenu + dynamique à votre site web. Ce document se veut une introduction + à la configuration de CGI sur votre serveur web Apache et à + l'écriture de programmes CGI.</p> + + <p>Voir <a href="cgi.html">CGI : contenu dynamique</a></p> + </dd> + </dl> + + <dl> + <dt>Fichiers <code>.htaccess</code></dt> + <dd> + <p>Les fichiers <code>.htaccess</code> permettent de modifier la + configuration du serveur au niveau de chaque répertoire. À cet + effet, un fichier est placé dans un répertoire particulier du site + web, et les directives de configuration qu'il contient s'appliquent à ce + répertoire et à tous ses sous-répertoires.</p> + + <p>Voir <a href="htaccess.html">Fichiers <code>.htaccess</code></a></p> + </dd> + </dl> + + <dl> + <dt>HTTP/2 avec httpd</dt> + <dd> + <p>HTTP/2 est une évolution du protocole de la couche application le plus + connu au monde, HTTP. Les efforts se sont concentrés sur une amélioration + de l'efficacité de l'utilisation des ressources réseau sans modifier la + sémantique de HTTP. Ce guide explique la manière dont HTTP/2 est + implémenté dans httpd, donne des conseils pour une configuration de base + ainsi qu'une liste de recommandations. + </p> + + <p>Voir le <a href="http2.html">guide HTTP/2</a></p> + </dd> + </dl> + + <dl> + <dt>Introduction au Inclusions côté Serveur (Server Side Includes + ou SSI)</dt> + <dd> + <p>Les SSI sont des directives que l'on place dans des pages + HTML, et qui sont évaluées par le serveur lorsque ces pages sont + servies. Elles vous permettent d'ajouter du contenu généré + dynamiquement à une page HTML existante, sans avoir à servir + l'intégralité de la page via un programme CGI, ou toute autre + technologie dynamique.</p> + + <p>Voir <a href="ssi.html">Server Side Includes (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>Répertoires web de l'utilisateur</dt> + <dd> + <p>Sur les systèmes multi-utilisateurs, vous pouvez permettre à + chaque utilisateur d'avoir un site web dans son répertoire home + via la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Les visiteurs de l'URL + <code>http://example.com/~nom-utilisateur/</code> vont recevoir + du contenu situé dans le répertoire home de l'utilisateur + "<code>nom-utilisateur</code>", et dans le sous-répertoire + spécifié par la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p> + + <p>Voir <a href="public_html.html">Répertoires web des utilisateurs (<code>public_html</code>)</a></p> + </dd> + </dl> + <dl> + <dt>Mandataires inverses</dt> + <dd> + <p>Apache httpd possède des fonctionnalités évoluées de serveur + mandataire inverse via ses directives <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> et <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> qui permettent + d'implémenter un système de mandataire inverse sophistiqué garantissant + une haute disponibilité, une répartition et une réattribution de charge, + un regroupement de serveurs en grappe (clustering) basé sur le cloud et + une reconfiguration dynamique à la volée.</p> + + <p>Voir le <a href="reverse_proxy.html" />Guide de configuration des + mandataires inverses</p> + </dd> + </dl> + + <dl> + <dt>Réécriture d'URLs avec mod_rewrite</dt> + <dd> + <p>La réécriture d'URLs avec (ou sans) <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> devient + l'une des questions les plus fréquentes posées dans nos listes de + diffusion et nos canaux IRC. C'est pourquoi nous avons dédié une <a href="../rewrite/">section entière de notre documentation</a> à des + howtos et recettes sur ce sujet.</p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html.ja.utf8 b/docs/manual/howto/index.html.ja.utf8 new file mode 100644 index 0000000..59a7627 --- /dev/null +++ b/docs/manual/howto/index.html.ja.utf8 @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>How-To / チュートリアル - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a></div><div id="page-content"><div id="preamble"><h1>How-To / チュートリアル</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">How-To / チュートリアル</a></h2> + + + + <dl> + <dt>認証と承認</dt> + <dd> + <p>認証とは、誰かが自分は誰であるかを名乗っているものを検証する + 処理のことです。承認とは、誰かが望みの場所に辿り着けたり、 + 望みの情報を手に入れたりすることを許可する処理のことです。</p> + + <p>参照: <a href="auth.html">認証と承認</a></p> + </dd> + </dl> + + <dl> + <dt>アクセス制御</dt> + <dd> + <p>アクセス制御は、さまざまな条件でリソースに対するアクセスを + 許可したり制限したりすることを指します。 + 実現方法には様々な異なる手法があります。</p> + + <p>参照: <a href="access.html">アクセス制御</a></p> + </dd> + </dl> + + <dl> + <dt>CGI による動的コンテンツ</dt> + <dd> + <p>CGI (Common Gateway Interface) はウェブサーバが外部のコンテンツ + 生成プログラムとどのように相互動作をするかを定義します。 + その外部プログラムは通常 CGI プログラムや CGI スクリプトと呼ばれます。 + CGI はウェブサイトに動的なコンテンツを追加するための、 + 単純な方法です。この文書は Apache ウェブサーバに + CGI を設定し、CGI プログラムを書き始めるためのイントロダクションです。</p> + + <p>参照: <a href="cgi.html">CGI: 動的コンテンツ</a></p> + </dd> + </dl> + + <dl> + <dt><code>.htaccess</code> ファイル</dt> + <dd> + <p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更するための + 方法を提供します。設定ディレクティブが書かれたファイルが、あるドキュメント + ディレクトリに置かれると、ディレクティブはそのディレクトリと + すべてのサブディレクトリに適用されます。</p> + + <p>参照: <a href="htaccess.html"><code>.htaccess</code> ファイル</a></p> + </dd> + </dl> + + <dl> + <dt>Server Side Includes イントロダクション</dt> + <dd> + <p>SSI (Server Side Includes) は HTML ページ中に書かれるディレクティブで、 + ページが送られる時にサーバにより評価されます。これにより、ページ全体を + CGI プログラムで生成したり、他の動的な技術を使うことなく、既存の HTML + ページに動的に生成された内容を付加することができます。</p> + + <p>参照: <a href="ssi.html">Server Side Includes (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>ユーザ毎のウェブディレクトリ</dt> + <dd> + <p>複数ユーザの存在するシステムでは、それぞれのユーザは <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブを使うことによって + ホームディレクトリ上にウェブサイトを作成することができます。 + URL <code>http://example.com/~username/</code> を訪れた人は + ユーザ "<code>username</code>" のホームディレクトリの、<code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブで指定された + サブディレクトリからコンテンツを得ることになります。</p> + + <p>参照: <a href="public_html.html">ユーザウェブディレクトリ (<code>public_html</code>)</a></p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html.ko.euc-kr b/docs/manual/howto/index.html.ko.euc-kr new file mode 100644 index 0000000..c58e25e --- /dev/null +++ b/docs/manual/howto/index.html.ko.euc-kr @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>How-To / 丮 - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>How-To / 丮</h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">How-To / 丮</a></h2> + + + + <dl> + <dt></dt> + <dd> + <p>(authentication) ڽ ϴ + Ȯϴ ̴. Ѻο(authorization) + Ȥ ϴ ϴ ̴.</p> + + <p>: <a href="auth.html">, Ѻο, </a></p> + </dd> + </dl> + + <dl> + <dt>CGI </dt> + <dd> + <p>CGI (Common Gateway Interface) CGI + α Ȥ CGI ũƮϰ θ, ( + ) ܺ α ȣۿϴ Ѵ. + Ʈ ϰ + ̴. ġ CGI ϴ + Ұϰ, CGI α ۼغ.</p> + + <p>: <a href="cgi.html">CGI: </a></p> + </dd> + </dl> + + <dl> + <dt><code>.htaccess</code> </dt> + <dd> + <p><code>.htaccess</code> Ͽ 丮 + ִ. þ ִ + Ư 丮 θ, 丮 丮 + þ Ѵ.</p> + + <p>: <a href="htaccess.html"><code>.htaccess</code> + </a></p> + </dd> + </dl> + + <dl> + <dt>Server Side Includes Ұ</dt> + <dd> + <p>SSI (Server Side Includes) HTML ϴ + þ, Ҷ óѴ. SSI + ϸ CGI α̳ ٸ + ü ʰ HTML + ߰ ִ.</p> + + <p>: <a href="ssi.html">Server Side Includes (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>ں 丮</dt> + <dd> + <p> ڰ ִ ýۿ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> þ ϸ + ڴ ڽ Ȩ丮 ȿ Ʈ + ִ. URL <code>http://example.com/~username/</code> + ϸ "<code>username</code>" Ȩ丮 + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + þ 丮 ִ + ȴ.</p> + + <p>: <a href="public_html.html"> 丮 + (<code>public_html</code>)</a></p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/index.html.zh-cn.utf8 b/docs/manual/howto/index.html.zh-cn.utf8 new file mode 100644 index 0000000..754f139 --- /dev/null +++ b/docs/manual/howto/index.html.zh-cn.utf8 @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn" xml:lang="zh-cn"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>常见操作/教程 - Apache HTTP 服务器 版本 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page" class="no-sidebar"><div id="page-header"> +<p class="menu"><a href="../mod/">模块</a> | <a href="../mod/directives.html">指令</a> | <a href="http://wiki.apache.org/httpd/FAQ">常见问题</a> | <a href="../glossary.html">术语</a> | <a href="../sitemap.html">网站导航</a></p> +<p class="apache">Apache HTTP 服务器版本 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP 服务器</a> > <a href="http://httpd.apache.org/docs/">文档</a> > <a href="../">版本 2.4</a></div><div id="page-content"><div id="preamble"><h1>常见操作/教程</h1> +<div class="toplang"> +<p><span>可用语言: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" title="Simplified Chinese"> zh-cn </a></p> +</div> +<div class="outofdate">此翻译可能过期。要了解最近的更改,请阅读英文版。</div> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="howto" id="howto">常见操作/教程</a></h2> + + + + <dl> + <dt>认证与授权</dt> + <dd> + <p>认证是你验证某人是所声称的人。 + 授权是允许某人执行他想要的操作,或者获得想要的信息。</p> + + <p>参见: <a href="auth.html">认证,授权与访问控制</a></p> + </dd> + </dl> + + <dl> + <dt>访问控制</dt> + <dd> + <p>访问控制是操作限制,或基于任意条件访问资源。这可以通过多种方法完成。</p> + + + </dd> + </dl> + + <dl> + <dt>CGI 与动态内容</dt> + <dd> + <p>CGI (通用网管接口) 为 web 服务器定义了与外部的内容生成程序的操作接口, + 通常称为 CGI 程序或 CGI 脚本。它是在 web 站点放入动态内容的最简单, + 也最常用的方法。 本文简单介绍了在 Apache 服务器中配置 CGI 的方法, + 以及如何编写 CGI 程序。</p> + + <p>参见: <a href="cgi.html">CGI 与动态内容</a></p> + </dd> + </dl> + + <dl> + <dt><code>.htaccess</code> 文件</dt> + <dd> + <p><code>.htaccess</code> files provide a way to make configuration + changes on a per-directory basis. A file, containing one or more + configuration directives, is placed in a particular document directory, + and the directives apply to that directory, and all subdirectories thereof.</p> + + <p>See: <a href="htaccess.html"><code>.htaccess</code> files</a></p> + </dd> + </dl> + + <dl> + <dt>服务器端插入简介</dt> + <dd> + <p>SSI (服务器端插入) 是在 HTML 页面中放入的指令,在页面被访问的时候执行。 + 它允许你在现有的 HTML 页面增加动态生成的内容,不需要通过 CGI + 程序或其它动态计数来生成整个页面。</p> + + <p>参见: <a href="ssi.html">服务器端插入 (SSI)</a></p> + </dd> + </dl> + + <dl> + <dt>用户私人网站目录</dt> + <dd> + <p>在有多个用户的系统中,使用 <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> 指令,可以允许每个用户在他们的根目录中都有一个 + web 站点。 访问 URL <code>http://example.com/~username/</code> 会得到位于用户 + "<code>username</code>" 根目录中由 <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> 指定的子目录中的内容。</p> + + <p>参见: <a href="public_html.html">用户私人网站目录 (<code>public_html</code>)</a></p> + </dd> + </dl> + + </div></div> +<div class="bottomlang"> +<p><span>可用语言: </span><a href="../en/howto/" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../zh-cn/howto/" title="Simplified Chinese"> zh-cn </a></p> +</div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />基于 <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> 许可证.</p> +<p class="menu"><a href="../mod/">模块</a> | <a href="../mod/directives.html">指令</a> | <a href="http://wiki.apache.org/httpd/FAQ">常见问题</a> | <a href="../glossary.html">术语</a> | <a href="../sitemap.html">网站导航</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html b/docs/manual/howto/public_html.html new file mode 100644 index 0000000..bd099f3 --- /dev/null +++ b/docs/manual/howto/public_html.html @@ -0,0 +1,25 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: public_html.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: public_html.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: public_html.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: public_html.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: public_html.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR + +URI: public_html.html.tr.utf8 +Content-Language: tr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/public_html.html.en b/docs/manual/howto/public_html.html.en new file mode 100644 index 0000000..d0b5162 --- /dev/null +++ b/docs/manual/howto/public_html.html.en @@ -0,0 +1,218 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Per-user web directories - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Per-user web directories</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/public_html.html" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + +<p>On systems with multiple users, each user can be permitted to have a + web site in their home directory using the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive. Visitors + to a URL <code>http://example.com/~username/</code> will get content + out of the home directory of the user "<code>username</code>", out of + the subdirectory specified by the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.</p> +<p>Note that, by default, access to these directories is <strong>not</strong> + enabled. You can enable access when using <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> by uncommenting the line:</p> + <pre class="prettyprint lang-config">#Include conf/extra/httpd-userdir.conf</pre> + + <p>in the default config file <code>conf/httpd.conf</code>, and adapting the <code>httpd-userdir.conf</code> + file as necessary, or by including the appropriate directives in a + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> block + within the main config file.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Per-user web directories</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Setting the file path with UserDir</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirecting to external URLs</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable">Restricting what users are permitted to use this + feature</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Enabling a cgi directory for each user</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Allowing users to alter configuration</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="../urlmapping.html">Mapping URLs to the Filesystem</a></li><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Per-user web directories</a></h2> + + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir">Setting the file path with UserDir</a></h2> + + + <p>The <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + directive specifies a directory out of which per-user + content is loaded. This directive may take several different forms.</p> + + <p>If a path is given which does not start with a leading slash, it is + assumed to be a directory path relative to the home directory of the + specified user. Given this configuration:</p> + + <pre class="prettyprint lang-config">UserDir public_html</pre> + + + <p>the URL <code>http://example.com/~rbowen/file.html</code> will be + translated to the file path + <code>/home/rbowen/public_html/file.html</code></p> + + <p>If a path is given starting with a slash, a directory path will be + constructed using that path, plus the username specified. Given this + configuration:</p> + + <pre class="prettyprint lang-config">UserDir /var/html</pre> + + + <p>the URL <code>http://example.com/~rbowen/file.html</code> will be + translated to the file path <code>/var/html/rbowen/file.html</code></p> + + <p>If a path is provided which contains an asterisk (*), a path is used + in which the asterisk is replaced with the username. Given this + configuration:</p> + + <pre class="prettyprint lang-config">UserDir /var/www/*/docs</pre> + + + <p>the URL <code>http://example.com/~rbowen/file.html</code> will be + translated to the file path + <code>/var/www/rbowen/docs/file.html</code></p> + + <p>Multiple directories or directory paths can also be set.</p> + + <pre class="prettyprint lang-config">UserDir public_html /var/html</pre> + + + <p>For the URL <code>http://example.com/~rbowen/file.html</code>, + Apache will search for <code>~rbowen</code>. If it isn't found, + Apache will search for <code>rbowen</code> in <code>/var/html</code>. If + found, the above URL will then be translated to the file path + <code>/var/html/rbowen/file.html</code></p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="redirect" id="redirect">Redirecting to external URLs</a></h2> + + <p>The <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive can be + used to redirect user directory requests to external URLs.</p> + + <pre class="prettyprint lang-config">UserDir http://example.org/users/*/</pre> + + + <p>The above example will redirect a request for + <code>http://example.com/~bob/abc.html</code> to + <code>http://example.org/users/bob/abc.html</code>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable">Restricting what users are permitted to use this + feature</a></h2> + + + <p>Using the syntax shown in the UserDir documentation, you can restrict + what users are permitted to use this functionality:</p> + + <pre class="prettyprint lang-config">UserDir disabled root jro fish</pre> + + + <p>The configuration above will enable the feature for all users + except for those listed in the <code>disabled</code> statement. + You can, likewise, disable the feature for all but a few users by + using a configuration like the following:</p> + + <pre class="prettyprint lang-config">UserDir disabled +UserDir enabled rbowen krietz</pre> + + + <p>See <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + documentation for additional examples.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Enabling a cgi directory for each user</a></h2> + + + <p>In order to give each user their own cgi-bin directory, you can use + a <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + directive to make a particular subdirectory of a user's home directory + cgi-enabled.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin/"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + <p>Then, presuming that <code>UserDir</code> is set to + <code>public_html</code>, a cgi program <code>example.cgi</code> + could be loaded from that directory as:</p> + + <div class="example"><p><code> + http://example.com/~rbowen/cgi-bin/example.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">Allowing users to alter configuration</a></h2> + + + <p>If you want to allows users to modify the server configuration in + their web space, they will need to use <code>.htaccess</code> files to + make these changes. Ensure that you have set <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> to a + value sufficient for the directives that you want to permit the users + to modify. See the <a href="htaccess.html">.htaccess tutorial</a> for + additional details on how this works.</p> + + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/public_html.html" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html.es b/docs/manual/howto/public_html.html.es new file mode 100644 index 0000000..196f472 --- /dev/null +++ b/docs/manual/howto/public_html.html.es @@ -0,0 +1,216 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Directorios web por usuario - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Directorios web por usuario</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + + <p>En sistemas con múltiples usuarios, cada usuario puede tener un website + en su directorio home usando la directiva <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Los visitantes de una URL + <code>http://example.com/~username/</code> recibirán el contenido del + directorio home del usuario "<code>username</code>", en el subdirectorio + especificado por la directiva <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p> + + <p>Tenga en cuenta que, por defecto, el acceso a estos directorios + <strong>NO</strong> está activado. Puede permitir acceso cuando usa + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> quitando el comentario de la línea:</p> + + <pre class="prettyprint lang-config">#Include conf/extra/httpd-userdir.conf</pre> + + + <p>En el fichero por defecto de configuración <code>conf/httpd.conf</code>, + y adaptando el fichero <code>httpd-userdir.conf</code> según sea necesario, + o incluyendo las directivas apropiadas en un bloque + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> dentro del fichero + principal de configuración.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Directorios web por usuario</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Configurando la ruta del fichero con UserDir</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirigiendo a URLs externas</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable">Restringiendo qué usuarios pueden usar esta característica</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Activando un directorio cgi para cada usuario</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Permitiendo a usuarios cambiar la configuración</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="../urlmapping.html">Mapeando URLs al sistema de ficheros</a></li><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Directorios web por usuario</a></h2> + + <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir">Configurando la ruta del fichero con UserDir</a></h2> + + + <p>La directiva <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + especifica un directorio del que cargar contenido por usuario. Esta directiva + puede tener muchas formas distintas.</p> + + <p>Si se especifica una ruta que no empieza con una barra ("/"), se asume que + va a ser una ruta de directorio relativa al directorio home del usuario + especificado. Dada ésta configuración:</p> + + <pre class="prettyprint lang-config">UserDir public_html</pre> + + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/home/rbowen/public_html/file.html</code></p> + + <p>Si la ruta que se especifica comienza con una barra ("/"), la ruta del + directorio se construirá usando esa ruta, más el usuario especificado en la + configuración:</p> + + <pre class="prettyprint lang-config">UserDir /var/html</pre> + + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/var/html/rbowen/file.html</code></p> + + <p>Si se especifica una ruta que contiene un asterisco (*), se usará una ruta + en la que el asterisco se reemplaza con el nombre de usuario. Dada ésta configuración:</p> + + <pre class="prettyprint lang-config">UserDir /var/www/*/docs</pre> + + + <p>La URL <code>http://example.com/~rbowen/file.html</code> se traducirá en + la ruta del fichero <code>/var/www/rbowen/docs/file.html</code></p> + + <p>También se pueden configurar múltiples directorios o rutas de directorios.</p> + + <pre class="prettyprint lang-config">UserDir public_html /var/html</pre> + + + <p>Para la URL <code>http://example.com/~rbowen/file.html</code>, + Apache buscará <code>~rbowen</code>. Si no lo encuentra, Apache buscará + <code>rbowen</code> en <code>/var/html</code>. Si lo encuentra, la URL de más + arriba se traducirá en la ruta del fichero + <code>/var/html/rbowen/file.html</code></p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="redirect" id="redirect">Redirigiendo a URLs externas</a></h2> + + <p>La directiva <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> puede + usarse para redirigir solcitudes de directorios de usuario a URLs externas.</p> + + <pre class="prettyprint lang-config">UserDir http://example.org/users/*/</pre> + + + <p>El ejemplo de aquí arriba redirigirá una solicitud para + <code>http://example.com/~bob/abc.html</code> hacia + <code>http://example.org/users/bob/abc.html</code>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable">Restringiendo qué usuarios pueden usar esta característica</a></h2> + + + <p>Usando la sintaxis que se muestra en la documentación de UserDir, usted + puede restringir a qué usuarios se les permite usar esta funcionalidad:</p> + + <pre class="prettyprint lang-config">UserDir disabled root jro fish</pre> + + + <p>La configuración de aquí arriba permitirá a todos los usuarios excepto a + los que se listan con la declaración <code>disabled</code>. Usted puede, + del mismo modo, deshabilitar esta característica para todos excepto algunos + usuarios usando una configuración como la siguiente:</p> + + <pre class="prettyprint lang-config">UserDir disabled +UserDir enabled rbowen krietz</pre> + + + <p>Vea la documentación de <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> para más + ejemplos.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Activando un directorio cgi para cada usuario</a></h2> + + + <p>Para dar a cada usuario su propio directorio cgi-bin, puede usar una directiva + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + para activar cgi en un subdirectorio en particular del directorio home del usuario.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin/"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + <p>Entonces, asumiendo que <code>UserDir</code> está configurado con la + declaración <code>public_html</code>, un programa cgi <code>example.cgi</code> + podría cargarse de ese directorio así:</p> + + <div class="example"><p><code> + http://example.com/~rbowen/cgi-bin/example.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">Permitiendo a usuarios cambiar la configuración</a></h2> + + + <p>Si quiere permitir que usuarios modifiquen la configuración del servidor en + su espacio web, necesitarán usar ficheros <code>.htaccess</code> para hacer + estos cambios. Asegúrese de tener configurado <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> con un valor suficiente que permita a + los usuarios modificar las directivas que quiera permitir. + Vea el <a href="htaccess.html">tutorial de .htaccess</a> para obtener detalles adicionales sobre cómo funciona.</p> + + </div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html.fr.utf8 b/docs/manual/howto/public_html.html.fr.utf8 new file mode 100644 index 0000000..94844a5 --- /dev/null +++ b/docs/manual/howto/public_html.html.fr.utf8 @@ -0,0 +1,235 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Répertoires web utilisateurs - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Répertoires web utilisateurs</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + +<p>Sur les systèmes multi-utilisateurs, on peut permettre à chaque +utilisateur d'avoir un site web dans son répertoire home à l'aide de la +directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Les +visiteurs de l'URL <code>http://example.com/~nom_utilisateur/</code> +recevront un contenu situé dans le répertoire home de l'utilisateur +"<code>nom_utilisateur</code>", et dans le sous-répertoire spécifié par +la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p> +<p>Notez que par défaut, l'accès à ces répertoires n'est +<strong>pas</strong> permis. Vous pouvez en permettre l'accès à l'aide +de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> en +décommentant la ligne :</p> + <pre class="prettyprint lang-config">#Include conf/extra/httpd-userdir.conf</pre> + + <p>dans le fichier de configuration par défaut + <code>conf/httpd.conf</code>, et en adaptant le + fichier <code>httpd-userdir.conf</code> selon vos besoins, ou en + incluant les directives appropriées dans une section + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de + configuration principal.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Répertoires web utilisateurs</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Définition du chemin des fichiers avec UserDir</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirection vers des URLs externes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable">Définition de la liste des utilisateurs autorisés à utiliser + cette fonctionnalité</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Permettre aux utilisateurs de modifier la + configuration</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../urlmapping.html">Mise en correspondance des URLs +avec le système de fichiers</a></li><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Répertoires web utilisateurs</a></h2> + + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir">Définition du chemin des fichiers avec UserDir</a></h2> + + + <p>La directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + permet de spécifier un répertoire à partir duquel le contenu de + l'utilisateur pourra être chargé. Elle peut revêtir plusieurs + formes.</p> + + <p>Si le chemin spécifié ne commence pas par un slash, il sera + interprété comme chemin relatif au répertoire home de l'utilisateur + considéré. Par exemple, avec cette configuration :</p> + + <pre class="prettyprint lang-config">UserDir public_html</pre> + + + <p>l'URL <code>http://example.com/~rbowen/fichier.html</code> + correspondra au chemin fichier + <code>/home/rbowen/public_html/fichier.html</code></p> + + <p>Si le chemin spécifié commence par un slash, le chemin du fichier + sera construit en utilisant ce chemin, suivi du nom de l'utilisateur + considéré. Par exemple, avec cette configuration :</p> + + <pre class="prettyprint lang-config">UserDir /var/html</pre> + + + <p>l'URL <code>http://example.com/~rbowen/fichier.html</code> + correspondra au chemin fichier + <code>/var/html/rbowen/fichier.html</code></p> + + <p>Si le chemin spécifié contient un astérisque (*), ce dernier sera + remplacé par le nom de l'utilisateur dans le chemin du fichier + correspondant. Par exemple, avec cette configuration :</p> + + <pre class="prettyprint lang-config">UserDir /var/www/*/docs</pre> + + + <p>l'URL <code>http://example.com/~rbowen/fichier.html</code> + correspondra au chemin fichier + <code>/var/www/rbowen/docs/fichier.html</code></p> + + <p>On peut aussi définir plusieurs répertoires ou chemins de + répertoires.</p> + + <pre class="prettyprint lang-config">UserDir public_html /var/html</pre> + + + <p>Avec l'URL <code>http://example.com/~rbowen/fichier.html</code>, + Apache va rechercher <code>~rbowen</code>. S'il ne le trouve pas, + Apache va rechercher <code>rbowen</code> dans + <code>/var/html</code>. S'il le trouve, l'URL ci-dessus correspondra + au chemin fichier <code>/var/html/rbowen/file.html</code></p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="redirect" id="redirect">Redirection vers des URLs externes</a></h2> + + <p>On peut utiliser la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> pour rediriger les requêtes + relatives aux répertoires utilisateurs vers des URLs externes.</p> + + <pre class="prettyprint lang-config">UserDir http://example.org/users/*/</pre> + + + <p>L'exemple ci-dessus va rediriger une requête pour + <code>http://example.com/~bob/abc.html</code> vers + <code>http://exemple.org/users/bob/abc.html</code>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable">Définition de la liste des utilisateurs autorisés à utiliser + cette fonctionnalité</a></h2> + + + <p>En suivant la syntaxe décrite dans la documentation de UserDir, + vous pouvez définir quels utilisateurs sont autorisés à utiliser + cette fonctionnalité :</p> + + <pre class="prettyprint lang-config">UserDir disabled root jro fish</pre> + + + <p>La configuration ci-dessus va autoriser l'utilisation de la + fonctionnalité pour tous les utilisateurs, à l'exception de ceux + listés à la suite de l'argument <code>disabled</code>. De même, vous + pouvez interdire l'utilisation de la fonctionnalité à tous les + utilisateurs sauf certains d'entre eux en utilisant une + configuration du style :</p> + + <pre class="prettyprint lang-config">UserDir disabled +UserDir enabled rbowen krietz</pre> + + + <p>Vous trouverez d'autres exemples dans la documentation de + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></h2> + + + <p>Afin de réserver un répertoire cgi-bin pour chaque utilisateur, + vous pouvez utiliser une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour activer CGI dans un + sous-répertoire particulier d'un répertoire home utilisateur.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin/"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + <p>Avec la configuration ci-dessus, et en supposant que + <code>UserDir</code> est défini à <code>public_html</code>, un + programme CGI <code>exemple.cgi</code> pourra être chargé depuis ce + répertoire en passant par l'URL :</p> + + <div class="example"><p><code> + http://example.com/~rbowen/cgi-bin/exemple.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">Permettre aux utilisateurs de modifier la + configuration</a></h2> + + + <p>Si vous voulez que vos utilisateurs puissent modifier la + configuration du serveur pour ce qui concerne leur espace web, ils + devront utiliser des fichiers <code>.htaccess</code> pour effectuer + ces modifications. Assurez-vous d'avoir défini la directive + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à une valeur + appropriée pour les directives dont vous voulez permettre la + modification aux utilisateurs. Voir le <a href="htaccess.html">tutoriel .htaccess</a> pour plus de détails sur + la manière dont tout ceci fonctionne.</p> + + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html.ja.utf8 b/docs/manual/howto/public_html.html.ja.utf8 new file mode 100644 index 0000000..272e5c1 --- /dev/null +++ b/docs/manual/howto/public_html.html.ja.utf8 @@ -0,0 +1,228 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ユーザ毎のウェブディレクトリ - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>ユーザ毎のウェブディレクトリ</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> + +<p>複数のユーザのいるシステムでは、<code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブを使って + 各ユーザがホームディレクトリにウェブサイトを構築できるように設定することが + 可能です。URL <code>http://example.com/~username/</code> を訪れた人は + "<code>username</code>" というユーザの <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブで指定された + サブディレクトリからコンテンツを得ることになります。</p> + + <p>in the default config file, and adapting the <code>httpd-userdir.conf</code> + file as necessary, or by including the appropriate directives in a + <code>Directory</code> block within the main config file.</p> + <p>デフォルトではこれらのディレクトリへのアクセスは<strong>許可されていません</strong>。 + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> を使って有効にできます。 + 有効にするには、デフォルトの設定ファイルで付随する + <code>httpd-userdir.conf</code> ファイルが必要で、 + その中の次の行のコメントアウトを外して有効にするか、 + </p> + <div class="example"><p><code> + #Include conf/extra/httpd-userdir.conf + </code></p></div> + <p>あるいは、メインの設定ファイル中の <code>Directory</code> + ブロックの中に適切にディレクティブを記述しておきます。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">ユーザ毎のウェブディレクトリ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir を使ってファイルのパスを設定する</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#redirect">外部 URL にリダイレクトする</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable">この機能を使用できるユーザを制限する</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">ユーザ毎の CGI ディレクトリ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">ユーザによる設定変更を許可</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="../urlmapping.html">URL からファイルシステムへのマッピング</a></li><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">ユーザ毎のウェブディレクトリ</a></h2> + + <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir">UserDir を使ってファイルのパスを設定する</a></h2> + + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブは + ユーザ毎のコンテンツが読み込まれるディレクトリを指定します。 + このディレクティブはいろいろ違った形式を取ることができます。</p> + + <p>スラッシュで始まらないパスが与えられたときは、ユーザのホームディレクトリ + からの相対パスとみなされます。次の設定があったときに:</p> + + <pre class="prettyprint lang-config">UserDir public_html</pre> + + + <p>URL <code>http://example.com/~rbowen/file.html</code> は + パス <code>/home/rbowen/public_html/file.html</code> へ + 変換されます。</p> + + <p>パスがスラッシュで始まるときは、ディレクトリパスはそのパスに + ユーザ名を加えたものからなります。次の設定のとき:</p> + + <pre class="prettyprint lang-config">UserDir /var/html</pre> + + + <p>URL <code>http://example.com/~rbowen/file.html</code> は + パス <code>/var/html/rbowen/file.html</code> へ変換されます。</p> + + <p>アスタリスク (*) を含むパスが指定されたときは、アスタリスクを + ユーザ名で置換したものが使用されます。このような設定だと:</p> + + <pre class="prettyprint lang-config">UserDir /var/www/*/docs</pre> + + + <p>URL <code>http://example.com/~rbowen/file.html</code> は + パス <code>/var/www/rbowen/docs/file.html</code> へ変換されます。</p> + + <p>ディレクトリやディレクトリパスを複数設定することもできます。</p> + + <pre class="prettyprint lang-config">UserDir public_html /var/html</pre> + + + + <p><code>http://example.com/~rbowen/file.html</code> という + URL に対しては <code>~rbowen</code> を探します。見つからなければ、 + <code>/var/html</code> の下にある <code>rbowen</code> を探します。 + もし見つかれば上記の URL は <code>/var/html/rbowen/file.html</code> + というファイルパスに変換されます。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="redirect" id="redirect">外部 URL にリダイレクトする</a></h2> + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + ディレクティブを使って外部 URL にリダイレクトすることもできます。</p> + + <pre class="prettyprint lang-config">UserDir http://example.org/users/*/</pre> + + + + <p>上記例では <code>http://example.com/~bob/abc.html</code> + へのリクエストは <code>http://example.org/users/bob/abc.html</code> + にリダイレクトされます。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable">この機能を使用できるユーザを制限する</a></h2> + + + <p>UserDir のドキュメントに示されている構文を使うことで、 + どのユーザがこの機能を使うことができるかを制限することができます:</p> + + <div class="example"><p><code> + UserDir enabled<br /> + UserDir disabled root jro fish + </code></p></div> + + <p>上の設定は <code>dissabled</code> 文のユーザ以外のすべてのユーザに + 対して UserDir の機能を有効にします。同様にして、以下のように + 数名のユーザ以外に対してこの機能を無効にすることもできます:</p> + + <pre class="prettyprint lang-config"> UserDir disabled<br /> + UserDir enabled rbowen krietz</pre> + + + <p>他の例は <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + の説明を参照してください。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">ユーザ毎の CGI ディレクトリ</a></h2> + + + <p>それぞれのユーザに専用の cgi-bin ディレクトリを与えるために、 + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> + を使ってユーザのホームディレクトリの指定された領域に対して CGI を有効に + することができます。</p> + + <pre class="prettyprint lang-config"><Directory /home/*/public_html/cgi-bin/> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + <p>そして、<code>UserDir</code> が + <code>public_html</code> に設定されていると仮定すると、 + そのディレクトリの CGI プログラム <code>example.cgi</code> + は以下の様に呼び出されることができます:</p> + + <div class="example"><p><code> + http://example.com/~rbowen/cgi-bin/example.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">ユーザによる設定変更を許可</a></h2> + + + <p>ユーザに彼らのウェブ空間でのサーバの設定の変更を許可する場合、 + ユーザは <code>.htaccess</code> ファイルを使って設定を変更する必要があります。 + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> の値を + ユーザが変更することを許可したいディレクティブに対して十分なものに + 設定していることを確認してください。この機能がどのようにして動作しているか + の詳細は <a href="htaccess.html">.htaccess チュートリアル</a> を読んで + ください。</p> + + </div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html.ko.euc-kr b/docs/manual/howto/public_html.html.ko.euc-kr new file mode 100644 index 0000000..3d2f1f3 --- /dev/null +++ b/docs/manual/howto/public_html.html.ko.euc-kr @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ں 丮 - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ں 丮</h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> + +<p> ڰ ִ ýۿ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> þ ϸ + ڴ ڽ Ȩ丮 ȿ Ʈ ִ. + URL <code>http://example.com/~username/</code> ϸ + "<code>username</code>" Ȩ丮 <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> þ + 丮 ִ ȴ.</p> + +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">ں 丮</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir">UserDir ϰ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable"> ̿ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi"> ں cgi 丮 ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">ڰ ֵ </a></li> +</ul><h3></h3><ul class="seealso"><li><a href="../urlmapping.html">URL Ͻýۿ </a></li><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">ں 丮</a></h2> + + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir">UserDir ϰ ϱ</a></h2> + + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + þ ں 丮 Ѵ. + þ .</p> + + <p> ʴ θ ϸ + Ȩ丮 丮 η óѴ. , + Ʒ :</p> + + <div class="example"><p><code> + UserDir public_html + </code></p></div> + + <p>URL <code>http://example.com/~rbowen/file.html</code> + <code>/home/rbowen/public_html/file.html</code> + Ѵ.</p> + + <p> ϴ θ ϸ 丮 + ڸ 丮 θ Ѵ. , Ʒ + :</p> + + <div class="example"><p><code> + UserDir /var/html + </code></p></div> + + <p>URL <code>http://example.com/~rbowen/file.html</code> + <code>/var/html/rbowen/file.html</code> Ѵ.</p> + + <p>ǥ (*) θ ϸ ǥ ڸ + ü θ Ѵ. , Ʒ :</p> + + <div class="example"><p><code> + UserDir /var/www/*/docs + </code></p></div> + + <p>URL <code>http://example.com/~rbowen/file.html</code> + <code>/var/www/rbowen/docs/file.html</code> + Ѵ.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable"> ̿ ϱ</a></h2> + + + <p>UserDir ִ Ͽ ں 丮 + ̿ ִ ڸ ִ:</p> + + <div class="example"><p><code> + UserDir enabled<br /> + UserDir disabled root jro fish + </code></p></div> + + <p> <code>disabled</code> 忡 + ϰ ڿ 丮 Ѵ. , + ڸ ϰ + ִ:</p> + + <div class="example"><p><code> + UserDir disabled<br /> + UserDir enabled rbowen krietz + </code></p></div> + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + ִ ٸ 鵵 ϶.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi"> ں cgi 丮 ϱ</a></h2> + + + <p>ڸ cgi-bin 丮 οϷ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> þ + Ͽ Ȩ丮 Ư 丮 cgi ϰ + .</p> + + <div class="example"><p><code> + <Directory /home/*/public_html/cgi-bin/><br /> + Options ExecCGI<br /> + SetHandler cgi-script<br /> + </Directory> + </code></p></div> + + <p><code>UserDir</code> <code>public_html</code>̶ + ϸ, ȿ ִ cgi α + <code>example.cgi</code> ִ.</p> + + <div class="example"><p><code> + http://example.com/~rbowen/cgi-bin/example.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">ڰ ֵ </a></h2> + + + <p>ڰ ڽ Ϸ, + <code>.htaccess</code> ־ Ѵ. <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ڰ + ִ þ ϶. ϴ + ڼ <a href="htaccess.html">.htaccess + 丮</a> ϶.</p> + + </div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/public_html.html.tr.utf8 b/docs/manual/howto/public_html.html.tr.utf8 new file mode 100644 index 0000000..7c512a8 --- /dev/null +++ b/docs/manual/howto/public_html.html.tr.utf8 @@ -0,0 +1,229 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Kullanıcı Dizinleri (public_html) - Apache HTTP Sunucusu Sürüm 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p> +<p class="apache">Apache HTTP Sunucusu Sürüm 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="../">Sürüm 2.4</a> > <a href="./">Nasıllar ve Öğreticiler</a></div><div id="page-content"><div id="preamble"><h1>Kullanıcı Dizinleri (public_html)</h1> +<div class="toplang"> +<p><span>Mevcut Diller: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" title="Türkçe"> tr </a></p> +</div> + + <p>Çok kullanıcılı sistemlerde, <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesi ile her kullanıcının kendi ev dizininde + bir sitesi olması sağlanabilir. + <code>http://example.com/~kullanıcı/</code> adresinin ziyaretçileri + "kullanıcı" isimli kullanıcının ev dizininin içeriğini değil, <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesinde belirtilen alt + dizinin içeriğini görürler.</p> + + <p>Öntanımlı olarak bu dizinlere erişimin etkin olmadığını unutmayınız. + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesini + kullanırken <code>conf/httpd.conf</code> öntanımlı yapılandırma + dosyasındaki</p> + + <pre class="prettyprint lang-config">#Include conf/extra/httpd-userdir.conf</pre> + + + <p>satırını etkin hale getirip, gerekiyorsa <code>httpd-userdir.conf</code> + dosyasını da düzenleyerek veya ana yapılandırma dosyasında bir + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> bloğu içine + uygun yönergeleri yerleştirerek bu dizinlere erişimi etkin hale + getirebilirsiniz.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Kullanıcı sayfaları dizinleri</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#userdir"><code>UserDir</code> ile dosya yolunun belirtilmesi</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Harici adreslere yönlendirme</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#enable">Bu özelliği kullanacak kullanıcıların sınırlandırılması</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Her kullanıcıya bir CGI dizini tahsis etmek</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Kullanıcıların yapılandırmayı değiştirmesine izin vermek</a></li> +</ul><h3>Ayrıca bakınız:</h3><ul class="seealso"><li><a href="../urlmapping.html">URL’lerin Dosya Sistemi ile + Eşleştirilmesi</a></li><li><a href="#comments_section">Yorumlar</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Kullanıcı sayfaları dizinleri</a></h2> + + <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="userdir" id="userdir"><code>UserDir</code> ile dosya yolunun belirtilmesi</a></h2> + + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesinde + kullanıcı sayfalarının yükleneceği dizin belirtilir. Bu yönergeye değeri + çeşitli biçimlerde atanabilir.</p> + + <p>Başında bölü çizgisi bulunmayan bir dosya yolu belirtilmişse, + kullanıcının ev dizinine göreli bir dizin belirtildiği varsayılır. + Yapılandırmada şöyle bir satır varsa:</p> + + <pre class="prettyprint lang-config">UserDir public_html</pre> + + + <p><code>http://example.com/~orhan/dosya.html</code> adresine karşılık + gelen dosya yolu <code>/home/orhan/public_html/dosya.html</code> olarak + çözümlenir.</p> + + <p>Eğer başında bölü çizgisi bulunan bir dosya yolu belirtilirse, + kullanıcı sayfalarının bu dizinin altında kullanıcı ismini taşıyan + dizinlerde bulunacağı varsayılır. Yapılandırmada şöyle bir satır + varsa:</p> + + <pre class="prettyprint lang-config">UserDir /var/html</pre> + + + <p><code>http://example.com/~orhan/dosya.html</code> adresine karşılık + gelen dosya yolu <code>/var/html/orhan/dosya.html</code> olarak + çözümlenir.</p> + + <p>Eğer belirtilen dosya yolu bir yıldız imi (*) içeriyorsa yıldız iminin + yerine kullanıcı ismi yerleştirilerek elde edilen dosya yolu + kullanılır. Yapılandırmada şöyle bir satır varsa:</p> + + <pre class="prettyprint lang-config">UserDir /var/html/*/sayfam</pre> + + + <p><code>http://example.com/~orhan/dosya.html</code> adresine karşılık + gelen dosya yolu <code>/var/html/orhan/sayfam/dosya.html</code> + olarak çözümlenir.</p> + + <p>Çok sayıda dizin veya dizin yolu belirtmek de mümkündür.</p> + + <pre class="prettyprint lang-config">UserDir public_html /var/html</pre> + + + <p><code>http://example.com/~orhan/dosya.html</code> adresini Apache önce + <code>/home/orhan/public_html/dosya.html</code> olarak arayacak, + bulamazsa <code>/var/siteler/orhan/sayfam/dosya.html</code> olarak + arayacak, bulduğunda istenen dosyayı sunacaktır.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="redirect" id="redirect">Harici adreslere yönlendirme</a></h2> + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesi + kullanıcı dizini isteklerini harici adreslere yönlendirmek için de + kullanılabilir.</p> + + <pre class="prettyprint lang-config">UserDir http://example.org/users/*/</pre> + + + <p>Bu yapılandırmaya göre <code>http://example.com/~bob/abc.html</code> + için yapılan bir istek <code>http://example.org/users/bob/abc.html</code> + adresine yönlendirilecektir.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="enable" id="enable">Bu özelliği kullanacak kullanıcıların sınırlandırılması</a></h2> + + + <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesinin + açıklamasında belirtilen sözdizimini kullanarak bu işlevselliği bazı + kullanıcılara yasaklayabilirsiniz:</p> + + <pre class="prettyprint lang-config">UserDir disabled root ahmet veli</pre> + + + <p>Bu yapılandırma ile <code>disabled</code> deyiminin bulunduğu + satırdaki kullanıcılar dışında kalan bütün kullanıcılar için bu özellik + etkin olacaktır. Benzer şekilde, aşağıdaki yapılandırma ile + işlevselliğin belli kullanıcılar dışında kullanılmamasını da + sağlayabilirsiniz:</p> + + <pre class="prettyprint lang-config">UserDir disabled +UserDir enabled orhan yasar</pre> + + + <p>Daha fazla örnek için <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesinin açıklamasına bakabilirsiniz.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cgi" id="cgi">Her kullanıcıya bir CGI dizini tahsis etmek</a></h2> + + + <p>Her kullanıcıya kendine ait bir CGI dizini vermek isterseniz, bir + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> yönergesi + ile kullanıcının ev dizinindeki belli bir dizini CGI-etkin duruma + getirebilirsiniz.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin/"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + <p> <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesinde + <code>public_html</code> belirtildiği varsayımıyla + <code>mesela.cgi</code> betiği bu dizinden şöyle bir adresle + yüklenebilir:</p> + + <div class="example"><p><code> + http://example.com/~orhan/cgi-bin/mesela.cgi + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="htaccess" id="htaccess">Kullanıcıların yapılandırmayı değiştirmesine izin vermek</a></h2> + + + <p>Kullanıcıların kendilerine ayrılan bölge içinde sunucu + yapılandırmasını değiştirebilmelerine izin vermek isterseniz, + <code>.htaccess</code> dosyalarını kullanmalarına izin vermeniz + gerekir. Kullanıcının değiştirmesine izin vereceğiniz yönerge türlerini + <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> yönergesinde + belirtmeyi ihmal etmeyin. <code>.htaccess</code> dosyalarının kullanımı + ile ilgili daha ayrıntılı bilgi için <a href="htaccess.html">.htaccess + öğreticisi</a>ne bakınız.</p> + + </div></div> +<div class="bottomlang"> +<p><span>Mevcut Diller: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/public_html.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/public_html.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="../tr/howto/public_html.html" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorumlar</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/public_html.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p> +<p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/reverse_proxy.html b/docs/manual/howto/reverse_proxy.html new file mode 100644 index 0000000..a89178e --- /dev/null +++ b/docs/manual/howto/reverse_proxy.html @@ -0,0 +1,9 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: reverse_proxy.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: reverse_proxy.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/howto/reverse_proxy.html.en b/docs/manual/howto/reverse_proxy.html.en new file mode 100644 index 0000000..27f8788 --- /dev/null +++ b/docs/manual/howto/reverse_proxy.html.en @@ -0,0 +1,360 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Reverse Proxy Guide - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Reverse Proxy Guide</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/reverse_proxy.html" title="English"> en </a> | +<a href="../fr/howto/reverse_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div> + + <p>In 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.</p> + + <p>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 <em>proxied</em> + 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.</p> + + <p>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 <em>is</em> the sole source of all content.</p> + + <p>A typical implementation is below:</p> + <p class="centered"><img src="../images/reverse-proxy-arch.png" alt="reverse-proxy-arch" /></p> + + </div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Reverse Proxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#simple">Simple reverse proxying</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cluster">Clusters and Balancers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">Balancer and BalancerMember configuration</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#failover">Failover</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#manager">Balancer Manager</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#health-check">Dynamic Health Checks</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#status">BalancerMember status flags</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Reverse Proxy</a></h2> + + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li><li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="simple" id="simple">Simple reverse proxying</a></h2> + + + <p> + The <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> + directive specifies the mapping of incoming requests to the backend + server (or a cluster of servers known as a <code>Balancer</code> + group). The simplest example proxies all requests (<code>"/"</code>) + to a single backend: + </p> + + <pre class="prettyprint lang-config">ProxyPass "/" "http://www.example.com/"</pre> + + + <p> + To ensure that and <code>Location:</code> headers generated from + the backend are modified to point to the reverse proxy, instead of + back to itself, the <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> + directive is most often required: + </p> + + <pre class="prettyprint lang-config">ProxyPass "/" "http://www.example.com/" +ProxyPassReverse "/" "http://www.example.com/"</pre> + + + <p>Only specific URIs can be proxied, as shown in this example:</p> + + <pre class="prettyprint lang-config">ProxyPass "/images" "http://www.example.com/" +ProxyPassReverse "/images" "http://www.example.com/"</pre> + + + <p>In the above, any requests which start with the <code>/images</code> + path with be proxied to the specified backend, otherwise it will be handled + locally. + </p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cluster" id="cluster">Clusters and Balancers</a></h2> + + + <p> + 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 <em>cluster</em> but Apache httpd's + term is a <em>balancer</em>. One defines a balancer by leveraging the + <code class="directive"><a href="../mod/mod_proxy.html#proxy"><Proxy></a></code> and + <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> directives as + shown: + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + <p> + The <code>balancer://</code> scheme is what tells httpd that we are creating + a balancer set, with the name <em>myset</em>. It includes 2 backend servers, + which httpd calls <em>BalancerMembers</em>. In this case, any requests for + <code>/images</code> will be proxied to <em>one</em> of the 2 backends. + The <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code> directive + specifies that the <em>myset</em> Balancer use a load balancing algorithm + that balances based on I/O bytes. + </p> + + <div class="note"><h3>Hint</h3> + <p> + <em>BalancerMembers</em> are also sometimes referred to as <em>workers</em>. + </p> + </div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">Balancer and BalancerMember configuration</a></h2> + + + <p> + You can adjust numerous configuration details of the <em>balancers</em> + and the <em>workers</em> via the various parameters defined in + <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. For example, + assuming we would want <code>http://www3.example.com:8080</code> to + handle 3x the traffic with a timeout of 1 second, we would adjust the + configuration as follows: + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="failover" id="failover">Failover</a></h2> + + + <p> + 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: + </p> + <ol> + <li> + <code>http://spare1.example.com:8080</code> and + <code>http://spare2.example.com:8080</code> are only sent traffic if one + or both of <code>http://www2.example.com:8080</code> or + <code>http://www3.example.com:8080</code> is unavailable. (One spare + will be used to replace one unusable member of the same balancer set.) + </li> + <li> + <code>http://hstandby.example.com:8080</code> is only sent traffic if + all other workers in balancer set <code>0</code> are not available. + </li> + <li> + If all load balancer set <code>0</code> workers, spares, and the standby + are unavailable, only then will the + <code>http://bkup1.example.com:8080</code> and + <code>http://bkup2.example.com:8080</code> workers from balancer set + <code>1</code> be brought into rotation. + </li> + </ol> + <p> + Thus, it is possible to have one or more hot spares and hot standbys for + each load balancer set. + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + <p> + 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. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="manager" id="manager">Balancer Manager</a></h2> + + + <p> + One of the most unique and useful features of Apache httpd's reverse proxy is + the embedded <em>balancer-manager</em> application. Similar to + <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>, <em>balancer-manager</em> 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 <em>BalancerMembers</em> + (workers) to an existing balancer. To enable these capability, the following + needs to be added to your configuration: + </p> + + <pre class="prettyprint lang-config"><Location "/balancer-manager"> + SetHandler balancer-manager + Require host localhost +</Location></pre> + + + <div class="warning"><h3>Warning</h3> + <p>Do not enable the <em>balancer-manager</em> until you have <a href="../mod/mod_proxy.html#access">secured your server</a>. In + particular, ensure that access to the URL is tightly + restricted.</p> + </div> + + <p> + When the reverse proxy server is accessed at that url + (eg: <code>http://rproxy.example.com/balancer-manager/</code>, you will see a + page similar to the below: + </p> + <p class="centered"><img src="../images/bal-man.png" alt="balancer-manager page" /></p> + + <p> + 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: + </p> + <p class="centered"><img src="../images/bal-man-b.png" alt="balancer-manager page" /></p> + + <p> + Whereas clicking on a worker, displays this page: + </p> + <p class="centered"><img src="../images/bal-man-w.png" alt="balancer-manager page" /></p> + + <p> + To have these changes persist restarts of the reverse proxy, ensure that + <code class="directive"><a href="../mod/mod_proxy.html#balancerpersist">BalancerPersist</a></code> is enabled. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="health-check" id="health-check">Dynamic Health Checks</a></h2> + + + <p> + Before httpd proxies a request to a worker, it can <em>"test"</em> if that worker + is available via setting the <code>ping</code> parameter for that worker using + <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. Oftentimes it is + more useful to check the health of the workers <em>out of band</em>, in a + dynamic fashion. This is achieved in Apache httpd by the + <code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code> module. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="status" id="status">BalancerMember status flags</a></h2> + + + <p> + In the <em>balancer-manager</em> the current state, or <em>status</em>, of a worker + is displayed and can be set/reset. The meanings of these statuses are as follows: + </p> + <table class="bordered"> + <tr><th>Flag</th><th>String</th><th>Description</th></tr> + <tr><td> </td><td><em>Ok</em></td><td>Worker is available</td></tr> + <tr><td> </td><td><em>Init</em></td><td>Worker has been initialized</td></tr> + <tr><td><code>D</code></td><td><em>Dis</em></td><td>Worker is disabled and will not accept any requests; will be + automatically retried.</td></tr> + <tr><td><code>S</code></td><td><em>Stop</em></td><td>Worker is administratively stopped; will not accept requests + and will not be automatically retried</td></tr> + <tr><td><code>I</code></td><td><em>Ign</em></td><td>Worker is in ignore-errors mode and will always be considered available.</td></tr> + <tr><td><code>R</code></td><td><em>Spar</em></td><td>Worker is a hot spare. For each worker in a given lbset that is unusable + (draining, stopped, in error, etc.), a usable hot spare with the same lbset will be used in + its place. Hot spares can help ensure that a specific number of workers are always available + for use by a balancer.</td></tr> + <tr><td><code>H</code></td><td><em>Stby</em></td><td>Worker is in hot-standby mode and will only be used if no other + viable workers or spares are available in the balancer set.</td></tr> + <tr><td><code>E</code></td><td><em>Err</em></td><td>Worker is in an error state, usually due to failing pre-request check; + requests will not be proxied to this worker, but it will be retried depending on + the <code>retry</code> setting of the worker.</td></tr> + <tr><td><code>N</code></td><td><em>Drn</em></td><td>Worker is in drain mode and will only accept existing sticky sessions + destined for itself and ignore all other requests.</td></tr> + <tr><td><code>C</code></td><td><em>HcFl</em></td><td>Worker has failed dynamic health check and will not be used until it + passes subsequent health checks.</td></tr> + </table> + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/reverse_proxy.html" title="English"> en </a> | +<a href="../fr/howto/reverse_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/reverse_proxy.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/reverse_proxy.html.fr.utf8 b/docs/manual/howto/reverse_proxy.html.fr.utf8 new file mode 100644 index 0000000..d9d634e --- /dev/null +++ b/docs/manual/howto/reverse_proxy.html.fr.utf8 @@ -0,0 +1,381 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Guide de configuration d'un mandataire inverse - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Guide de configuration d'un mandataire inverse</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/reverse_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/howto/reverse_proxy.html" title="Français"> fr </a></p> +</div> + + <p>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".</p> + + <p>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 <em>mandatée</em> 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.</p> + + <p>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 <em>est</em> le seul serveur accessible pouvant lui fournir du + contenu.</p> + + <p>Voici un exemple typique d'implémentation de cette fonctionnalité :</p> + <p class="centered"><img src="../images/reverse-proxy-arch.png" alt="reverse-proxy-arch" /></p> + + </div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Mandataire inverse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#simple">Mandatement inverse simple</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#cluster">Clusters et Balancers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">Configuration du Balancer et des BalancerMembers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#failover">Gestion des indisponibilités (Failover)</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#manager">Gestion du répartiteur de charge</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#health-check">Vérification dynamique du bon fonctionnement d'un serveur + d'arrière-plan</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#status">Drapeaux d'état d'un membre du groupe de répartition de charge</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Mandataire inverse</a></h2> + + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li><li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code></li></ul></td></tr></table> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="simple" id="simple">Mandatement inverse simple</a></h2> + + + <p> + La directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> permet de + rediriger les requêtes entrantes vers un serveur d'arrière-plan (ou un + cluster de serveurs plus connu sous le nom de groupe + <code>Balancer</code>). Dans cet exemple le plus simple, toutes les + requêtes (<code>"/"</code>) sont redirigées vers un serveur d'arrière-plan + unique : + </p> + + <pre class="prettyprint lang-config">ProxyPass "/" "http://www.example.com/"</pre> + + + <p> + Pour être sur que cette redirection soit effectuée et que les en-têtes + <code>Location:</code> 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 directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> est souvent requise : + </p> + + <pre class="prettyprint lang-config">ProxyPass "/" "http://www.example.com/" +ProxyPassReverse "/" "http://www.example.com/"</pre> + + + <p>Seules des URIs spécifiques peuvent être mandatées, comme le montre + l'exemple suivant :</p> + + <pre class="prettyprint lang-config">ProxyPass "/images" "http://www.example.com/" +ProxyPassReverse "/images" "http://www.example.com/"</pre> + + + <p>Dans l'exemple précédent, si le chemin d'une requête commence par + <code>/images</code>, elle sera redirigée vers le serveur d'arrière-plan + spécifié ; dans le cas contraire, elle sera traitée localement. + </p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="cluster" id="cluster">Clusters et Balancers</a></h2> + + + <p> + 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 + <em>cluster</em>, mais dans la terminologie d'Apache httpd, on utilise + plutôt le terme de <em>balancer</em>. Un balancer se définit en + utilisant les directives <code class="directive"><a href="../mod/mod_proxy.html#proxy"><Proxy></a></code> et <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> comme suit : + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + <p> + Le protocole <code>balancer://</code> indique à httpd que l'on souhaite + créer un balancer nommé <em>myset</em>. Ce balancer comporte deux serveurs + d'arrière-plan référencés dans la terminologie httpd sous le nom de + <em>BalancerMembers</em>. Avec cet exemple, toute requête dont le chemin + commence par <code>/images</code> sera mandatée vers <em>un</em> des deux + serveurs d'arrière-plan. La directive <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code> définit ici pour le balancer + <em>myset</em> un algorithme de + répartition de charge basé sur le trafic entrées/sorties. + </p> + + <div class="note"><h3>Remarque</h3> + <p> + Les <em>BalancerMembers</em> sont aussi souvent référencés sous le terme + <em>workers</em>. + </p> + </div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">Configuration du Balancer et des BalancerMembers</a></h2> + + + <p> + Vous pouvez configurer de manière détaillée les <em>balancers</em> et + <em>workers</em> via les nombreux paramètres de la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. Par exemple, si vous souhaitez + que <code>http://www3.example.com:8080</code> traite avec un facteur 3 le + trafic avec un timeout d'une seconde, utilisez la configuration suivante : + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="failover" id="failover">Gestion des indisponibilités (Failover)</a></h2> + + + <p> + 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 : + </p> + <ol> + <li> + <code>http://spare1.example.com:8080</code> et + <code>http://spare2.example.com:8080</code> ne sont sollicités que si + <code>http://www2.example.com:8080</code> ou + <code>http://www3.example.com:8080</code> est indisponible (un serveur + de remplacement sera utilisé à la place d'un membre indisponible du même + jeu de serveurs cibles). + </li> + <li> + <code>http://hstandby.example.com:8080</code> n'est sollicité que si + tous les autres serveurs cibles du jeu de serveurs <code>0</code> sont + indisponibles. + </li> + <li> + Les serveurs <code>http://bkup1.example.com:8080</code> et + <code>http://bkup2.example.com:8080</code> du jeu <code>1</code> ne seront sollicités que si + tous les serveurs du jeu <code>0</code>, tous les serveurs de + remplacement et tous les serveurs de standby sont indisponibles. + </li> + </ol> + <p> + 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. + </p> + + <pre class="prettyprint lang-config"><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/"</pre> + + + <p> + 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. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="manager" id="manager">Gestion du répartiteur de charge</a></h2> + + + <p> + L'application <em>balancer-manager</em> fournie avec le mandataire inverse + d'Apache httpd en est un des outils les plus utiles. Comme + <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>, <em>balancer-manager</em> 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 : + </p> + + <pre class="prettyprint lang-config"><Location "/balancer-manager"> + SetHandler balancer-manager + Require host localhost +</Location></pre> + + + <div class="warning"><h3>Avertissement</h3> + <p>N'activez le <em>balancer-manager</em> que si vous avez déjà <a href="../mod/mod_proxy.html#access">sécurisé votre serveur</a>. + Assurez-vous en particulier que l'accès à l'URL soit fortement restreint.</p> + </div> + + <p> + Lorsque vous accédez au serveur mandataire avec une adresse du style + <code>http://rproxy.example.com/balancer-manager/</code>, la page suivante + s'affiche : + </p> + <p class="centered"><img src="../images/bal-man.png" alt="balancer-manager page" /></p> + + <p> + 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 + sur le répartiteur, la page suivante s'affiche : + </p> + <p class="centered"><img src="../images/bal-man-b.png" alt="balancer-manager page" /></p> + + <p> + Si on clique sur un membre du groupe de répartition de charge, la page + suivante s'affiche : + </p> + <p class="centered"><img src="../images/bal-man-w.png" alt="balancer-manager page" /></p> + + <p> + Si vous souhaitez que ces modifications soient conservées après un + redémarrage du serveur, assurez-vous que la directive <code class="directive"><a href="../mod/mod_proxy.html#balancerpersist">BalancerPersist</a></code> soit définie à On. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="health-check" id="health-check">Vérification dynamique du bon fonctionnement d'un serveur + d'arrière-plan</a></h2> + + + <p> + Avant que le mandataire httpd ne fasse appel à un serveur d'arrière-plan, il + peut <em>"tester"</em> si ce dernier est disponible en définissant le + paramètre <code>ping</code> de ce serveur via la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. Cependant, il est souvent plus + judicieux de vérifier le bon fonctionnement d'un serveur <em>hors + bande</em> et de manière dynamique via le module + <code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code> d'Apache httpd. + </p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="status" id="status">Drapeaux d'état d'un membre du groupe de répartition de charge</a></h2> + + + <p> + <em>balancer-manager</em> permet d'afficher et de modifier l'état d'un + membre du groupe de répartition de charge. Les différents états et leurs + significations sont les suivants : + </p> + <table class="bordered"> + <tr><th>Drapeau</th><th>Sigle</th><th>Description</th></tr> + <tr><td> </td><td><em>Ok</em></td><td>Le serveur est disponible</td></tr> + <tr><td> </td><td><em>Init</em></td><td>Le serveur a été initialisé</td></tr> + <tr><td><code>D</code></td><td><em>Dis</em></td><td>Le serveur est + désactivé et n'accepte aucune requête ; il sera retesté automatiquement.</td></tr> + <tr><td><code>S</code></td><td><em>Stop</em></td><td>Le serveur a été + arrêté par l'administrateur ; il n'accepte aucune requête et il ne sera + pas retesté automatiquement.</td></tr> + <tr><td><code>I</code></td><td><em>Ign</em></td><td>Les erreurs + concernant ce serveur sont ignorées et il sera donc toujours considéré + comme disponible.</td></tr> + <tr><td><code>R</code></td><td><em>Spar</em></td><td>Le serveur cible sert de remplaçant à + chaud. Lorsqu'un serveur cible avec un lbset donné est inutilisable + (maintenance, arrêt, en erreur, etc...), un serveur de remplacement à + chaud libre de même lbset sera utilisé à sa place. Les remplaçants à + chaud permettent de s'assurer qu'un nombre déterminé de serveurs cibles + sera toujours disponible pour un répartiteur de charge.</td></tr> + <tr><td><code>H</code></td><td><em>Stby</em></td><td>Le serveur est en + mode hot-standby et ne sera donc utilisé que si aucun autre serveur ou + serveur de remplacement n'est disponible dans le jeu de serveurs du + répartiteur de charge.</td></tr> + <tr><td><code>E</code></td><td><em>Err</em></td><td>Le serveur est en + erreur, en général suite à un test préalable à une requête ; aucune + requête ne lui sera soumise, mais il sera retesté en fonction de la + valeur de son paramètre <code>retry</code>.</td></tr> + <tr><td><code>N</code></td><td><em>Drn</em></td><td>Le serveur est en + mode drain ; il n'acceptera de requêtes que dans le cadre des sessions + persistantes qui lui sont réservées et ignorera toutes les autres.</td></tr> + <tr><td><code>C</code></td><td><em>HcFl</em></td><td>Le serveur a échoué + au test dynamique de bon fonctionnement et ne sera utilisé que lorsqu'il + aura réussi un test ultérieur.</td></tr> + </table> + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/reverse_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/howto/reverse_proxy.html" title="Français"> fr </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/reverse_proxy.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/ssi.html b/docs/manual/howto/ssi.html new file mode 100644 index 0000000..e3d279f --- /dev/null +++ b/docs/manual/howto/ssi.html @@ -0,0 +1,21 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: ssi.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: ssi.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: ssi.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: ssi.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: ssi.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR diff --git a/docs/manual/howto/ssi.html.en b/docs/manual/howto/ssi.html.en new file mode 100644 index 0000000..53ea265 --- /dev/null +++ b/docs/manual/howto/ssi.html.en @@ -0,0 +1,503 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache httpd Tutorial: Introduction to Server Side Includes - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache httpd Tutorial: Introduction to Server Side Includes</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/ssi.html" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> + +<p>Server-side includes provide a means to add dynamic content to +existing HTML documents.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">What are SSI?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configuring your server to permit SSI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic">Basic SSI directives</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Additional examples</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">What else can I config?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#exec">Executing commands</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Advanced SSI techniques</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusion</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Introduction</a></h2> + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table> + + <p>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.</p> + + <p>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.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">What are SSI?</a></h2> + + <p>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.</p> + + <p>For example, you might place a directive into an existing HTML + page, such as:</p> + + <div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> + </code></p></div> + + <p>And, when the page is served, this fragment will be evaluated and replaced with its value:</p> + + <div class="example"><p><code> + Tuesday, 15-Jan-2013 19:28:54 EST + </code></p></div> + + <p>The 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.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configuring your server to permit SSI</a></h2> + + + <p>To permit SSI on your server, you must have the following + directive either in your <code>httpd.conf</code> file, or in a + <code>.htaccess</code> file:</p> +<pre class="prettyprint lang-config">Options +Includes</pre> + + + <p>This tells Apache that you want to permit files to be parsed + for SSI directives. Note that most configurations contain + multiple <code class="directive"><a href="../mod/core.html#options">Options</a></code> directives + that can override each other. You will probably need to apply the + <code>Options</code> to the specific directory where you want SSI + enabled in order to assure that it gets evaluated last.</p> + + <p>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 <code>.shtml</code>, with + the following directives:</p> +<pre class="prettyprint lang-config">AddType text/html .shtml +AddOutputFilter INCLUDES .shtml</pre> + + + <p>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 <code>.shtml</code> extension, so that those + directives would be executed.</p> + + <p>The other method is to use the <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> directive:</p> +<pre class="prettyprint lang-config">XBitHack on</pre> + + + <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + 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 + using <code>chmod</code>.</p> +<div class="example"><p><code> + chmod +x pagename.html +</code></p></div> + + <p>A brief comment about what not to do. You'll occasionally + see people recommending that you just tell Apache to parse all + <code>.html</code> files for SSI, so that you don't have to + mess with <code>.shtml</code> file names. These folks have + perhaps not heard about <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. 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.</p> + + <p>Of course, on Windows, there is no such thing as an execute + bit to set, so that limits your options a little.</p> + + <p>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:</p> + + <ol> + <li>Use the <code>XBitHack Full</code> configuration. 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.</li> + + <li>Use the directives provided by + <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> to set an explicit expiration + time on your files, thereby letting browsers and proxies + know that it is acceptable to cache them.</li> + </ol> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic" id="basic">Basic SSI directives</a></h2> + + <p>SSI directives have the following syntax:</p> +<div class="example"><p><code> + <!--#function attribute=value attribute=value ... --> +</code></p></div> + + <p>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.</p> + + <p>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</p> + +<h3><a name="todaysdate" id="todaysdate">Today's date</a></h3> + +<div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + <p>The <code>echo</code> function 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 the <code>set</code> function.</p> + + <p>If you don't like the format in which the date gets printed, + you can use the <code>config</code> function, with a + <code>timefmt</code> attribute, to modify that formatting.</p> + +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Today is <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + +<h3><a name="lastmodified" id="lastmodified">Modification date of the file</a></h3> + +<div class="example"><p><code> + This document last modified <!--#flastmod file="index.html" --> +</code></p></div> + + <p>This function is also subject to <code>timefmt</code> format + configurations.</p> + + +<h3><a name="cgi" id="cgi">Including the results of a CGI program</a></h3> + + <p>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.''</p> + +<div class="example"><p><code> + <!--#include virtual="/cgi-bin/counter.pl" --> +</code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="additionalexamples" id="additionalexamples">Additional examples</a></h2> + + + <p>Following are some specific examples of things you can do in + your HTML documents with SSI.</p> + +<h3><a name="docmodified" id="docmodified">When was this document +modified?</a></h3> + + <p>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.</p> +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + This file last modified <!--#flastmod file="ssi.shtml" --> +</code></p></div> + + <p>Of course, you will need to replace the + <code>ssi.shtml</code> with 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 + <code>LAST_MODIFIED</code> variable instead:</p> +<div class="example"><p><code> + <!--#config timefmt="%D" --><br /> + This file last modified <!--#echo var="LAST_MODIFIED" --> +</code></p></div> + + <p>For more details on the <code>timefmt</code> format, go to + your favorite search site and look for <code>strftime</code>. The + syntax is the same.</p> + + +<h3><a name="standard-footer" id="standard-footer">Including a standard footer</a></h3> + + + <p>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.</p> + + <p>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 + <code>include</code> SSI command. The <code>include</code> + function can determine what file to include with either the + <code>file</code> attribute, or the <code>virtual</code> + attribute. The <code>file</code> attribute is a file path, + <em>relative to the current directory</em>. That means that it + cannot be an absolute file path (starting with /), nor can it + contain ../ as part of that path. The <code>virtual</code> + 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.</p> +<div class="example"><p><code> + <!--#include virtual="/footer.html" --> +</code></p></div> + + <p>I'll frequently combine the last two things, putting a + <code>LAST_MODIFIED</code> directive 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.</p> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">What else can I config?</a></h2> + + + <p>In addition to being able to <code>config</code> the time + format, you can also <code>config</code> two other things.</p> + + <p>Usually, when something goes wrong with your SSI directive, + you get the message</p> +<div class="example"><p><code> + [an error occurred while processing this directive] +</code></p></div> + + <p>If you want to change that message to something else, you + can do so with the <code>errmsg</code> attribute to the + <code>config</code> function:</p> +<div class="example"><p><code> + <!--#config errmsg="[It appears that you don't know how to use SSI]" --> +</code></p></div> + + <p>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?)</p> + + <p>And you can <code>config</code> the format in which file + sizes are returned with the <code>sizefmt</code> attribute. You + can specify <code>bytes</code> for a full count in bytes, or + <code>abbrev</code> for an abbreviated number in Kb or Mb, as + appropriate.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="exec" id="exec">Executing commands</a></h2> + + + <p>Here's something else that you can do with the <code>exec</code> + function. You can actually have SSI execute a command using the + shell (<code>/bin/sh</code>, to be precise - or the DOS shell, + if you're on Win32). The following, for example, will give you + a directory listing.</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="ls" --><br /> + </pre> +</code></p></div> + + <p>or, on Windows</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="dir" --><br /> + </pre> +</code></p></div> + + <p>You might notice some strange formatting with this directive + on Windows, because the output from <code>dir</code> contains + the string ``<<code>dir</code>>'' in it, which confuses + browsers.</p> + + <p>Note that this feature is exceedingly dangerous, as it will + execute whatever code happens to be embedded in the + <code>exec</code> tag. 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 + <code>exec</code> feature, with the <code>IncludesNOEXEC</code> + argument to the <code>Options</code> directive.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="advanced" id="advanced">Advanced SSI techniques</a></h2> + + + <p>In addition to spitting out content, Apache SSI gives you + the option of setting variables, and using those variables in + comparisons and conditionals.</p> + +<h3><a name="variables" id="variables">Setting variables</a></h3> + + <p>Using the <code>set</code> directive, 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:</p> +<div class="example"><p><code> + <!--#set var="name" value="Rich" --> +</code></p></div> + + <p>In addition to merely setting values literally like that, you + can use any other variable, including <a href="../env.html">environment variables</a> or the variables + discussed above (like <code>LAST_MODIFIED</code>, 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.</p> + + <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" --> + </code></p></div> + + <p>To put a literal dollar sign into the value of your + variable, you need to escape the dollar sign with a + backslash.</p> +<div class="example"><p><code> + <!--#set var="cost" value="\$100" --> +</code></p></div> + + <p>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.)</p> +<div class="example"><p><code> + <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> +</code></p></div> + + +<h3><a name="conditional" id="conditional">Conditional expressions</a></h3> + + + <p>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. + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> provides an <code>if</code>, + <code>elif</code>, <code>else</code>, <code>endif</code> + structure for building conditional statements. This allows you + to effectively generate multiple logical pages out of one + actual page.</p> + + <p>The structure of this conditional construct is:</p> +<div class="example"><p><code> + <!--#if expr="test_condition" --><br /> + <!--#elif expr="test_condition" --><br /> + <!--#else --><br /> + <!--#endif --> +</code></p></div> + + <p>A <em>test_condition</em> 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 <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> + documentation.</p> + + <p>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:</p> + + <div class="example"><p><code> + Good + <!--#if expr="%{TIME_HOUR} <12" --><br /> + morning!<br /> + <!--#else --><br /> + afternoon!<br /> + <!--#endif --><br /> + </code></p></div> + + <p>Any other variable (either ones that you define, or normal + environment variables) can be used in conditional statements. + See <a href="../expr.html">Expressions in Apache HTTP Server</a> for + more information on the expression evaluation engine.</p> + + <p>With Apache's ability to set environment variables with the + <code>SetEnvIf</code> directives, 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.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="conclusion" id="conclusion">Conclusion</a></h2> + + <p>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.</p> +</div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/ssi.html" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/ssi.html.es b/docs/manual/howto/ssi.html.es new file mode 100644 index 0000000..1b5eebf --- /dev/null +++ b/docs/manual/howto/ssi.html.es @@ -0,0 +1,361 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutorial de Apache httpd: Introducción a los Server Side Includes + - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial de Apache httpd: Introducción a los Server Side Includes +</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> + +<p>Los Server Side Includes (Inclusiones en la parte Servidor) facilitan un método para añadir contenido dinámico a documentos HTML existentes.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introducción</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">¿Qué son los SSI?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurar su servidor para permitir SSI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic">Directivas SSI básicas</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Más ejemplos</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">¿Qué más puedo configurar?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#exec">Ejecutando comandos</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Técnicas avanzadas de SSI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusión</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Introducción</a></h2> + <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table> + + <p>Este artículo trata sobre los Server Side Includes, generalmente llamados SSI. + En este artículo, hablaremos sobre cómo configurar su servidor para permitir SSI, + y de técnicas básicas de SSI para añadir contenido dinámico a sus páginas + HTML existentes.</p> + + <p>Más adelante también hablaremos de algunas técnicas más avanzadas que + pueden usarse con SSI, tales como declaraciones condicionales en sus directivas SSI.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">¿Qué son los SSI?</a></h2> + + <p>SSI (Server Side Includes) son directivas que se introducen en páginas HTML y son + evaluadas por el servidor mientras éste las sirve. Le permiten añadir + contenido generado de manera dinámica a sus páginas HTML existentes sin tener + que servir una página entera a través de un programa CGI, u otra tecnología + para generar contenido dinámico.</p> + + <p>Por ejemplo, podría colocar una directiva en una página existente de HTML + de esta manera:</p> + + <div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> + </code></p></div> + + <p>Y, cuando se sirve la página, este fragmento será evaluado y sustituido con su resultado:</p> + + <div class="example"><p><code> + Tuesday, 15-Jan-2013 19:28:54 EST + </code></p></div> + + <p>La decisión sobre cuándo usar SSI, o de cuándo generar una página al completo con algún programa, suele depender generalmente de la cantidad de contenido estático que contiene, y cuánto de esa página tiene que ser recalculado cada vez que ésta se sirve. SSI es un buen método para añadir pequeñas partes de información, tales como la hora actual - como se ha mostrado más arriba. Pero si la mayoría de su página se tiene que generar en el momento en el que se está sirviendo, necesita buscar otra opción más adecuada que no sea SSI.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurar su servidor para permitir SSI</a></h2> + + + <p>Para permitir SSI en su servidor, debe tener la siguiente directiva en su fichero <code>httpd.conf</code> , o en un fichero + <code>.htaccess</code>:</p> +<pre class="prettyprint lang-config">Options +Includes</pre> + + + <p>Esto le dice a Apache que quiere permitir que se examinen los ficheros buscando directivas SSI. Tenga en cuenta que la mayoría de las configuraciones contienen múltiples directivas <code class="directive"><a href="../mod/core.html#options">Options</a></code> que pueden sobreescribirse las unas a las otras. Probablemente necesitará aplicar <code>Options</code> al directorio específico donde quiere SSI activado para asegurarse de que se evalúa en último lugar y por tanto se acabará aplicando.</p> + + <p>No todos los ficheros se examinan buscando directivas SSI. Usted Le tiene que indicar a Apache qué ficheros se tienen que examinar. Hay dos formas de hacer esto. Puede decirle a Apache que examine cualquier fichero con una extensión determinada, como por ejemplo <code>.shtml</code>, con las siguientes directivas:</p> +<pre class="prettyprint lang-config">AddType text/html .shtml +AddOutputFilter INCLUDES .shtml</pre> + + + <p>Una desventaja de este método es que si quisiera añadir directivas SSI a una página ya existente, tendría que cambiar el nombre de la página, y todos los enlaces que apuntasen a esa página, todo para poder darle la extensión <code>.shtml</code> y que esas directivas sean interpretadas.</p> + + <p>El otro método es usar la directiva <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> :</p> +<pre class="prettyprint lang-config">XBitHack on</pre> + + + <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> le dice a Apache que examine ficheros buscando directivas SSI si los ficheros tienen el bit de ejecución configurado. Asi que para añadir directivas SSI a una página existente, en lugar de tener que cambiarle el nombre, solo tendría que convertirla en ejecutable usando <code>chmod</code>.</p> +<div class="example"><p><code> + chmod +x pagename.html +</code></p></div> + + <p>Una breve recomendación de qué no hay que hacer. Ocasionalmente vemos gente recomendar que le diga a Apache que examine todos los ficheros + <code>.html</code> para activar SSI, para no tener que lidiar renombrando los ficheros a <code>.shtml</code>. Quizás estas personas no hayan oido hablar de <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. Lo que hay que tener en cuenta, es que haciendo eso, está pidiendo al Apache que lea cada uno de los ficheros que manda al cliente, incluso si no contenien directivas SSI. Esto puede ralentizar bastante el servidor, y no es una buena idea.</p> + + <p>Por supuesto, en Windows, no hay tal cosa como la configuración del bit de ejecución, así que esto limita las opciones un poco.</p> + + <p>En su configuración por defecto, Apache no envía la fecha de última modificación o la longitud de contenido de páginas SSI porque es dificil calcular estos valores para contenido dinámico. Esto puede impedir que se cachee un documento, y dar como resultado en apareciencia un rendimiento más lento del cliente. Hay dos maneras de solucionar esto:</p> + + <ol> + <li>Usando la configuración <code>XBitHack Full</code>. Esto le indica a apache que determine la fecha de última modificación mirando sólo la fecha del fichero que se ha solicitado originalmente, obviando la modificación de cualquier otro fichero al que se hace referencia mediante SSI.</li> + + <li>Use las directivas facilitadas por <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> para configurar una expiración específica de tiempo en sus ficheros, y así hacer saber a proxies o navegadores web que es aceptable cachearlos.</li> + </ol> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic" id="basic">Directivas SSI básicas</a></h2> + + <p>Las directivas SSI tienen la sintaxis siguiente:</p> +<div class="example"><p><code> + <!--#function attribute=value attribute=value ... --> +</code></p></div> + + <p>Se formatean como comentarios HTML, así si no tiene SSI habilitado correctamente, el navegador las obviará, pero todavía serán visibles en el fichero HTML. Si tiene SSI configurado correctamente, la directiva será reemplazada con su propio resultado.</p> + + <p>Esta función es una de tantas, y hablaremos de algunas de ellas más adelante. Por ahora, aquí mostramos unos ejemplos de lo que puede hacer con SSI.</p> + +<h3><a name="todaysdate" id="todaysdate">La fecha de hoy</a></h3> + +<div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + <p>La función <code>echo</code> sencillamente muestra el valor de una variable. Hay muchas variables estándar que incluyen un conjunto de variables de entorno disponibles para programas CGI. También puede definir sus propias variables con la función <code>set</code>.</p> + + <p>Si no le gusta el formato en el que se imprime la fecha, puede usar la función <code>config</code>, con un atributo + <code>timefmt</code> para modificar ese formato.</p> + +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Today is <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + +<h3><a name="lastmodified" id="lastmodified">Fecha de modificación del fichero</a></h3> + +<div class="example"><p><code> + La última modificación de este documento <!--#flastmod file="index.html" --> +</code></p></div> + + <p>Esta función también está sujeta a configuraciones de formato de + <code>timefmt</code>.</p> + + +<h3><a name="cgi" id="cgi">Incluyendo los resultados de un programa CGI</a></h3> + + <p>Este es uno de los usos más comunes de SSI - para sacar el resultado de un programa CGI, tal y como ocurre con el que fuera el programa favorito de todos, un ``contador de visitas.''</p> + +<div class="example"><p><code> + <!--#include virtual="/cgi-bin/counter.pl" --> +</code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="additionalexamples" id="additionalexamples">Más ejemplos</a></h2> + + + <p>A continuación hay algunos ejemplos específicos de cosas que puede hacer con SSI en sus documentos HTML.</p> + +<h3><a name="docmodified" id="docmodified">¿Cuándo fue modificado este documento?</a></h3> + + <p>Antes mencionamos que puede usar SSI para informar al usuario cuando el documento ha sido modificado por última vez. Aun así, el método actual para hacerlo se dejó en cuestión. El código que se muestra a continuación, puesto en un documento HTML, pondrá ese sello de tiempo en su página. Por descontado, tendrá que tener SSI habilitado correctamente, como se indicó más arriba.</p> +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Ultima modificación de este fichero <!--#flastmod file="ssi.shtml" --> +</code></p></div> + + <p>Obviamente, necesitará sustituir el nombre de fichero + <code>ssi.shtml</code> con el nombre real del fichero al que usted hace referencia. Esto puede ser inconveniente si solo está buscando un trozo genérico de código que pueda copiar y pegar en cualquier fichero, asi que probablemente necesite usar la variable <code>LAST_MODIFIED</code> en su lugar:</p> +<div class="example"><p><code> + <!--#config timefmt="%D" --><br /> + Última modificación de este fichero <!--#echo var="LAST_MODIFIED" --> +</code></p></div> + + <p>Para más detalles sobre el formato <code>timefmt</code>, vaya a su buscador favorito y busque <code>strftime</code>. La sintaxis es la misma.</p> + + +<h3><a name="standard-footer" id="standard-footer">Incluyendo un pie de página estándar</a></h3> + + + <p>Si gestiona un sitio que tiene más de unas cuantas páginas, probablemente se de cuenta de que modificar todas esa páginas es un auténtico engorro, especialmente si trata de mantener una apareciencia homogénea en todas ellas.</p> + + <p>Si usa un Include de fichero para la cabecera y/o pie de página puede reducir la carga de trabajo de estas actualizaciones. Solo tiene que hacer un sólo pie de página, y después incluirlo en cada página con el comando SSI <code>include</code>. La función <code>include</code> + puede determinar qué fichero incluir cuando usa el atributo + <code>file</code>, o el atributo <code>virtual</code>. El atributo <code>file</code> es una ruta de fichero, <em>relativa al directorio actual</em>. Eso significa que no puede ser una ruta de fichero absoluta (que comienza con /), ni tampoco puede contener ../ como parte de la ruta. El atributo <code>virtual</code> es probablemente más útil, y debería especificar una URL relativa al documento que se está sirviendo. Puede empezar con una /, pero debe estar en el mismo servidor que el fichero que se está sirviendo.</p> +<div class="example"><p><code> + <!--#include virtual="/footer.html" --> +</code></p></div> + + <p>Frecuentemente combinaremos las dos últimas, poniendo una directiva + <code>LAST_MODIFIED</code> dentro de un fichero de pie de página que va a ser incluido. Se pueden encontrar directivas SSI en el fichero que se incluye, las inclusiones pueden anidarse - lo que quiere decir, que el fichero incluido puede incluir otro fichero, y así sucesivamente.</p> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">¿Qué más puedo configurar?</a></h2> + + + <p>Además de poder configurar el formato de la hora, también puede configurar dos cosas más.</p> + + <p>Generalmente, cuando algo sale mal con sus directivas SSI, obtiene el mensaje (ha ocurrido un error procesando esta directiva)</p> +<div class="example"><p><code> + [an error occurred while processing this directive] +</code></p></div> + + <p>Si quiere cambiar ese mensaje por otra cosa, puede hacerlo con el atributo <code>errmsg</code> para la función + <code>config</code>:</p> +<div class="example"><p><code> + <!--#config errmsg="[Parece que no sabe cómo usar SSI]" --> +</code></p></div> + + <p>Afortunadamente, los usuarios finales nunca verán este mensaje, porque habrá resuelto todos los problemas con sus directivas SSI antes de publicar su página web. (¿Verdad?)</p> + + <p>Y puede configurar el formato en el que los tamaños de fichero se muestran con el formato <code>sizefmt</code>. Puede especificar + <code>bytes</code> para un recuento total en bytes, o + <code>abbrev</code> para un número abreviado en Kb o Mb, según sea necesario.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="exec" id="exec">Ejecutando comandos</a></h2> + + + <p> Puede usar la función <code>exec</code> para ejecutar comandos. Y SSI puede ejecutar un comando usando la shell (<code>/bin/sh</code>, para ser más precisos - o la shell de DOS , si está en Win32). Lo siguiente, por ejemplo, le dará un listado de ficheros en un directorio.</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="ls" --><br /> + </pre> +</code></p></div> + + <p>o, en Windows</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="dir" --><br /> + </pre> +</code></p></div> + + <p>Notará un formato estraño con esta directiva en Windows, porque el resultado de <code>dir</code> contiene la cadena de caracterers ``<<code>dir</code>>'' ,que confunde a los navegadores.</p> + + <p>Tenga en cuenta de que esta característica es muy peligrosa, puesto que ejecutará cualquier código que esté especificado con la etiqueta + <code>exec</code>. Si tiene una situación en la que los usuarios pueden editar contenido en sus páginas web, tales como por ejemplo un ``registro de visitas'', asegúrese de tener esta característica deshabilitada. Puede permitir SSI, pero no la característica <code>exec</code>, con el argumento <code>IncludesNOEXEC</code> en la directiva <code>Options</code>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="advanced" id="advanced">Técnicas avanzadas de SSI</a></h2> + + + <p>Además de mostrar contenido, SSI en Apache da la opción de configurar variables y usar esas variables en comparaciones y condicionales.</p> + +<h3><a name="variables" id="variables">Configurando Variables</a></h3> + + <p>Usando la directiva <code>set</code>, puede configurar variables para su uso posterior. La sintaxis es como sigue:</p> +<div class="example"><p><code> + <!--#set var="name" value="Rich" --> +</code></p></div> + + <p>Además de configurar valores literales como esto, puede usar cualquier otra variable, incluyendo <a href="../env.html">variables de entorno</a> o las variables que se han mencionado antes (como por ejemplo <code>LAST_MODIFIED</code>) para dar valores a sus variables. Podrá especificar que algo es una vaiable, en lugar de una cadena de caracters literal, usando el símbolo del dolar ($) antes del nombre de la variable.</p> + + <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" --> + </code></p></div> + + <p>Para poner el símbolo del dolar de manera literal en un valor de su variable tendrá que escapar el símbolo del dolar con una barra "\".</p> +<div class="example"><p><code> + <!--#set var="cost" value="\$100" --> +</code></p></div> + + <p>Por último, si quiere poner una variable entre medias de una cadena de caracteres más larga, y se da la coincidencia de que el nombre de la variable se encontrará con otros caracteres, y de esta manera se confundirá con otros caracteres, puedes poner el nombre de la variable entre llaves, y así eliminar la confusión. (Es dificil encontrar un buen ejemplo para esto, pero con éste a lo mejor entiende lo que tratamos de transmitir.)</p> +<div class="example"><p><code> + <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> +</code></p></div> + + +<h3><a name="conditional" id="conditional">Expresiones condicionales</a></h3> + + + <p>Ahora que tenemos variables, y somos capaces de comparar sus valores, podemos usarlas para expresar condicionales. Esto permite a SSI ser un cierto tipo de lenguaje de programación diminuto. + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> provee una estrucura <code>if</code>, + <code>elif</code>, <code>else</code>, <code>endif</code> + para construir declaraciones condicionales. Esto le permite generar de manera efectiva multitud de páginas lógicas desde tan solo una página.</p> + + <p>La estructura de este sistema condicional es:</p> +<div class="example"><p><code> + <!--#if expr="test_condition" --><br /> + <!--#elif expr="test_condition" --><br /> + <!--#else --><br /> + <!--#endif --> +</code></p></div> + + <p>Una <em>test_condition</em> puede ser cualquier tipo de comparación lógica - o bien comparando valores entre ellos, o probando la ``verdad'' (o falsedad) de un valor en particular. (Una cadena de caracteres cualquiera es verdadera si no está vacía.) Para una lista completa de operadores de comparación, vea la documentación de <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>.</p> + + <p>Por ejemplo, si quiere personalizar el texto en su página web basado en la hora actual, puede usar la siguiente receta, colocada en su página HTML:</p> + + <div class="example"><p><code> + Good + <!--#if expr="%{TIME_HOUR} <12" --><br /> + morning!<br /> + <!--#else --><br /> + afternoon!<br /> + <!--#endif --><br /> + </code></p></div> + + <p>Cualquier otra variable (o bien las que defina usted, o variables de entorno normales) puede usarse en declaraciones condicionales. + Vea <a href="../expr.html">Expresiones en el Servidor Apache HTTP</a> para más información sobre el motor de evaluación de expresiones.</p> + + <p>Con la habilidad de Apache de configurar variables de entorno con directivas <code>SetEnvIf</code>, y otras directivas relacionadas, + esta funcionalidad puede llevarle a hacer una gran variedad de contenido dinámico en la parte de servidor sin tener que depender de una aplicación web al completo.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="conclusion" id="conclusion">Conclusión</a></h2> + + <p>Desde luego SSI no es un reemplazo para CGI u otras tecnologías que se usen para generar páginas web dinámicas. Pero es un gran método para añadir pequeñas cantidaddes de contenido dinámico a páginas web, sin hacer mucho más trabajo extra.</p> +</div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/ssi.html.fr.utf8 b/docs/manual/howto/ssi.html.fr.utf8 new file mode 100644 index 0000000..a5bfcf6 --- /dev/null +++ b/docs/manual/howto/ssi.html.fr.utf8 @@ -0,0 +1,518 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutoriel Apache httpd : Introduction aux "Inclusions Côté Serveur" +(Server Side Includes - SSI) - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache httpd : Introduction aux "Inclusions Côté Serveur" +(Server Side Includes - SSI)</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> + +<p>Les SSI permettent d'ajouter du contenu dynamique à des documents +HTML préexistants.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">Qu'est-ce que SSI ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer votre serveur pour permettre les SSI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic">Directives SSI de base</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Exemples additionnels</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">Que puis-je configurer d'autre ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#exec">Exécution de commandes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Techniques SSI avancées</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusion</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Introduction</a></h2> + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table> + + <p>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.</p> + + <p>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.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">Qu'est-ce que SSI ?</a></h2> + + <p>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.</p> + + <p>Par exemple, vous pouvez insérer la directive suivante dans une + page HTML existante :</p> + + <div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> + </code></p></div> + + <p>Ainsi, lorsque la page sera servie, la directive sera évaluée et + remplacée par sa valeur :</p> + + <div class="example"><p><code> + Tuesday, 15-Jan-2013 19:28:54 EST + </code></p></div> + + <p>Le 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.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurer votre serveur pour permettre les SSI</a></h2> + + + <p>Pour permettre l'utilisation des SSI sur votre serveur, vous + devez ajouter la directive suivante dans votre fichier + <code>httpd.conf</code>, ou dans un fichier <code>.htaccess</code> + :</p> +<pre class="prettyprint lang-config">Options +Includes</pre> + + + <p>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 <code class="directive"><a href="../mod/core.html#options">Options</a></code> + qui peuvent s'écraser les unes les autres. Vous devrez probablement + appliquer ces directives <code>Options</code> au répertoire + spécifique pour lequel vous voulez activer les SSI, afin d'être sûr + qu'elles y seront bien activées.</p> + + <p>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 + <code>.shtml</code>, à l'aide des directives suivantes :</p> +<pre class="prettyprint lang-config">AddType text/html .shtml +AddOutputFilter INCLUDES .shtml</pre> + + + <p>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 + <code>.shtml</code>, condition nécessaire pour que les directives + SSI qu'elle contient soient traitées.</p> + + <p>Une autre méthode consiste à utiliser la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> :</p> +<pre class="prettyprint lang-config">XBitHack on</pre> + + + <p>La directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + 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 de <code>chmod</code>.</p> +<div class="example"><p><code> + chmod +x pagename.html +</code></p></div> + + <p>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 + <code>.html</code>, ce qui vous évite d'avoir à gérer les noms de + fichiers avec extension <code>.shtml</code>. Ils n'ont probablement + pas entendu parler de la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. 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.</p> + + <p>Bien entendu, sous Windows, il n'y a pas de bit d'exécution à + positionner, ce qui limite un peu vos choix.</p> + + <p>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 :</p> + + <ol> + <li>Utilisez la configuration <code>XBitHack Full</code>. 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.</li> + + <li>Utilisez les directives fournies par le module + <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> pour 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.</li> + </ol> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic" id="basic">Directives SSI de base</a></h2> + + <p>Les directives SSI adoptent la syntaxe suivante :</p> +<div class="example"><p><code> + <!--#fonction attribut=valeur attribut=valeur ... --> +</code></p></div> + + <p>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.</p> + + <p>"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.</p> + +<h3><a name="todaysdate" id="todaysdate">La date courante</a></h3> + +<div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + <p>La fonction <code>echo</code> permet 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 fonction <code>set</code>.</p> + + <p>Si vous n'aimez pas le format sous lequel la date s'affiche, vous + pouvez utiliser la fonction <code>config</code> avec un attribut + <code>timefmt</code>, pour le modifier.</p> + +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Today is <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + +<h3><a name="lastmodified" id="lastmodified">Date de modification du fichier</a></h3> + +<div class="example"><p><code> + Dernière modification du document <!--#flastmod file="index.html" --> +</code></p></div> + + <p>Le format peut là aussi être modifié à l'aide de l'attribut + <code>timefmt</code>.</p> + + +<h3><a name="cgi" id="cgi">Inclusion des résultats d'un programme CGI</a></h3> + + <p>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".</p> + +<div class="example"><p><code> + <!--#include virtual="/cgi-bin/counter.pl" --> +</code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="additionalexamples" id="additionalexamples">Exemples additionnels</a></h2> + + + <p>Vous trouverez dans ce qui suit quelques exemples spécifiques de + ce que vous pouvez faire de vos documents HTML avec SSI.</p> + +<h3><a name="docmodified" id="docmodified">Quand ce document a-t-il été modifié ?</a></h3> + + <p>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.</p> +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Dernière modification du fichier <!--#flastmod file="ssi.shtml" --> +</code></p></div> + + <p>Bien entendu, vous devez remplacer <code>ssi.shtml</code> par 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 variable <code>LAST_MODIFIED</code> :</p> +<div class="example"><p><code> + <!--#config timefmt="%D" --><br /> + This file last modified <!--#echo var="LAST_MODIFIED" --> +</code></p></div> + + <p>Pour plus de détails sur le format <code>timefmt</code>, tapez + <code>strftime</code> dans votre moteur de recherche préferé. La + syntaxe est identique.</p> + + +<h3><a name="standard-footer" id="standard-footer">Inclusion d'un pied de page standard</a></h3> + + + <p>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.</p> + + <p>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 <code>include</code>. Pour + définir le fichier à inclure, la fonction <code>include</code> peut + utiliser soit l'attribut <code>file</code>, soit l'attribut + <code>virtual</code>. L'attribut <code>file</code> est un chemin de + fichier <em>relatif au répertoire courant</em>. C'est à dire qu'il + ne peut ni avoir pour valeur un chemin absolu (commençant par /), ni + comporter "../" dans son chemin. L'attribut <code>virtual</code> est + 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.</p> +<div class="example"><p><code> + <!--#include virtual="/footer.html" --> +</code></p></div> + + <p>Je combinerai souvent ces deux derniers points, en ajoutant une + directive <code>LAST_MODIFIED</code> dans 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...</p> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">Que puis-je configurer d'autre ?</a></h2> + + + <p>En plus du format de date, vous pouvez utiliser l'élément + <code>config</code> pour configurer deux autres choses.</p> + + <p>En général, lorsque quelque chose se passe mal avec votre + directive SSI, vous recevez le message :</p> +<div class="example"><p><code> + [an error occurred while processing this directive] +</code></p></div> + + <p>Pour modifier ce message, vous pouvez utiliser l'attribut + <code>errmsg</code> avec la fonction <code>config</code> :</p> +<div class="example"><p><code> + <!--#config errmsg="[Il semblerait que vous ne sachiez pas + utiliser les SSI]" --> +</code></p></div> + + <p>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 ?)</p> + + <p>Vous pouvez aussi modifier le format sous lequel les tailles de + fichiers sont affichées à l'aide de l'attribut <code>sizefmt</code>. + Vous pouvez spécifier <code>bytes</code> pour un affichage en + octets, ou <code>abbrev</code> pour un affichage plus concis en Ko + ou Mo, selon le cas.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="exec" id="exec">Exécution de commandes</a></h2> + + + <p>Voici autre chose que vous pouvez faire avec la fonction + <code>exec</code>. Vous pouvez vraiment faire exécuter une commande + par SSI en utilisant le shell (<code>/bin/sh</code>, 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.</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="ls" --><br /> + </pre> +</code></p></div> + + <p>ou, sous Windows</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="dir" --><br /> + </pre> +</code></p></div> + + <p>Vous noterez probablement l'étrange formatage provoqué par cette + directive sous Windows, car la sortie de <code>dir</code> contient + la chaîne de caractères "<<code>dir</code>>", ce qui trompe le + navigateur.</p> + + <p>Notez que cette fonctionnalité est très dangereuse, car elle va + permettre d'exécuter tout code associé à l'élément + <code>exec</code>. 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é <code>exec</code> à l'aide de l'argument + <code>IncludesNOEXEC</code> de la directive + <code>Options</code>.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="advanced" id="advanced">Techniques SSI avancées</a></h2> + + + <p>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.</p> + +<h3><a name="variables" id="variables">Définition de variables</a></h3> + + <p>Avec l'élément <code>set</code>, 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 :</p> +<div class="example"><p><code> + <!--#set var="name" value="Rich" --> +</code></p></div> + + <p>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 <a href="../env.html">variables d'environnement</a>, ou les variables + décrites plus haut (comme <code>LAST_MODIFIED</code> par 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.</p> + + <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" --> + </code></p></div> + + <p>Pour insérer un caractère $ dans la valeur de votre variable, + vous devez l'échapper à l'aide d'un backslash.</p> +<div class="example"><p><code> + <!--#set var="cost" value="\$100" --> +</code></p></div> + + <p>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).</p> +<div class="example"><p><code> + <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> +</code></p></div> + + +<h3><a name="conditional" id="conditional">Expressions conditionnelles</a></h3> + + + <p>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. + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> fournit une structure <code>if</code>, + <code>elif</code>, <code>else</code>, <code>endif</code> pour la + construction d'expressions conditionnelles, ce qui vous permet de + générer plusieurs pages logiques à partir d'une seule vraie + page.</p> + + <p>La structure de l'expression conditionnelle est :</p> +<div class="example"><p><code> + <!--#if expr="condition" --><br /> + <!--#elif expr="condition" --><br /> + <!--#else --><br /> + <!--#endif --> +</code></p></div> + + <p>Une <em>condition</em> 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 <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>.</p> + + <p>Par exemple, spour insérer l'heure du jour dans votre page web, + vous pouvez ajouter ces lignes dans la page HTML :</p> + + <div class="example"><p><code> + Good + <!--#if expr="%{TIME_HOUR} <12" --><br /> + morning!<br /> + <!--#else --><br /> + afternoon!<br /> + <!--#endif --><br /> + </code></p></div> + + <p>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 <a href="../expr.html">Expressions + rationnelles dans le serveur HTTP Apache</a> pour plus de détails à + propos du fonctionnement du moteur d'évaluation des expressions + rationnelles.</p> + + <p>Associée à la possibilité avec Apache de définir + des variables d'environnement à l'aide de directives + <code>SetEnvIf</code>, 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.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="conclusion" id="conclusion">Conclusion</a></h2> + + <p>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.</p> +</div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/ssi.html.ja.utf8 b/docs/manual/howto/ssi.html.ja.utf8 new file mode 100644 index 0000000..269df5a --- /dev/null +++ b/docs/manual/howto/ssi.html.ja.utf8 @@ -0,0 +1,515 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache チュートリアル: Server Side Includes 入門 - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache チュートリアル: Server Side Includes 入門</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> + +<p>サーバサイドインクルードによって、既存の HTML +ドキュメントに動的なコンテンツを追加することができます。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">はじめに</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">SSI とは ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">SSI を許可するためのサーバの設定</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic">基本的な SSI ディレクティブ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">追加の例</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">他に何が設定できるのか ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#exec">コマンドの実行</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#advanced">高度な SSI テクニック</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">終わりに</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">はじめに</a></h2> + <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table> + + <p>この記事は、通常は単に SSI と呼ばれる Server Side Includes + を扱います。この記事においては、サーバでの SSI を許可するための設定と、 + 現在の HTML ページに動的なコンテンツを加えるためのいくつかの基本的な + SSI 技術を紹介します。</p> + + <p>記事の後半では、SSI ディレクティブで SSI + と共に実行することができる条件文のような + 幾分高度な事柄について述べています。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">SSI とは ?</a></h2> + + <p>SSI (Server Side Includes) は、HTML + ページ中に配置されるディレクティブであり、 + サーバでページを提供する時に評価されます。SSI は、CGI + プログラムやその他の動的な技術で全てのページを提供せずに、 + 動的に生成されたコンテンツを現在の HTML ページに加えます。</p> + + <p>どういう場合に SSI を使い、どういう場合にプログラムで + ページを完全に生成するかは、ページのうちどの程度が静的であり、 + ページが提供されるたびに再計算する必要がどの程度あるかで通常は決定します。 + SSI は現在時刻のような小さい情報を加えるにはうってつけの方法です。 + しかし、そのページのほとんどの部分が提供時に生成される場合は、 + 他の方法を探す必要があります。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">SSI を許可するためのサーバの設定</a></h2> + + + <p>サーバで SSI を許可するには、<code>httpd.conf</code> + ファイルまたは <code>.htaccess</code> + ファイルに次のディレクティブを指定する必要があります:</p> +<div class="example"><p><code> + Options +Includes +</code></p></div> + + <p>この指定は、ファイルを SSI + ディレクティブで解析させることを許可するということを Apache + に伝えます。ほとんどの設定ではお互いを上書きできる、複数の + <code class="directive"><a href="../mod/core.html#options">Options</a></code> があることに + 注意してください。おそらく、設定が最後に評価されることを + 保証されるために、SSI を使用したいディレクトリに <code>Options</code> + ディレクティブを適用する必要があるでしょう。</p> + + <p>全てのファイルが SSI + ディレクティブで解析されるというわけではありません。 + どのファイルが解析されるかを Apache に伝える必要があります。 + これを行なうには二つ方法があります。 + 次のディレクティブを使うことで、例えば <code>.shtml</code> + のような特別なファイル拡張子を持つファイルを解析するよう + Apache に伝えることができます:</p> +<div class="example"><p><code> + AddType text/html .shtml<br /> + AddOutputFilter INCLUDES .shtml +</code></p></div> + + <p>この方法の欠点は、もし現在のページに SSI ディレクティブを加えたい場合、 + それらのディレクティブが実行されるように + <code>.shtml</code> 拡張子にするため、そのページの名前と、 + そのページへの全てのリンクを変更しなければならないことです。</p> + + <p>もう一つの方法は、<code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + ディレクティブを使用することです:</p> +<div class="example"><p><code> + XBitHack on +</code></p></div> + + <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + は、ファイルの実行ビットが立っている場合、 + SSI ディレクティブにより解析することを Apache に伝えます。 + 従って、SSI ディレクティブを現在のページに加えるためには、 + ファイル名を変更しなくてもよく、単に <code>chmod</code> + を使用してファイルを実行可能にするだけで済みます。</p> +<div class="example"><p><code> + chmod +x pagename.html +</code></p></div> + + <p>行なうべきではないことに関する短いコメント。時々誰かが、全ての + <code>.html</code> ファイルを SSI で解析するよう Apache に伝えれば、 + わざわざ <code>.shtml</code> というファイル名にする必要がないといって + 薦めるのを見ることでしょう。こういう人たちは、おそらく + <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + について聞いたことがないのでしょう。 + この方法について注意することは、たとえ SSI + ディレクティブを全く含まない場合でも、Apache がクライアントに + 送る全てのファイルを最後まで読み込ませることになります。 + この方法はかなり処理を遅くするものであり、良くないアイデアです。</p> + + <p>もちろん、Windows ではそのような実行ビットをセット + するようなものはありませんのでオプションが少し制限されています。</p> + + <p>デフォルトの設定では、Apache は SSI ページについて最終変更時刻や + コンテンツの長さを HTTP ヘッダに送りません。 + 動的なコンテンツであるため、それらの値を計算するのが難しいからです。 + このためドキュメントがキャッシュされなくなり、 + 結果としてクライアントの性能が遅くなったように感じさせることになります。 + これを解決する方法が二つあります:</p> + + <ol> + <li><code>XBitHack Full</code> 設定を使用する。 + この設定により、もともと要求されたファイルの時刻を参照し、 + 読み込まれるファイルの変更時刻を無視して最終変更時刻を決定するよう + Apache に伝えます。</li> + + <li><a href="../mod/mod_expires.html">mod_expires</a> + で提供されているディレクティブを使用して、 + ファイルが無効になる時刻を明示します。これにより、 + ブラウザとプロキシにキャッシュが有効であることを通知します。</li> + </ol> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic" id="basic">基本的な SSI ディレクティブ</a></h2> + + <p>SSI ディレクティブは以下の文法で記述します:</p> +<div class="example"><p><code> + <!--#element attribute=value attribute=value ... --> +</code></p></div> + + <p>HTML のコメントのような書式をしているので、もし SSI + を正しく動作可能にしなければ、ブラウザはそれを無視するでしょう。 + しかし、HTML ソース中では見えます。もし SSI を正しく設定したなら、 + ディレクティブはその結果と置き換えられます。</p> + + <p>element はたくさんあるものから一つ指定することができます。 + 指定できるものの大多数については、次回もう少し詳しく説明します。 + ここでは、SSI で行なうことができる例をいくつか示します。</p> + +<h3><a name="todaysdate" id="todaysdate">今日の日付</a></h3> + +<div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + <p><code>echo</code> 要素は単に変数の値を出力します。 + CGI プログラムに利用可能な環境変数の全ての + セットを含む多くの標準変数があります。また、<code>set</code> + 要素を用いることで、独自の変数を定義することができます。 + </p> + + <p>出力される日付の書式が好きではない場合、その書式を修正するために、 + <code>config</code> 要素に <code>timefmt</code> + 属性を使用することができます。</p> + +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Today is <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + +<h3><a name="lastmodified" id="lastmodified">ファイルの変更日</a></h3> + +<div class="example"><p><code> + This document last modified <!--#flastmod file="index.html" --> +</code></p></div> + + <p>この要素も <code>timefmt</code> + フォーマットの設定に従います。</p> + + +<h3><a name="cgi" id="cgi">CGI プログラムの結果を取り込む</a></h3> + + <p>これは、全ての人のお気に入りである ``ヒットカウンタ'' のような + CGI プログラムの結果を出力する SSI + のより一般的な使用のうちの一つです。</p> + +<div class="example"><p><code> + <!--#include virtual="/cgi-bin/counter.pl" --> +</code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="additionalexamples" id="additionalexamples">追加の例</a></h2> + + + <p>以下は、SSI を使用して HTML + ドキュメントにおいてできることのいくつかの特別な例です。</p> + +<h3><a name="docmodified" id="docmodified">いつこのドキュメントは修正されたのか +?</a></h3> + + <p>先に、ドキュメントが最後に変更されたのはいつかを + ユーザに通知するために SSI を使用することができることを述べました。 + しかしながら、実際の方法は、いくぶん問題のままにしておきました。 + HTML ドキュメントに配置された次のコードは、ページにそのような + タイムスタンプを入れるでしょう。もちろん、上述のように、 + SSI を正しく動作可能にしておく必要があります。</p> +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + This file last modified <!--#flastmod file="ssi.shtml" --> +</code></p></div> + + <p>もちろん、<code>ssi.shtml</code> + の部分を実際の当該ファイル名と置き換える必要があります。 + もし、あらゆるファイルに張ることができる一般的なコードを探しているなら、 + これは不便であるかもしれません。おそらくその場合は、 + そうする代わりに変数 <code>LAST_MODIFIED</code> + を使用したいと考えるでしょう:</p> +<div class="example"><p><code> + <!--#config timefmt="%D" --><br /> + This file last modified <!--#echo var="LAST_MODIFIED" --> +</code></p></div> + + <p><code>timefmt</code> + 書式についてのより詳細については、お好みの検索サイトに行き、 + <code>strftime</code> で検索してみてください。文法は同じです。</p> + + +<h3><a name="standard-footer" id="standard-footer">標準のフッタを挿入する</a></h3> + + + <p>もし数ページを超えるページを持つサイトを管理しているならば、 + 全ページに対して変項を行なうことが本当に苦痛となり得ることが + 分かるでしょう。全てのページに渡ってある種の標準的な外観を + 維持しようとしているならば特にそうでしょう。</p> + + <p>ヘッダやフッタ用の挿入用ファイルを使用することで、 + このような更新にかかる負担を減らすことができます。 + 一つのフッタファイルを作成し、それを <code>include</code> + SSI コマンドで各ページに入れるだけで済みます。<code>include</code> + 要素は、<code>file</code> 属性または <code>virtual</code> + 属性のいずれかを使用してどのファイルを挿入するかを決めることができます。 + <code>file</code> 属性は、<em>カレントディレクトリからの相対パスで示された + </em>ファイルパスです。 + それは / で始まる絶対ファイルパスにはできず、また、そのパスの一部に ../ + を含むことができないことを意味します。<code>virtual</code> + 属性は、おそらくより便利だと思いますが、提供するドキュメントからの相対 + URL で指定すべきです。それは / で始めることができますが、 + 提供するファイルと同じサーバ上に存在しなくてはなりません。</p> +<div class="example"><p><code> + <!--#include virtual="/footer.html" --> +</code></p></div> + + <p>私は最後の二つを組み合わせて、<code>LAST_MODIFIED</code> + ディレクティブをフッタファイルの中に置くことがよくあります。 + SSI ディレクティブは、挿入用のファイルに含ませたり、 + 挿入ファイルのネストをしたりすることができます。すなわち、 + 挿入用のファイルは他のファイルを再帰的に挿入することができます。</p> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">他に何が設定できるのか ?</a></h2> + + + <p>時刻書式を <code>config</code> で設定できることに加えて、 + 更に二つ <code>config</code> で設定することができます。</p> + + <p>通常、SSI ディレクティブで何かがうまくいかないときは、 + 次のメッセージが出力されます。</p> +<div class="example"><p><code> + [an error occurred while processing this directive] +</code></p></div> + + <p>このメッセージを他のものにしたい場合、<code>config</code> + 要素の <code>errmsg</code> 属性で変更することができます:</p> +<div class="example"><p><code> + <!--#config errmsg="[It appears that you don't know how to use SSI]" --> +</code></p></div> + + <p>おそらく、エンドユーザはこのメッセージを決して見ることはありません。 + なぜなら、そのサイトが生きた状態になる前に SSI ディレクティブに関する + 全ての問題を解決しているはずだからです。(そうですよね?)</p> + + <p>そして、<code>config</code> において <code>sizefmt</code> + 属性を使用することで、 + 返されるファイルサイズの書式を設定することができます。 + バイト数には <code>bytes</code> を、適当に Kb や Mb + に短縮させるには <code>abbrev</code> を指定することができます。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="exec" id="exec">コマンドの実行</a></h2> + + + <p>今後数ヶ月のうちに、小さな CGI プログラムと SSI + を使用する記事を出したいと考えています。ここではそれとは別に、 + <code>exec</code> 要素によって行なうことができることを示します。 + SSI にシェル (正確には <code>/bin/sh</code>。Win32 ならば DOS シェル) + を使用してコマンドを実行させることができます。 + 下記の例では、ディレクトリリスト出力を行ないます。</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="ls" --><br /> + </pre> +</code></p></div> + + <p>Windows 上では、</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="dir" --><br /> + </pre> +</code></p></div> + + <p>Windows 上では、このディレクティブによっていくつかの奇妙な + 書式に気づくでしょう。なぜなら <code>dir</code> の出力が文字列 + ``<<code>dir</code>>'' を含み、ブラウザを混乱させるからです。</p> + + <p>この機能は非常に危険であり、どんなコードでも <code>exec</code> + タグに埋め込まれてしまえば実行することに注意してください。例えば + `` ゲストブック '' のように、もし、 + ユーザがページの内容を編集できる状況にあるならば、 + この機能を確実に抑制してください。<code>Options</code> + ディレクティブの <code>IncludesNOEXEC</code> 引数を指定することで、 + SSI は許可するけれど <code>exec</code> + 機能は許可しないようにすることができます。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="advanced" id="advanced">高度な SSI テクニック</a></h2> + + + <p>コンテンツを出力することに加え、Apache SSI は変数を設定し、 + そして比較と条件分岐にその変数を使用できる機能を提供しています。 + </p> + +<h3><a name="caveat" id="caveat">警告</a></h3> + + <p>この記事で述べた大部分の機能は、Apache 1.2 + 以降を使用している場合のみ利用可能です。もちろん、もし Apache 1.2 + 以降を使用してない場合、直ちにアップグレードする必要があります。 + さぁ、今それを行ないなさい。それまで待っています。</p> + + +<h3><a name="variables" id="variables">変数を設定する</a></h3> + + <p><code>set</code> ディレクティブを使用して、 + 後で使用するために変数を設定することができます。 + これは後の説明で必要になるので、ここでそれについて述べています。 + 文法は以下のとおりです:</p> +<div class="example"><p><code> + <!--#set var="name" value="Rich" --> +</code></p></div> + + <p>このように単純に文字どおりに設定することに加え、 + <a href="../env.html">環境変数</a>や上記の変数 + (例えば <code>LAST_MODIFIED</code> のような) + を含む他のあらゆる変数を値を設定するのに使用することができます。 + 変数名の前にドル記号 ($) を使用することで、 + それがリテラル文字列ではなくて変数であることを示します。</p> +<div class="example"><p><code> + <!--#set var="modified" value="$LAST_MODIFIED" --> +</code></p></div> + + <p>ドル記号 ($) を文字として変数の値に入れるには、 + バックスラッシュによってドル記号をエスケープする必要があります。</p> +<div class="example"><p><code> + <!--#set var="cost" value="\$100" --> +</code></p></div> + + <p>最後になりますが、長い文字列の中に変数を置きたい場合で、 + 変数名が他の文字とぶつかる可能性があり、 + それらの文字について混乱してしまう場合、この混乱を取り除くため、 + 変数名を中括弧で囲むことができます + (これについての良い例を示すのは難しいのですが、 + おそらく分かっていただけるでしょう)。 + </p> +<div class="example"><p><code> + <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> +</code></p></div> + + +<h3><a name="conditional" id="conditional">条件式</a></h3> + + + <p>さて、変数を持っていて、 + それらの値を設定して比較することができるのですから、 + 条件を表すためにそれらを使用することができます。これにより + SSI はある種の小さなプログラミング言語になっています。 + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> は条件を表現するために <code>if</code>, + <code>elif</code>, <code>else</code>, <code>endif</code> + 構造を提供しています。これによって、 + 一つの実際のページから複数の論理ページを効果的に生成することができます。</p> + + <p>条件構造は以下のとおりです:</p> +<div class="example"><p><code> + <!--#if expr="test_condition" --><br /> + <!--#elif expr="test_condition" --><br /> + <!--#else --><br /> + <!--#endif --> +</code></p></div> + + <p><em>test_condition</em> + はあらゆる種類の論理的比較をすることができます。 + 値を比較したり、その値が ``真'' かどうかを評価します + (空でないなら与えられた文字列は真です)。 + 利用可能な比較演算子の全てのリストについては、 + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ドキュメンテーションを参照してください。 + ここでは、この構造をどう使用するかの例をいくつか示します。</p> + + <p>設定ファイルで次の行を記述します:</p> +<div class="example"><p><code> + BrowserMatchNoCase macintosh Mac<br /> + BrowserMatchNoCase MSIE InternetExplorer +</code></p></div> + + <p>これはクライアントが Macintosh + 上でインターネットエクスプローラが動いている場合、環境変数 + ``Mac'' と ``InternetExplorer'' を真と設定します。</p> + + <p>次に、SSI が可能になったドキュメントで以下を行ないます: + </p> +<div class="example"><p><code> + <!--#if expr="${Mac} && ${InternetExplorer}" --><br /> + Apologetic text goes here<br /> + <!--#else --><br /> + Cool JavaScript code goes here<br /> + <!--#endif --> +</code></p></div> + + <p>Mac 上の IE に対して何か思うところがあるわけでありません。 + 他では実行できているいくつかの JavaScript を Mac 上の IE + で実行させるのに、先週数時間苦労したというだけのことです。 + 上の例はその暫定的な対処方法です。</p> + + <p>他のどんな変数 (あなたが定義するもの、 + または普通の環境変数のいずれか) も、条件文に使用することができます。 + Apache は <code>SetEnvIf</code> ディレクティブや他の関連 + ディレクティブを使用して環境変数を設定することができます。 + この機能により、CGI + に頼ることなくかなり複雑な動的なことをさせることができます。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="conclusion" id="conclusion">終わりに</a></h2> + + <p>SSI は確かに CGI + や動的なウェブページを生成する他の技術に代わるものではありません。 + しかし、たくさんの余分な作業をせずに、 + 少量の動的なコンテンツを加えるにはすぐれた方法です。</p> +</div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/ssi.html.ko.euc-kr b/docs/manual/howto/ssi.html.ko.euc-kr new file mode 100644 index 0000000..01ebf3c --- /dev/null +++ b/docs/manual/howto/ssi.html.ko.euc-kr @@ -0,0 +1,458 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ġ 丮: Server Side Includes Ұ - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ġ 丮: Server Side Includes Ұ</h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" title="Korean"> ko </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> + +<p>Server-side includes Ͽ HTML +߰ ִ.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Ұ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#what">SSI ΰ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">SSI ϵ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#basic">⺻ SSI þ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">߰ </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#config">̿ܿ ִ ?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#exec">ɾ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#advanced"> SSI </a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#conclusion"></a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="related" id="related">Ұ</a></h2> + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table> + + <p> SSI θ Server Side Includes Ѵ. + SSI ϵ ϴ HTML + ߰ϴ ⺻ SSI ҰѴ.</p> + + <p> κ SSI þ ǹ ޱ + Ѵ.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="what" id="what">SSI ΰ?</a></h2> + + <p>SSI (Server Side Includes) HTML ϴ þ, + Ҷ óѴ. SSI ϸ CGI + α̳ ٸ ü + ʰ HTML ߰ + ִ.</p> + + <p>SSI ƴϸ α ü + κ + ٽ ؾ ȴ. SSI + ð ߰ϴµ . + Ҷ κ ؾ Ѵٸ ٸ + ãƺ Ѵ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">SSI ϵ ϱ</a></h2> + + + <p> SSI óϷ <code>httpd.conf</code> ̳ + <code>.htaccess</code> Ͽ þ ؾ Ѵ.</p> +<div class="example"><p><code> + Options +Includes +</code></p></div> + + <p> ġ Ͽ SSI þ óѴ. + <code class="directive"><a href="../mod/core.html#options">Options</a></code> þ + ְ, þ Ἥ ȿ . + þ Ǹ óϱ SSI ϴ Ư + 丮 <code>Options</code> Ѵ.</p> + + <p> Ͽ SSI þ óϴ ƴϴ. ġ + ó ˷ Ѵ. ΰ ִ. + ϳ þ <code>.shtml</code> Ư + Ȯڸ óϴ ̴.</p> +<div class="example"><p><code> + AddType text/html .shtml<br /> + AddOutputFilter INCLUDES .shtml +</code></p></div> + + <p> ̹ ִ SSI þ ߰ϴ + SSI þ óϱ <code>.shtml</code> Ȯڸ + οϱ ϸ ũ ؾ + ϴ ̴.</p> + + <p>ٸ <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + þ ϴ ̴.</p> +<div class="example"><p><code> + XBitHack on +</code></p></div> + + <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + ִ Ͽ SSI þ óѴ. ̹ + ִ SSI þ ߰Ѵٸ ϸ + ʰ <code>chmod</code> Ͽ ָ ȴ.</p> +<div class="example"><p><code> + chmod +x pagename.html +</code></p></div> + + <p> ƾ ϳ. <code>.shtml</code> ϸ + ġ <code>.html</code> SSI ó϶ + ϴ ִ. Ƹ <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> + . ̷ ϸ ġ Ͽ SSI þ + Ŭ̾Ʈ Ѵٴ + ̴. ſ , ƴϴ.</p> + + <p> ̶ ڸ + .</p> + + <p> ̿ ϱ Ʊ ġ ⺻ + SSI ֱټϰ content length HTTP + ʴ´. ij ϰ Ŭ̾Ʈ + . ΰ ذ ִ.</p> + + <ol> + <li><code>XBitHack Full</code> Ѵ. + ġ ϴ(include) ϵ ü + û ¥ ֱټ ˾Ƴ.</li> + + <li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> ִ þ Ͽ + Ͽ ϸ Ͻð + ij ִ.</li> + </ol> +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="basic" id="basic">⺻ SSI þ</a></h2> + + <p>SSI þ .</p> +<div class="example"><p><code> + <!--#element attribute=value attribute=value ... --> +</code></p></div> + + <p>HTML ּ SSI ʾƵ + HTML ҽ Ѵ. SSI ùٷ + ϸ þ ٲ۴.</p> + + <p>element ϳ. ȸ ڼ ̴. + SSI ִ δ</p> + +<h3><a name="todaysdate" id="todaysdate"> ¥</a></h3> + +<div class="example"><p><code> + <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + <p><code>echo</code> element ״ Ѵ. + CGI α ϴ ȯ溯 ܿ ǥ + ִ. , <code>set</code> element Ͽ + ִ.</p> + + <p>¥ ʴ´ٸ, + <code>config</code> element <code>timefmt</code> attribute + Ѵ.</p> + +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + Today is <!--#echo var="DATE_LOCAL" --> +</code></p></div> + + +<h3><a name="lastmodified" id="lastmodified"> </a></h3> + +<div class="example"><p><code> + <!--#flastmod file="index.html" --> Ǿ +</code></p></div> + + <p> element <code>timefmt</code> ȴ.</p> + + +<h3><a name="cgi" id="cgi">CGI α ϱ</a></h3> + + <p>Ϲ SSI ϳ, ̵ ֿϴ ``湮 + ī'' CGI α Ѵ.</p> + +<div class="example"><p><code> + <!--#include virtual="/cgi-bin/counter.pl" --> +</code></p></div> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="additionalexamples" id="additionalexamples">߰ </a></h2> + + + <p> HTML ִ SSI .</p> + +<h3><a name="docmodified" id="docmodified"> +Ǿ?</a></h3> + + <p>տ SSI Ͽ ڿ ֱټ + ˸ ִٰ ߴ. ˷ ʾҴ. + ڵ带 HTML ϸ ð . + Ѵ SSI ùٷ ۵ؾ Ѵ.</p> +<div class="example"><p><code> + <!--#config timefmt="%A %B %d, %Y" --><br /> + <!--#flastmod file="ssi.shtml" --> Ǿ; +</code></p></div> + + <p> <code>ssi.shtml</code> ϴ ϸ + Ѵ. ƹ ٿ ִ ڵ带 + Ѵٸ, ϸ <code>LAST_MODIFIED</code> + Ѵ.</p> +<div class="example"><p><code> + <!--#config timefmt="%D" --><br /> + This file last modified <!--#echo var="LAST_MODIFIED" --> +</code></p></div> + + <p><code>timefmt</code> Ŀ ڼ ˻ + <code>strftime</code> ãƺ. .</p> + + +<h3><a name="standard-footer" id="standard-footer">ǥ ϴ ϱ</a></h3> + + + <p> ִ Ʈ Ѵٸ ü + ϴ , Ư ǥ ܰ ϴ + Ӵ.</p> + + <p> (header) ϴ(footer) Ϸ Ͽ + ̷ δ ִ. + <code>include</code> SSI ɾ Ͽ ϴ + ϳ ϸ ȴ. <code>include</code> element + <code>file</code> attribute <code>virtual</code> attribute + Ѵ. <code>file</code> attribute <em> + 丮 </em> ϰδ. , (/ ϴ) + ϰγ ȿ ../ . Ƹ ϴ + URL ִ <code>virtual</code> attribute + ̴. θ / , Ϸ + ϴ ϰ ־ Ѵ.</p> +<div class="example"><p><code> + <!--#include virtual="/footer.html" --> +</code></p></div> + + <p> ΰ ļ ϴ Ͽ + <code>LAST_MODIFIED</code> þ ִ´. Ϸ Ͽ + SSI þ , ̷ ٸ + ϴ ִ.</p> + + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="config" id="config">̿ܿ ִ ?</a></h2> + + + <p>ð <code>config</code>() ܿ ΰ + <code>config</code>() ִ.</p> + + <p> SSI þ ߸Ǹ ´</p> +<div class="example"><p><code> + [an error occurred while processing this directive] +</code></p></div> + + <p> ϰ ʹٸ <code>config</code> element + <code>errmsg</code> attribute Ͽ Ѵ.</p> +<div class="example"><p><code> + <!--#config errmsg="[It appears that you don't know how to use SSI]" --> +</code></p></div> + + <p>Ʈ ϱ SSI þ ذϿ + ڰ ̷ ʱ ٶ. (?)</p> + + <p> <code>sizefmt</code> attribute ȯϴ ũ + <code>config</code>() ִ. Ʈ ũ⸦ + ַ <code>bytes</code>, Kb Mb ũ⸦ + ַ <code>abbrev</code> Ѵ.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="exec" id="exec">ɾ ϱ</a></h2> + + + <p> CGI α SSI ϴ + ̴. <code>exec</code> element + ִ ٸ ͵ ̴. SSI (Ȯ + <code>/bin/sh</code> Win32 Ѵٸ DOS ) Ͽ + ɾ Ѵ. , 丮 ش.</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="ls" --><br /> + </pre> +</code></p></div> + + <p>or, on Windows</p> +<div class="example"><p><code> + <pre><br /> + <!--#exec cmd="dir" --><br /> + </pre> +</code></p></div> + + <p><code>dir</code> ¿ ȥ + ``<<code>dir</code>>'' ڿ Եֱ, + þ ϸ ̻ ̴.</p> + + <p> <code>exec</code> ± ɾ + ֱ ſ ϴ. ``'' ڰ + ִ ȯ̶, + ؼ ȵȴ. <code>Options</code> þ + <code>IncludesNOEXEC</code> ƱԸƮ Ͽ SSI + <code>exec</code> ִ.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="advanced" id="advanced"> SSI </a></h2> + + + <p> ϴ ܿ ġ SSI ϰ, + ǹ ִ.</p> + +<h3><a name="caveat" id="caveat"></a></h3> + + <p> ۿ ϴ κ ġ 1.2 ĺ + ִ. , ġ 1.2 ̻ ʴ´ٸ + Ƹ ̵ؾ Ѵ. ض. ض. ٸ + ̴.</p> + + +<h3><a name="variables" id="variables"> </a></h3> + + <p><code>set</code> þ Ͽ ߿ + ִ. ʿϱ Ѵ. + .</p> +<div class="example"><p><code> + <!--#set var="name" value="Rich" --> +</code></p></div> + + <p> ڱ״ ʰ <a href="../env.html">ȯ溯</a> ( + , <code>LAST_MODIFIED</code>) ٸ Ͽ + ִ. ̶ տ ǥ($) + ٿ ڿ ƴ ǥѴ.</p> + + <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" --> + </code></p></div> + + <p> ڸ ״ ԷϷ ǥ տ + 齽 Ѵ.</p> +<div class="example"><p><code> + <!--#set var="cost" value="\$100" --> +</code></p></div> + + <p> ڿ ߰ ϴµ ڿ ִ + ڵ Ͽ ȥǴ , ȣ + Ȯ Ѵ. ( ã , + ϱ ٶ.)</p> +<div class="example"><p><code> + <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> +</code></p></div> + + +<h3><a name="conditional" id="conditional"> ǥ</a></h3> + + + <p> ϰ ǹ ϴ. + SSI α־ ȴ. + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ǹ <code>if</code>, + <code>elif</code>, <code>else</code>, <code>endif</code> + Ѵ. + ִ.</p> + + <p>ǹ .</p> +<div class="example"><p><code> + <!--#if expr="test_condition" --><br /> + <!--#elif expr="test_condition" --><br /> + <!--#else --><br /> + <!--#endif --> +</code></p></div> + + <p><em>test_condition</em> + ִ. ٸ ϰų, Ư ``'' + ˻Ѵ. (ڿ ̴.) 밡 + ڸ , <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> + ϶. ǹ .</p> + + <p>Ͽ ߰Ѵ.</p> +<div class="example"><p><code> + BrowserMatchNoCase macintosh Mac<br /> + BrowserMatchNoCase MSIE InternetExplorer +</code></p></div> + + <p>Ŭ̾Ʈ Ųÿ ϴ Internet Explorer + ȯ溯 ``Mac'' ``InternetExplorer'' Ѵ.</p> + + <p> SSI ´.</p> +<div class="example"><p><code> + <!--#if expr="${Mac} && ${InternetExplorer}" --><br /> + ´<br /> + <!--#else --><br /> + JavaScript ڵ尡 ´<br /> + <!--#endif --> +</code></p></div> + + <p> Ų IE ݰ ִ ƴϴ. + ֿ ٸ JavaScript ڵ尡 Ų + IE ʾƼ ð ߴ. ӽ + ذå̴.</p> + + <p>( Ͽ Ϲ ȯ溯̰) ǹ + ִ. ƶġ <code>SetEnvIf</code> ٸ + þ ȯ溯 ֱ CGI ̵ + ִ.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="conclusion" id="conclusion"></a></h2> + + <p>SSI Ȯ CGI ϴ ٸ + ü . ߰ ۾ + ߰ϱ Ǹ ̴.</p> +</div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/ssi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/ssi.html" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file |