]> granicus.if.org Git - apache/commitdiff
httpdunit: merge CVE-2017-9788 regression tests from feature branch
authorJacob Champion <jchampion@apache.org>
Fri, 14 Jul 2017 22:33:45 +0000 (22:33 +0000)
committerJacob Champion <jchampion@apache.org>
Fri, 14 Jul 2017 22:33:45 +0000 (22:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801998 13f79535-47bb-0310-9956-ffa450edef68

173 files changed:
CHANGES
Makefile.in
build/rpm/httpd.spec.in
docs/log-message-tags/next-number
docs/manual/index.html.es
docs/manual/index.xml.es
docs/manual/index.xml.meta
docs/manual/misc/security_tips.html.en
docs/manual/misc/security_tips.html.fr
docs/manual/misc/security_tips.html.ko.euc-kr
docs/manual/misc/security_tips.html.tr.utf8
docs/manual/mod/allmodules.xml
docs/manual/mod/allmodules.xml.de
docs/manual/mod/allmodules.xml.es
docs/manual/mod/allmodules.xml.fr
docs/manual/mod/allmodules.xml.ja
docs/manual/mod/allmodules.xml.ko
docs/manual/mod/allmodules.xml.tr
docs/manual/mod/allmodules.xml.zh-cn
docs/manual/mod/core.html.de
docs/manual/mod/core.html.en
docs/manual/mod/core.html.es
docs/manual/mod/core.html.fr
docs/manual/mod/core.html.ja.utf8
docs/manual/mod/core.xml
docs/manual/mod/core.xml.de
docs/manual/mod/core.xml.es
docs/manual/mod/core.xml.fr
docs/manual/mod/core.xml.ja
docs/manual/mod/core.xml.tr
docs/manual/mod/directive-dict.html.en
docs/manual/mod/directive-dict.html.es
docs/manual/mod/directive-dict.html.fr
docs/manual/mod/directive-dict.html.ja.utf8
docs/manual/mod/directive-dict.xml
docs/manual/mod/directive-dict.xml.es
docs/manual/mod/directive-dict.xml.fr
docs/manual/mod/directive-dict.xml.ja
docs/manual/mod/directive-dict.xml.ko
docs/manual/mod/directive-dict.xml.meta
docs/manual/mod/directive-dict.xml.tr
docs/manual/mod/index.html.es
docs/manual/mod/mod_access_compat.html
docs/manual/mod/mod_access_compat.html.en
docs/manual/mod/mod_access_compat.html.es [new file with mode: 0644]
docs/manual/mod/mod_access_compat.html.fr
docs/manual/mod/mod_access_compat.html.ja.utf8
docs/manual/mod/mod_access_compat.xml.es [new file with mode: 0644]
docs/manual/mod/mod_access_compat.xml.meta
docs/manual/mod/mod_actions.html
docs/manual/mod/mod_actions.html.de
docs/manual/mod/mod_actions.html.en
docs/manual/mod/mod_actions.html.es [new file with mode: 0644]
docs/manual/mod/mod_actions.html.fr
docs/manual/mod/mod_actions.html.ja.utf8
docs/manual/mod/mod_actions.html.ko.euc-kr
docs/manual/mod/mod_actions.xml.es [new file with mode: 0644]
docs/manual/mod/mod_actions.xml.meta
docs/manual/mod/mod_alias.html
docs/manual/mod/mod_alias.html.en
docs/manual/mod/mod_alias.html.es [new file with mode: 0644]
docs/manual/mod/mod_alias.html.fr
docs/manual/mod/mod_alias.html.ja.utf8
docs/manual/mod/mod_alias.html.ko.euc-kr
docs/manual/mod/mod_alias.html.tr.utf8
docs/manual/mod/mod_alias.xml
docs/manual/mod/mod_alias.xml.es [new file with mode: 0644]
docs/manual/mod/mod_alias.xml.fr
docs/manual/mod/mod_alias.xml.ja
docs/manual/mod/mod_alias.xml.ko
docs/manual/mod/mod_alias.xml.meta
docs/manual/mod/mod_alias.xml.tr
docs/manual/mod/mod_allowhandlers.html
docs/manual/mod/mod_allowhandlers.html.en
docs/manual/mod/mod_allowhandlers.html.es [new file with mode: 0644]
docs/manual/mod/mod_allowhandlers.xml.es [new file with mode: 0644]
docs/manual/mod/mod_allowhandlers.xml.meta
docs/manual/mod/mod_allowmethods.html
docs/manual/mod/mod_allowmethods.html.en
docs/manual/mod/mod_allowmethods.html.es [new file with mode: 0644]
docs/manual/mod/mod_allowmethods.html.fr
docs/manual/mod/mod_allowmethods.xml.es [new file with mode: 0644]
docs/manual/mod/mod_allowmethods.xml.meta
docs/manual/mod/mod_asis.html
docs/manual/mod/mod_asis.html.en
docs/manual/mod/mod_asis.html.es [new file with mode: 0644]
docs/manual/mod/mod_asis.html.fr
docs/manual/mod/mod_asis.html.ja.utf8
docs/manual/mod/mod_asis.html.ko.euc-kr
docs/manual/mod/mod_asis.xml.es [new file with mode: 0644]
docs/manual/mod/mod_asis.xml.meta
docs/manual/mod/mod_authz_dbd.html.en
docs/manual/mod/mod_authz_dbd.html.fr
docs/manual/mod/mod_authz_dbd.xml
docs/manual/mod/mod_authz_dbd.xml.fr
docs/manual/mod/mod_proxy.html.en
docs/manual/mod/mod_proxy.html.fr
docs/manual/mod/mod_proxy.xml
docs/manual/mod/mod_proxy.xml.fr
docs/manual/mod/mod_proxy.xml.ja
docs/manual/mod/mod_proxy_hcheck.html.en
docs/manual/mod/mod_proxy_hcheck.xml
docs/manual/mod/mod_proxy_wstunnel.xml
docs/manual/mod/mod_rewrite.html.en
docs/manual/mod/mod_rewrite.html.fr
docs/manual/mod/mod_rewrite.xml
docs/manual/mod/mod_rewrite.xml.fr
docs/manual/mod/mod_watchdog.html.en
docs/manual/mod/mod_watchdog.xml
docs/manual/mod/quickreference.html.de
docs/manual/mod/quickreference.html.en
docs/manual/mod/quickreference.html.es
docs/manual/mod/quickreference.html.fr
docs/manual/mod/quickreference.html.ja.utf8
docs/manual/mod/quickreference.html.ko.euc-kr
docs/manual/mod/quickreference.html.tr.utf8
docs/manual/mod/quickreference.html.zh-cn.utf8
docs/manual/rewrite/flags.html.fr
docs/manual/rewrite/flags.xml
docs/manual/rewrite/flags.xml.fr
docs/manual/vhosts/name-based.html.fr
docs/manual/vhosts/name-based.xml.fr
include/ap_mmn.h
include/http_protocol.h
include/httpd.h
modules/aaa/mod_auth_digest.c
modules/core/mod_watchdog.c
modules/generators/mod_status.c
modules/http/http_core.c
modules/http/http_protocol.c
modules/http/mod_mime.c
modules/http2/config2.m4
modules/http2/h2_conn.c
modules/http2/h2_conn.h
modules/http2/h2_mplx.c
modules/http2/h2_mplx.h
modules/http2/h2_session.c
modules/http2/h2_stream.c
modules/http2/h2_stream.h
modules/http2/h2_switch.c
modules/http2/h2_util.c
modules/http2/h2_util.h
modules/http2/h2_version.h
modules/http2/h2_workers.c
modules/http2/mod_http2.c
modules/lua/README
modules/lua/config.m4
modules/lua/lua_apr.c
modules/lua/lua_config.c
modules/lua/lua_request.c
modules/lua/mod_lua.c
modules/lua/mod_lua.h
modules/mappers/mod_negotiation.c
modules/mappers/mod_rewrite.c
modules/proxy/mod_proxy.c
modules/proxy/mod_proxy.h
modules/proxy/mod_proxy_balancer.c
modules/proxy/mod_proxy_fcgi.c
modules/proxy/mod_proxy_hcheck.c
modules/proxy/mod_proxy_wstunnel.c
modules/ssl/ssl_engine_io.c
modules/ssl/ssl_util_stapling.c
server/core.c
server/mpm/winnt/child.c
server/mpm/winnt/service.c
server/protocol.c
server/request.c
server/util.c
support/ab.c
support/htdigest.c
support/htpasswd.c
test/unit/authn.c [new file with mode: 0644]
test/unit/base64.c [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 6eb0a52142d963658ae6e0034ad78262cc96acb8..ceca74b2498644f7431745ffeeec517baa2af62d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,19 +1,27 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
-  *) mod_env: when processing a 'SetEnv' directive, warn if the environment
-     variable name includes a '='. It is likely a configuration error.
-     PR 60249 [Christophe Jaillet]
+  *) mod_proxy_wstunnel: Fix detection of unresponded request which could have
+     led to spurious HTTP 502 error messages sent on upgrade connections.
+     PR 61283.  [Yann Ylavic]
 
-  *) Evaluate nested If/ElseIf/Else configuration blocks.
-     [Luca Toscano, Jacob Champion]
+  *) mod_http2: Simplify ready queue, less memory and better performance. Update
+     mod_http2 version to 1.10.7. [Stefan Eissing]
+  
+  *) htpasswd / htdigest: Do not apply the strict permissions of the temporary
+     passwd file to a possibly existing passwd file. PR 61240. [Ruediger Pluem]
+
+  *) mod_rewrite: Add 'RewriteOptions LongURLOptimization' to free memory
+     from each set of unmatched rewrite conditions.
+     [Eric Covener]
+
+  *) Allow the argument to <IfFile>, <IfDefine>, <IfSection>, <IfDirective>, 
+     and <IfModule> to be quoted.  This is primarily for the benefit of
+     <IfFile>. [Eric Covener]
 
   *) Introduce request taint checking framework to prevent privilege
      hijacking through .htaccess. [Nick Kew]
 
-  *) mod_proxy_wstunnel: Add "upgrade" parameter to allow upgrade to other
-     protocols.  [Jean-Frederic Clere]
-
   *) core: Disallow multiple Listen on the same IP:port when listener buckets
      are configured (ListenCoresBucketsRatio > 0), consistently with the single
      bucket case (default), thus avoiding the leak of the corresponding socket
@@ -24,42 +32,15 @@ Changes with Apache 2.5.0
   *) mod_syslog: Support use of optional "tag" in syslog entries.
      PR 60525. [Ben Rubson <ben.rubson gmail.com>, Jim Jagielski]
 
-  *) MPMs unix: Place signals handlers and helpers out of DSOs to avoid
-     a possible crash if a signal is caught during (graceful) restart.
-     PR 60487.  [Yann Ylavic]
-  
-  *) mod_proxy: Allow the per-request environment variable "no-proxy" to
-     be used as an alternative to ProxyPass /path !. This is primarily
-     to set exceptions for ProxyPass specified in <Location> context.
-     Use SetEnvIf, not SetEnv. [Eric Covener]
-
   *) When using mod_status with the Event MPM, report the number of requests
      associated with an active connection in the "ACC" field. Previously
      zero was always reported with this MPM.  PR60647. [Eric Covener]
 
-  *) mod_proxy_hcheck: Don't validate timed out responses.  [Yann Ylavic]
-
-  *) mod_proxy_fcgi: Return to 2.4.20-and-earlier behavior of leaving
-     a "proxy:fcgi://" prefix in the SCRIPT_FILENAME environment variable by
-     default.  Add ProxyFCGIBackendType to allow the type of backend to be
-     specified so these kinds of fixups can be restored without impacting
-     FPM. PR60576 [Eric Covener, Jim Jagielski]
-
-  *) core: EBCDIC fixes for interim responses with additional headers.
-     [Eric Covener]
-
   *) mod_remoteip: Add support for PROXY protocol (code donated by Cloudzilla).
      Add ability for PROXY protocol processing to be optional to donated code.
      See also: http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt
      [Cloudzilla/roadrunner2@GitHub, Jim Jagielski, Daniel Ruggeri]
 
-  *) mod_rewrite: When a substitution is a fully qualified URL, and the 
-     scheme/host/port matches the current virtual host, stop interpreting the 
-     path component as a local path just because the first component of the 
-     path exists in the filesystem.  Adds RewriteOption "LegacyPrefixDocRoot" 
-     to revert to previous behavior. PR60009.
-     [Hank Ibell <hwibell gmail.com>]
   *) mod_remoteip: When overriding the useragent address from X-Forwarded-For,
      zero out what had been initialized as the connection-level port.  PR59931.
      [Hank Ibell <hwibell gmail.com>]
@@ -70,9 +51,6 @@ Changes with Apache 2.5.0
   *) mod_proxy_protocol: Add server-side, front-end support for PROXY PROTOCOL
      (http://blog.haproxy.com/haproxy/proxy-protocol/).  [roadrunner2]
      
-  *) mod_proxy_fcgi: Return HTTP 504 rather than 503 in case of proxy timeout.
-     [Luca Toscano]
-
   *) http: Allow unknown response status' lines returned in the form of
      "HTTP/x.x xxx Status xxx".  [Yann Ylavic]
 
index 28cf6b79f6ac15876767cbf559b074f3553f8e63..85f174a3ddd2dbab2aa26c20a84840a06d0ef30b 100644 (file)
@@ -50,7 +50,7 @@ install-conf:
                if [ -f $$i ] ; then \
                ( \
                        n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
-                       if test $$n_lm -eq 0 -o "x$(MPM_MODULE)$(DSO_MODULES)" = "x"; then \
+                       if test $$n_lm -eq 0 -o "x$(MPM_MODULES)$(DSO_MODULES)" = "x"; then \
                                sed -e 's#@@ServerRoot@@#$(prefix)#g' \
                                        -e 's#@@Port@@#$(PORT)#g' \
                                        -e 's#@@SSLPort@@#$(SSLPORT)#g' \
@@ -328,7 +328,7 @@ check-conf:
                if [ -f $$i ] ; then \
                ( \
                    n_lm=`awk 'BEGIN {n=0} /@@LoadModule@@/ {n+=1} END {print n}' < $$i`; \
-                   if test $$n_lm -eq 0 -o "x$(MPM_MODULE)$(DSO_MODULES)" = "x"; then \
+                   if test $$n_lm -eq 0 -o "x$(MPM_MODULES)$(DSO_MODULES)" = "x"; then \
                        sed -e 's#@@ServerRoot@@#$(top_builddir)/check#g' \
                            -e 's#@@Port@@#$(PORT)#g' \
                            -e 's#@@SSLPort@@#$(SSLPORT)#g' \
index 4d58f6169db28fc04ec1af6ee27310a83809b1d8..125565079b5f686fabb8189f48f9cd981fbdaaa9 100644 (file)
@@ -392,6 +392,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/httpd/modules/mod_proxy_http.so
 %{_libdir}/httpd/modules/mod_proxy_scgi.so
 %{_libdir}/httpd/modules/mod_proxy_wstunnel.so
+%{_libdir}/httpd/modules/mod_proxy_hcheck.so
 %{_libdir}/httpd/modules/mod_proxy.so
 %{_libdir}/httpd/modules/mod_ratelimit.so
 %{_libdir}/httpd/modules/mod_reflector.so
index 8e4ede90cc64266d63a374e1014eebd2ed0a57dc..6a6c1a497ec582596f4ac404af35858b81b17486 100644 (file)
@@ -1 +1 @@
-10033
+10036
index 4a81654d40ed6d5818695f1441b97c7b0441b673..0a006adbc9653355f5304b1a6695f680a0c30e40 100644 (file)
@@ -38,10 +38,6 @@ Documentaci
 <a href="./tr/" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a> |
 <a href="./zh-cn/" hreflang="zh-cn" rel="alternate" title="Simplified Chinese">&nbsp;zh-cn&nbsp;</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>
 <form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Buscar en Google" type="submit" /><input value="10" name="num" type="hidden" /><input value="es" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Versión 2.5" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
 <table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notas de la versión</a></h2>
 <ul><li><a href="new_features_2_4.html">Nuevas funcionalidades en Apache 2.3/2.4</a></li>
@@ -60,6 +56,7 @@ Documentaci
 <li><a href="filter.html">Filtros</a></li>
 <li><a href="handler.html">Handlers</a></li>
 <li><a href="expr.html">Analizador de Expresiones</a></li>
+<li><a href="mod/overrides.html">Sobreescritura de la clase índice .htaccess</a></li>
 <li><a href="programs/">Programas de Soporte y Servidor</a></li>
 <li><a href="glossary.html">Glosario</a></li>
 </ul>
index 8071eb420bae2c1792cee685cb0645161447cca9..e73c9bad59a8e6cf5db10d624dfa98457819bb8a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
 <?xml-stylesheet type="text/xsl" href="./style/manual.es.xsl"?>
-<!-- English Revision: 1780356:1793932 (outdated) -->
+<!-- English Revision: 1793932 -->
 <!-- Translated by: Luis Gil de Bernabé Pfeiffer  -->
 <!-- Reviewed by: Sergio Ramos -->
 
@@ -46,6 +46,7 @@ Documentación</title>
     <page href="filter.html">Filtros</page>
     <page href="handler.html">Handlers</page>
     <page href="expr.html">Analizador de Expresiones</page>
+    <page href="mod/overrides.html">Sobreescritura de la clase índice .htaccess</page>
     <page href="programs/">Programas de Soporte y Servidor</page>
     <page href="glossary.html">Glosario</page>
 </category>
index 4e2ec6f7e3af181a8c261bc4e2ece20e9cda38c4..d08bf0721618f09c72c83d914089547c492a4839 100644 (file)
@@ -10,7 +10,7 @@
     <variant outdated="yes">da</variant>
     <variant outdated="yes">de</variant>
     <variant>en</variant>
-    <variant outdated="yes">es</variant>
+    <variant>es</variant>
     <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
index 8ba6adb761a2614321022e8610e15caf63422464..0aee9ba475a80e44fa338a1ca85a6c568419f658 100644 (file)
@@ -24,6 +24,7 @@
 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Security Tips</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/misc/security_tips.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
   </div></div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/misc/security_tips.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
index 249b75b76473eedacd7ce5bd57f98331dd266006..faefcd1936331b8f7d753bcb59bbdf11ff9f47ff 100644 (file)
@@ -24,6 +24,7 @@
 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Documentations diverses</a></div><div id="page-content"><div id="preamble"><h1>Conseils sur la sécurité</h1>
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
   </div></div>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
index 5f073e148821e39ae374a76fe575a5111f1248db..f0048c33345811e1ad4933af63504deaa13c9b4c 100644 (file)
@@ -24,6 +24,7 @@
 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>º¸¾È ÆÁ</h1>
 <div class="toplang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="T&#252;rk&#231;e">&nbsp;tr&nbsp;</a></p>
   </div></div>
 <div class="bottomlang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="T&#252;rk&#231;e">&nbsp;tr&nbsp;</a></p>
index b6e8bb0c78b44ed18cd5474156e626449d1ee6c2..05a39a235963bffb4d8ab4db091c3a5aa52717b6 100644 (file)
@@ -24,6 +24,7 @@
 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Sunucusu</a> &gt; <a href="http://httpd.apache.org/docs/">Belgeleme</a> &gt; <a href="../">Sürüm 2.5</a> &gt; <a href="./">Çeşitli Belgeler</a></div><div id="page-content"><div id="preamble"><h1>Güvenlik İpuçları</h1>
 <div class="toplang">
 <p><span>Mevcut Diller: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
   </div></div>
 <div class="bottomlang">
 <p><span>Mevcut Diller: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/misc/security_tips.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/misc/security_tips.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
index dc36c860d7cb0c010cd33f05a66c945187fadf37..ed1068e2d7ecb5e779b59df6d00d87a371bfb736 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml</modulefile>
   <modulefile>mpm_winnt.xml</modulefile>
   <modulefile>worker.xml</modulefile>
index fdf94c40a9ceb81b00baaf39d4ada7181f67f698..38a0739c41d7a56f733fd025b1701e45a5cb5121 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml.de</modulefile>
   <modulefile>mpm_winnt.xml.de</modulefile>
   <modulefile>worker.xml.de</modulefile>
index b09da49371fbee870fa16a71e78c70ab52f87e03..f2fe12127284640bf9c3c845f54825315fe6bf61 100644 (file)
@@ -3,12 +3,12 @@
 
 <modulefilelist>
   <modulefile>core.xml.es</modulefile>
-  <modulefile>mod_access_compat.xml</modulefile>
-  <modulefile>mod_actions.xml</modulefile>
-  <modulefile>mod_alias.xml</modulefile>
-  <modulefile>mod_allowhandlers.xml</modulefile>
-  <modulefile>mod_allowmethods.xml</modulefile>
-  <modulefile>mod_asis.xml</modulefile>
+  <modulefile>mod_access_compat.xml.es</modulefile>
+  <modulefile>mod_actions.xml.es</modulefile>
+  <modulefile>mod_alias.xml.es</modulefile>
+  <modulefile>mod_allowhandlers.xml.es</modulefile>
+  <modulefile>mod_allowmethods.xml.es</modulefile>
+  <modulefile>mod_asis.xml.es</modulefile>
   <modulefile>mod_auth_basic.xml</modulefile>
   <modulefile>mod_auth_digest.xml</modulefile>
   <modulefile>mod_auth_form.xml</modulefile>
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml</modulefile>
   <modulefile>mpm_winnt.xml</modulefile>
   <modulefile>worker.xml</modulefile>
index 301b80dd3fcf1e11aab485339cab4bffeccbe716..4e900ce7ed089b835507932524d6ee163d35e8a5 100644 (file)
   <modulefile>event.xml.fr</modulefile>
   <modulefile>mpm_netware.xml.fr</modulefile>
   <modulefile>mpmt_os2.xml.fr</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml.fr</modulefile>
   <modulefile>mpm_winnt.xml.fr</modulefile>
   <modulefile>worker.xml.fr</modulefile>
index 8e6ad81cf1537bf965b1143ac9f9130ec032136c..b6abff88096829ffd1cbc38b31e1142458d9822b 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml.ja</modulefile>
   <modulefile>mpm_winnt.xml.ja</modulefile>
   <modulefile>worker.xml.ja</modulefile>
index ecddc3deded5346d1ed906eba3fe9ec397fcf834..5b243a67d79af992f7db73ad8b0f502e356c5aa6 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml</modulefile>
   <modulefile>mpm_winnt.xml</modulefile>
   <modulefile>worker.xml</modulefile>
index 751e25e0dc7a1c0a7e13509c3fd3d419f71beb44..7272e8d5e84fd083b42396753fdff14f04f03212 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml.tr</modulefile>
   <modulefile>mpm_winnt.xml</modulefile>
   <modulefile>worker.xml.tr</modulefile>
index dc36c860d7cb0c010cd33f05a66c945187fadf37..ed1068e2d7ecb5e779b59df6d00d87a371bfb736 100644 (file)
   <modulefile>event.xml</modulefile>
   <modulefile>mpm_netware.xml</modulefile>
   <modulefile>mpmt_os2.xml</modulefile>
-  <modulefile>overrides.xml</modulefile>
   <modulefile>prefork.xml</modulefile>
   <modulefile>mpm_winnt.xml</modulefile>
   <modulefile>worker.xml</modulefile>
index 54ac568d87305583f2635d1fce298d70aabb968b..63a3e8ba052f650cb3c6b08d3a8431aa82d151b0 100644 (file)
@@ -928,6 +928,7 @@ satisfied by a request at runtime</td></tr>
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>Die Dokumentation zu dieser Direktive wurde
             noch nicht übersetzt. Bitte schauen Sie in die englische
             Version.</p><h3>Siehe auch</h3>
@@ -955,6 +956,7 @@ satisfied</td></tr>
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>Die Dokumentation zu dieser Direktive wurde
             noch nicht übersetzt. Bitte schauen Sie in die englische
             Version.</p><h3>Siehe auch</h3>
@@ -1580,6 +1582,7 @@ satisfied by a request at runtime</td></tr>
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Modul:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Kompatibilität:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>Die Dokumentation zu dieser Direktive wurde
             noch nicht übersetzt. Bitte schauen Sie in die englische
             Version.</p><h3>Siehe auch</h3>
index 5cb36c1c8f7b41608b4076429f6529effe28d3b9..abd62796b1c95a83616b02f2c9ad8c19efc20005 100644 (file)
@@ -890,9 +890,11 @@ DocumentRoot "/var/www/${servername}/htdocs"</pre>
     <p>Variable names may not contain colon ":" characters, to avoid clashes
     with <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>'s syntax.</p>
 
-    <p>While this directive is supported in virtual host context,
-       the changes it makes are visible to any later configuration
-       directives, beyond any enclosing virtual host.</p>
+    <div class="note"><h3>Virtual Host scope and pitfalls</h3>
+      <p>While this directive is supported in virtual host context,
+         the changes it makes are visible to any later configuration
+         directives, beyond any enclosing virtual host.</p>
+    </div>
 
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -2617,7 +2619,7 @@ the server configuration files</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Amount of time the server will wait for subsequent
 requests on a persistent connection</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAliveTimeout <var>num</var>[ms]</code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>KeepAliveTimeout <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>KeepAliveTimeout 5</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
@@ -4783,7 +4785,7 @@ server</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Amount of time the server will wait for
 certain events before failing a request</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TimeOut <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>TimeOut <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>TimeOut 60</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Core</td></tr>
index 410225a495381d7549eba1052c1bc3d9e1e87adf..09c7d5a18d0cc605a5217d6a6423011b85c04cf7 100644 (file)
@@ -941,6 +941,7 @@ satisfied by a request at runtime</td></tr>
 <tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilidad:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>The documentation for this directive has
             not been translated yet. Please have a look at the English
             version.</p><h3>Consulte también</h3>
@@ -968,6 +969,7 @@ satisfied</td></tr>
 <tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilidad:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>The documentation for this directive has
             not been translated yet. Please have a look at the English
             version.</p><h3>Consulte también</h3>
index 6fe9d5475b35bc40b9e9c5b072e18ad5f0a901a5..d3a0a6e216b8c83b61cc53978f6a4334d42fcab4 100644 (file)
@@ -935,9 +935,11 @@ DESACTIV
     <p>Le caractère ":" est interdit dans les noms de variables afin
     d'éviter les conflits avec la syntaxe de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>.</p>
 
+    <div class="note"><h3>Portée de la directive et pièges à éviter</h3>
     <p>Si cette directive est définie au sein d'un bloc VirtualHost, les
     changements qu'elle induit sont visibles de toute directive
     ultérieure, au delà de tout bloc VirtualHost.</p>
+    </div>
 
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -1191,6 +1193,8 @@ requ
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</td></tr>
 </table>
     <p>La section <code class="directive">&lt;Else&gt;</code> applique
     les directives qu'elle contient si et seulement si les conditions
@@ -1235,6 +1239,8 @@ alors que la condition correspondant 
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</td></tr>
 </table>
     <p>La section <code class="directive">&lt;ElseIf&gt;</code> applique
     les directives qu'elle contient si et seulement si d'une part la
@@ -2338,6 +2344,8 @@ requ
 <tr><th><a href="directive-dict.html#Override">AllowOverride:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</td></tr>
 </table>
     <p>La directive <code class="directive">&lt;If&gt;</code> évalue une
     expression à la volée, et applique les directives qu'elle contient
@@ -2367,15 +2375,6 @@ requ
     <p>Cette section de configuration ne peut contenir que des
     directives qui supportent le <a href="directive-dict.html#Context">contexte de répertoire</a>.</p>
 
-    <div class="note"><h3>Ce n'est pas un langage de scripting</h3>
-    Le nom de cette directive peut sembler très familier aux programmeurs et
-    administrateurs, mais il ne doit pas être confondu avec son homonyme des langages de
-    scripting. A ce titre, l'implémentation actuelle n'envisage pas la
-    possibilité d'imbriquer une section <code class="directive">&lt;If&gt;</code>
-    dans une autre (la section <code class="directive">&lt;If&gt;</code> qui se
-    trouve à l'intérieure de l'autre serait ignorée).
-    </div>
-
     <div class="warning">
     Certaines variables comme <code>CONTENT_TYPE</code> ainsi que
     d'autres en-têtes de réponse ne seront pas disponibles dans ce bloc,
@@ -2794,7 +2793,7 @@ Apache</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée pendant laquelle le serveur va attendre une requête
 avant de fermer une connexion persistante</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>KeepAliveTimeout <var>nombre</var>[ms]</code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>KeepAliveTimeout <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>KeepAliveTimeout 5</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
@@ -5128,7 +5127,7 @@ du serveur</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Temps pendant lequel le serveur va attendre certains
 évènements avant de considérer qu'une requête a échoué</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>TimeOut <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>TimeOut <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>TimeOut 60</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Core</td></tr>
index af13153f44e580ae321361637f1fbd9a878310ad..04e344754a4c833cc349812eab61d689d19dab13 100644 (file)
@@ -898,6 +898,7 @@ satisfied by a request at runtime</td></tr>
 <tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p><h3>参照</h3>
@@ -925,6 +926,7 @@ satisfied</td></tr>
 <tr><th><a href="directive-dict.html#Override">上書き:</a></th><td>All</td></tr>
 <tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Core</td></tr>
 <tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>core</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Nested conditions are evaluated in 2.4.26 and later</td></tr>
 </table><p>このディレクティブの解説文書は
             まだ翻訳されていません。英語版をご覧ください。
             </p><h3>参照</h3>
index e8609f28af6e36509100075d381a3acde70cd30e..cb64b285a664a73ce03b69c85eb153fe21715b1a 100644 (file)
@@ -818,9 +818,11 @@ DocumentRoot "/var/www/${servername}/htdocs"
     <p>Variable names may not contain colon ":" characters, to avoid clashes
     with <directive module="mod_rewrite">RewriteMap</directive>'s syntax.</p>
 
-    <p>While this directive is supported in virtual host context,
-       the changes it makes are visible to any later configuration
-       directives, beyond any enclosing virtual host.</p>
+    <note><title>Virtual Host scope and pitfalls</title>
+      <p>While this directive is supported in virtual host context,
+         the changes it makes are visible to any later configuration
+         directives, beyond any enclosing virtual host.</p>
+    </note>
 </usage>
 </directivesynopsis>
 
@@ -2635,7 +2637,7 @@ the server configuration files</description>
 <name>KeepAliveTimeout</name>
 <description>Amount of time the server will wait for subsequent
 requests on a persistent connection</description>
-<syntax>KeepAliveTimeout <var>num</var>[ms]</syntax>
+<syntax>KeepAliveTimeout <var>time-interval</var>[s]</syntax>
 <default>KeepAliveTimeout 5</default>
 <contextlist><context>server config</context><context>virtual host</context>
 </contextlist>
@@ -4770,7 +4772,7 @@ server</description>
 <name>TimeOut</name>
 <description>Amount of time the server will wait for
 certain events before failing a request</description>
-<syntax>TimeOut <var>seconds</var></syntax>
+<syntax>TimeOut <var>time-interval</var>[s]</syntax>
 <default>TimeOut 60</default>
 <contextlist><context>server config</context><context>virtual host</context></contextlist>
 
index 4a53aca30e10b85df2337bd73dc042700873dead..4e7c3e9bc5b26592f85a9627df0c9f2fdb0e635a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 344972:1793934 (outdated) -->
+<!-- English Revision: 344972:1799680 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 011daace5ba7d849f7b00380c62d00a7d8bea72a..da7cdd16859039f627b75af21be71af5b6cb8631 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1741251:1793934 (outdated) -->
+<!-- English Revision: 1741251:1799680 (outdated) -->
 <!-- Translated by Luis Gil de Bernabé Pfeiffer lgilbernabe[AT]apache.org -->
 <!-- Reviewed by Sergio Ramos-->
 <!--
index e0366f66cd408a42f5822cb2f108f0aa1014f207..3e63279bbebcbdf1097bf7f861477e23f72f5a29 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1793934 -->
+<!-- English Revision: 1799680 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
@@ -887,9 +887,11 @@ DESACTIVÉS à partir de la version 2.3.0.</compatibility>
     d'éviter les conflits avec la syntaxe de la directive <directive
     module="mod_rewrite">RewriteMap</directive>.</p>
 
+    <note><title>Portée de la directive et pièges à éviter</title>
     <p>Si cette directive est définie au sein d'un bloc VirtualHost, les
     changements qu'elle induit sont visibles de toute directive
     ultérieure, au delà de tout bloc VirtualHost.</p>
+    </note>
 </usage>
 </directivesynopsis>
 
@@ -1158,6 +1160,8 @@ requête à l'exécution</description>
 <context>directory</context><context>.htaccess</context>
 </contextlist>
 <override>All</override>
+<compatibility>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</compatibility>
 
 <usage>
     <p>La section <directive type="section">Else</directive> applique
@@ -1205,6 +1209,8 @@ type="section">ElseIf</directive> précédente ne l'était pas.</description>
 <context>directory</context><context>.htaccess</context>
 </contextlist>
 <override>All</override>
+<compatibility>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</compatibility>
 
 <usage>
     <p>La section <directive type="section">ElseIf</directive> applique
@@ -2391,6 +2397,8 @@ host</context>
 <context>directory</context><context>.htaccess</context>
 </contextlist>
 <override>All</override>
+<compatibility>Les conditions imbriquées sont supportées à partir de la version
+2.4.26 du serveur HTTP Apache</compatibility>
 
 <usage>
     <p>La directive <directive type="section">If</directive> évalue une
@@ -2421,15 +2429,6 @@ host</context>
     directives qui supportent le <a
     href="directive-dict.html#Context">contexte de répertoire</a>.</p>
 
-    <note><title>Ce n'est pas un langage de scripting</title>
-    Le nom de cette directive peut sembler très familier aux programmeurs et
-    administrateurs, mais il ne doit pas être confondu avec son homonyme des langages de
-    scripting. A ce titre, l'implémentation actuelle n'envisage pas la
-    possibilité d'imbriquer une section <directive type="section">If</directive>
-    dans une autre (la section <directive type="section">If</directive> qui se
-    trouve à l'intérieure de l'autre serait ignorée).
-    </note>
-
     <note type="warning">
     Certaines variables comme <code>CONTENT_TYPE</code> ainsi que
     d'autres en-têtes de réponse ne seront pas disponibles dans ce bloc,
@@ -2862,7 +2861,7 @@ host</context>
 <name>KeepAliveTimeout</name>
 <description>Durée pendant laquelle le serveur va attendre une requête
 avant de fermer une connexion persistante</description>
-<syntax>KeepAliveTimeout <var>nombre</var>[ms]</syntax>
+<syntax>KeepAliveTimeout <var>time-interval</var>[s]</syntax>
 <default>KeepAliveTimeout 5</default>
 <contextlist><context>server config</context><context>virtual
 host</context>
@@ -5162,7 +5161,7 @@ host</context>
 <name>TimeOut</name>
 <description>Temps pendant lequel le serveur va attendre certains
 évènements avant de considérer qu'une requête a échoué</description>
-<syntax>TimeOut <var>secondes</var></syntax>
+<syntax>TimeOut <var>time-interval</var>[s]</syntax>
 <default>TimeOut 60</default>
 <contextlist><context>server config</context><context>virtual
 host</context></contextlist>
index d5da4f73bee55fa15961023179366077149b5d03..a17f4c564b03d402ee6e9e4bdb3b1262056c4270 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 669847:1793934 (outdated) -->
+<!-- English Revision: 669847:1799680 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 69ceb9af2f67932fc1c60a9f91b627988074bf05..8868184160edfde8c7a6faaa12e7d75cbab90d1e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 1302855:1793934 (outdated) -->
+<!-- English Revision: 1302855:1799680 (outdated) -->
 <!-- =====================================================
  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
    Reviewed by: Orhan Berent <berent belgeler.org>
index 8e18c755276e458faf69f7fbfb2b6da5f5a34bf6..c2feba12166bb2a84f5182c4015acd113c8e3059 100644 (file)
       Note this is not necessarily the same as an operating system
       environment variable. See the <a href="../env.html">environment variable documentation</a> for
       more details.</dd>
-    </dl>
+
+      <dt><em>time-interval</em></dt>
+
+      <dd>A time-interval format especially suited to specifying
+      timeout parameters. Supports the following format specifiers:
+        <ul>
+          <li><em>s</em>: Seconds</li>
+          <li><em>h</em>: Hours</li>
+          <li><em>ms</em>: Milli-seconds</li>
+          <li><em>mi[n]</em>: Minutes</li>
+        </ul>
+        For example: <code>Timeout 575ms</code>
+      </dd>
+   </dl>
 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section">
 <h2><a name="Default" id="Default">Default</a></h2>
index 419a08d1f6791a9337ce9d87d442cf398678c8d3..e02cf2ca3deb36793d0d6b6a61313e2874a95bd3 100644 (file)
 <a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/directive-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</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>Este documento describe los términos que se usan para describir
     cada <a href="directives.html">directiva de configuración</a> de
index 64cc4c24574e706a27cb8a8b15a30d4f033c8034..d4a86d3e1c984a39abdf1932061f230d555dfcbc 100644 (file)
       d'Apache. Notez qu'elle peut être différente d'une variable
       d'environnement du système d'exploitation. Voir la <a href="../env.html">documentation sur les variables d'environnement</a>
       pour plus de détails.</dd>
+
+      <dt><em>time-interval</em></dt>
+
+      <dd>Un format d'intervalle de temps spécifique à divers paramètres de
+      timeout. Les formats supportés sont les suivants :
+        <ul>
+          <li><em>s</em>: Secondes</li>
+          <li><em>h</em>: Heures</li>
+          <li><em>ms</em>: Millisecondes</li>
+          <li><em>mi[n]</em>: Minutes</li>
+        </ul>
+        Par exemple : <code>Timeout 575ms</code>
+      </dd>      
     </dl>
 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section">
index 7d72646d41868464561a923daabe80e0e67e2212..f318e68d1dd37fb5363965762dc25ab8b53438b3 100644 (file)
 <a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
 <a href="../tr/mod/directive-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
 </div>
+<div class="outofdate">この日本語訳はすでに古くなっている
+            可能性があります。
+            最近更新された内容を見るには英語版をご覧下さい。
+        </div>
 
     <p>この文書は各 Apache <a href="directives.html">設定ディレクティブ</a>
     を説明するために使われている用語を説明します。</p>
index f1862fb831d06479dc1712b8d1454a870a20a18e..9823913d52b971fa8789f92f779587e0a3cb87b7 100644 (file)
       environment variable. See the <a
       href="../env.html">environment variable documentation</a> for
       more details.</dd>
-    </dl>
+
+      <dt><em>time-interval</em></dt>
+
+      <dd>A time-interval format especially suited to specifying
+      timeout parameters. Supports the following format specifiers:
+        <ul>
+          <li><em>s</em>: Seconds</li>
+          <li><em>h</em>: Hours</li>
+          <li><em>ms</em>: Milli-seconds</li>
+          <li><em>mi[n]</em>: Minutes</li>
+        </ul>
+        For example: <code>Timeout 575ms</code>
+      </dd>
+   </dl>
 </section>
 
 <section id="Default"><title>Default</title>
index 0f76090a6264211f03b2d8154f7e84c472e71d1c..e0179a76d823c074646260eccce8f1be1ed90989 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
-<!-- English Revision: 1544626 -->
+<!-- English Revision: 1544626:1799456 (outdated) -->
 <!-- Spanish Revision: Daniel Ferradal -->
 <!-- Spanish translation : Daniel Ferradal -->
 <!-- Reviewer Luis Gil de Bernabé Pfeiffer -->
index 97b63b1a8e329c93e3a532d91f69c0efa6f47f4d..02945a5bd3b4a677aca15254383f80d1fdc88263 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1544626 -->
+<!-- English Revision: 1799456 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
 
 <manualpage metafile="directive-dict.xml.meta">
 
-  <title>Termes utilis&eacute;s pour la description des directives</title>
+  <title>Termes utilisés pour la description des directives</title>
 
 <summary>
-    <p>Ce document d&eacute;crit les termes utilis&eacute;s pour d&eacute;crire chaque <a
+    <p>Ce document décrit les termes utilisés pour décrire chaque <a
     href="directives.html">directive de configuration</a> d'Apache.</p>
 </summary>
 <seealso><a href="../configuring.html">Fichiers de configuration</a></seealso>
 
 <section id="Description"><title>Description</title>
 
-<p>Une br&egrave;ve description des fonctions de cette directive.</p>
+<p>Une brève description des fonctions de cette directive.</p>
 </section>
 
 <section id="Syntax"><title>Syntaxe</title>
 
     <p>Ce terme introduit le format sous lequel la directive doit
-    appara&icirc;tre dans le fichier de configuration. Cette syntaxe est tr&egrave;s
-    sp&eacute;cifique &agrave; la directive et est d&eacute;crite en d&eacute;tail dans la
-    d&eacute;finition de cette derni&egrave;re. En g&eacute;n&eacute;ral, le nom de la directive est
-    suivi d'un ou plusieurs arguments s&eacute;par&eacute;s par des espaces. Si un
-    argument contient un espace, il doit &ecirc;tre entour&eacute; de guillemets. Les
-    arguments optionnels sont entour&eacute;s de crochets. Lorsqu'un argument
+    apparaître dans le fichier de configuration. Cette syntaxe est très
+    spécifique à la directive et est décrite en détail dans la
+    définition de cette dernière. En général, le nom de la directive est
+    suivi d'un ou plusieurs arguments séparés par des espaces. Si un
+    argument contient un espace, il doit être entouré de guillemets. Les
+    arguments optionnels sont entourés de crochets. Lorsqu'un argument
     accepte une valeur parmi une liste de valeurs possibles, cette liste
-    est sp&eacute;cifi&eacute;e en s&eacute;parant les valeurs par une barre verticale "|".
-    Les textes litt&eacute;raux sont pr&eacute;sent&eacute;s dans la fonte par d&eacute;faut, alors
+    est spécifiée en séparant les valeurs par une barre verticale "|".
+    Les textes littéraux sont présentés dans la fonte par défaut, alors
     que les types d'argument pour lesquels une substitution est
-    n&eacute;cessaire sont en <em>gras</em>. La syntaxe des directives
+    nécessaire sont en <em>gras</em>. La syntaxe des directives
     acceptant un nombre variable d'arguments se termine par "...", ce
-    qui indique que le dernier argument peut &ecirc;tre r&eacute;p&eacute;t&eacute;.</p>
+    qui indique que le dernier argument peut être répété.</p>
 
     <p>Les directives utilisent un grand nombre de types d'arguments
-    diff&eacute;rents. Les plus courants sont d&eacute;finis ci-dessous.</p>
+    différents. Les plus courants sont définis ci-dessous.</p>
 
     <dl>
       <dt><em>URL</em></dt>
 
       <dd>Un Localisateur de Ressource Uniforme (Uniform Resource
-      Locator) complet comportant un protocole, un nom d'h&ocirc;te et un nom
+      Locator) complet comportant un protocole, un nom d'hôte et un nom
       de chemin optionnel comme dans
       <code>http://www.example.com/chemin/vers/fichier.html</code></dd>
 
       <dt><em>chemin-URL</em></dt>
 
       <dd>La partie de l'<em>url</em> qui suit le protocole et le nom
-      d'h&ocirc;te comme dans <code>/chemin/vers/fichier.html</code>. Le
-      <em>chemin-URL</em> repr&eacute;sente la ressource vue depuis le web, et est
-      diff&eacute;rente de la repr&eacute;sentation de cette m&ecirc;me ressource vue depuis le
-      syst&egrave;me de fichiers.</dd>
+      d'hôte comme dans <code>/chemin/vers/fichier.html</code>. Le
+      <em>chemin-URL</em> représente la ressource vue depuis le web, et est
+      différente de la représentation de cette même ressource vue depuis le
+      système de fichiers.</dd>
 
       <dt><em>chemin-fichier</em></dt>
 
-      <dd>Le chemin d'un fichier dans le syst&egrave;me de fichiers local
-      commen&ccedil;ant par le r&eacute;pertoire racine comme dans
+      <dd>Le chemin d'un fichier dans le système de fichiers local
+      commençant par le répertoire racine comme dans
       <code>/usr/local/apache/htdocs/chemin/vers/fichier.html</code>.
       Sauf mention contraire, un <em>chemin-fichier</em> qui ne commence
-      pas par un slash sera consid&eacute;r&eacute; comme relatif au r&eacute;pertoire d&eacute;fini
+      pas par un slash sera considéré comme relatif au répertoire défini
       par la directive <a
       href="core.html#serverroot">ServerRoot</a>.</dd>
 
-      <dt><em>chemin-r&eacute;pertoire</em></dt>
+      <dt><em>chemin-répertoire</em></dt>
 
-      <dd>Le chemin d'un r&eacute;pertoire dans le syst&egrave;me de fichiers local
-      commen&ccedil;ant par le r&eacute;pertoire racine comme dans
+      <dd>Le chemin d'un répertoire dans le système de fichiers local
+      commençant par le répertoire racine comme dans
       <code>/usr/local/apache/htdocs/chemin/vers/</code>.</dd>
 
       <dt><em>nom-fichier</em></dt>
       <dt><em>regex</em></dt>
 
       <dd>Une <glossary ref="regex">expression rationnelle</glossary>
-      compatible Perl. La d&eacute;finition de la directive sp&eacute;cifiera &agrave; quoi
-      <em>regex</em> sera compar&eacute;e.</dd>
+      compatible Perl. La définition de la directive spécifiera à quoi
+      <em>regex</em> sera comparée.</dd>
 
       <dt><em>extension</em></dt>
 
-      <dd>En g&eacute;n&eacute;ral, c'est la partie du <em>nom de fichier</em> qui
-      suit le dernier point. Cependant, Apache reconna&icirc;t plusieurs
+      <dd>En général, c'est la partie du <em>nom de fichier</em> qui
+      suit le dernier point. Cependant, Apache reconnaît plusieurs
       extensions de noms de fichiers ; ainsi, si un <em>nom de
       fichier</em>
       contient plusieurs points, chacune des parties du nom de fichier
-      s&eacute;par&eacute;es par des points et situ&eacute;es apr&egrave;s le premier point est une
+      séparées par des points et situées après le premier point est une
       <em>extension</em>. Par exemple, le <em>nom de fichier</em>
       <code>fichier.html.en</code> comporte deux extensions :
       <code>.html</code> et <code>.en</code>. Pour les directives
-      Apache, vous pouvez sp&eacute;cifier les <em>extension</em>s avec ou sans
+      Apache, vous pouvez spécifier les <em>extension</em>s avec ou sans
       le point initial. Enfin, les <em>extension</em>s ne sont pas
-      sensibles &agrave; la casse.</dd>
+      sensibles à la casse.</dd>
 
       <dt><em>MIME-type</em></dt>
 
-      <dd>Une m&eacute;thode de description du format d'un fichier consistant
-      en un type de format majeur et un type de format mineur s&eacute;par&eacute;s
+      <dd>Une méthode de description du format d'un fichier consistant
+      en un type de format majeur et un type de format mineur séparés
       par un slash comme dans <code>text/html</code>.</dd>
 
       <dt><em>env-variable</em></dt>
 
       <dd>Le nom d'une <a href="../env.html">variable
-      d'environnement</a> d&eacute;finie au cours du processus de configuration
-      d'Apache. Notez qu'elle peut &ecirc;tre diff&eacute;rente d'une variable
-      d'environnement du syst&egrave;me d'exploitation. Voir la <a
+      d'environnement</a> définie au cours du processus de configuration
+      d'Apache. Notez qu'elle peut être différente d'une variable
+      d'environnement du système d'exploitation. Voir la <a
       href="../env.html">documentation sur les variables d'environnement</a>
-      pour plus de d&eacute;tails.</dd>
+      pour plus de détails.</dd>
+
+      <dt><em>time-interval</em></dt>
+
+      <dd>Un format d'intervalle de temps spécifique à divers paramètres de
+      timeout. Les formats supportés sont les suivants :
+        <ul>
+          <li><em>s</em>: Secondes</li>
+          <li><em>h</em>: Heures</li>
+          <li><em>ms</em>: Millisecondes</li>
+          <li><em>mi[n]</em>: Minutes</li>
+        </ul>
+        Par exemple : <code>Timeout 575ms</code>
+      </dd>      
     </dl>
 </section>
 
-<section id="Default"><title>D&eacute;faut</title>
+<section id="Default"><title>Défaut</title>
 
-    <p>Si la directive poss&egrave;de une valeur par d&eacute;faut (en d'autres
+    <p>Si la directive possède une valeur par défaut (en d'autres
     termes, si le serveur Web Apache se comporte comme si vous l'aviez
-    d&eacute;finie &agrave; une valeur particuli&egrave;re, alors que vous l'avez omise dans
-    votre configuration), elle est sp&eacute;cifi&eacute;e ici. Si la directive ne
-    poss&egrave;de pas de valeur par d&eacute;faut, cette section doit sp&eacute;cifier
-    "<em>Aucune</em>". Notez que la valeur par d&eacute;faut dont il est
-    question n'est pas n&eacute;cessairement la m&ecirc;me que la valeur attribu&eacute;e &agrave;
-    la directive dans le fichier httpd.conf par d&eacute;faut distribu&eacute; avec le
+    définie à une valeur particulière, alors que vous l'avez omise dans
+    votre configuration), elle est spécifiée ici. Si la directive ne
+    possède pas de valeur par défaut, cette section doit spécifier
+    "<em>Aucune</em>". Notez que la valeur par défaut dont il est
+    question n'est pas nécessairement la même que la valeur attribuée à
+    la directive dans le fichier httpd.conf par défaut distribué avec le
     serveur.</p>
 </section>
 
 <section id="Context"><title>Contexte</title>
 
     <p>Indique les parties des fichiers de configuration du serveur
-    o&ugrave; cette directive est valide. Il s'agit d'une liste d'une ou
-    plusieurs des valeurs suivantes s&eacute;par&eacute;es par des virgules :</p>
+    où cette directive est valide. Il s'agit d'une liste d'une ou
+    plusieurs des valeurs suivantes séparées par des virgules :</p>
 
     <dl>
       <dt>configuration du serveur</dt>
 
-      <dd>Signifie que la directive peut &ecirc;tre utilis&eacute;e dans les fichiers
+      <dd>Signifie que la directive peut être utilisée dans les fichiers
       de configuration du serveur (par exemple <code>httpd.conf</code>),
-      mais <strong>pas</strong> &agrave; l'int&eacute;rieur d'un conteneur <directive
+      mais <strong>pas</strong> à l'intérieur d'un conteneur <directive
       module="core" type="section">VirtualHost</directive> ou <directive
-      module="core" type="section">Directory</directive>. De m&ecirc;me, elle
+      module="core" type="section">Directory</directive>. De même, elle
       n'est pas valide dans les fichiers <code>.htaccess</code>.</dd>
 
       <dt>serveur virtuel</dt>
 
-      <dd>Signifie que la directive peut appara&icirc;tre &agrave; l'int&eacute;rieur d'un
+      <dd>Signifie que la directive peut apparaître à l'intérieur d'un
       conteneur <directive module="core"
       type="section">VirtualHost</directive> dans les fichiers de
       configuration du serveur.</dd>
 
-      <dt>r&eacute;pertoire</dt>
+      <dt>répertoire</dt>
 
-      <dd>Une directive sp&eacute;cifi&eacute;e comme valide dans ce contexte peut
-      &ecirc;tre utilis&eacute;e &agrave; l'int&eacute;rieur de conteneurs <directive module="core"
+      <dd>Une directive spécifiée comme valide dans ce contexte peut
+      être utilisée à l'intérieur de conteneurs <directive module="core"
       type="section">Directory</directive>, <directive type="section"
       module="core">Location</directive>, <directive module="core"
       type="section">Files</directive>, <directive module="core"
       type="section">If</directive>, et <directive
       module="mod_proxy" type="section">Proxy</directive> dans les
       fichiers de configuration du serveur, en tenant compte des
-      restrictions pr&eacute;cis&eacute;es dans la documentation sur les <a
+      restrictions précisées dans la documentation sur les <a
       href="../sections.html">Sections de configuration</a>.</dd>
 
       <dt>.htaccess</dt>
 
       <dd>Si une directive est valide dans ce contexte, cela signifie
-      qu'elle peut appara&icirc;tre &agrave; l'int&eacute;rieur de fichiers de configuration
-      de <em>niveau</em> r&eacute;pertoire <code>.htaccess</code>. Elle sera ou
-      ne sera pas trait&eacute;e, selon la d&eacute;finition de l'option <a
+      qu'elle peut apparaître à l'intérieur de fichiers de configuration
+      de <em>niveau</em> répertoire <code>.htaccess</code>. Elle sera ou
+      ne sera pas traitée, selon la définition de l'option <a
       href="#Override">overrides</a> pour le contexte courant.</dd>
     </dl>
 
-    <p>La directive n'est autoris&eacute;e <em>que</em> dans le contexte
-    d&eacute;sign&eacute; ; si vous essayez de l'utiliser ailleurs, vous g&eacute;n&eacute;rerez une
-    erreur de configuration qui va soit emp&ecirc;cher le serveur de traiter
-    les requ&ecirc;tes correctement dans ce contexte, soit tout simplement
-    emp&ecirc;cher le serveur de fonctionner -- en d'autres termes, le serveur
-    refusera de d&eacute;marrer.</p>
+    <p>La directive n'est autorisée <em>que</em> dans le contexte
+    désigné ; si vous essayez de l'utiliser ailleurs, vous générerez une
+    erreur de configuration qui va soit empêcher le serveur de traiter
+    les requêtes correctement dans ce contexte, soit tout simplement
+    empêcher le serveur de fonctionner -- en d'autres termes, le serveur
+    refusera de démarrer.</p>
 
-    <p>Les lieux de d&eacute;finition valides pour une directive r&eacute;sultent en
+    <p>Les lieux de définition valides pour une directive résultent en
     fait d'un
-    OU logique de tous les contextes sp&eacute;cifi&eacute;s. En d'autres termes, une
-    directive sp&eacute;cifi&eacute;e comme valide dans "<code>configuration du
-    serveur, .htaccess</code>" peut &ecirc;tre utilis&eacute;e dans le fichier
+    OU logique de tous les contextes spécifiés. En d'autres termes, une
+    directive spécifiée comme valide dans "<code>configuration du
+    serveur, .htaccess</code>" peut être utilisée dans le fichier
     <code>httpd.conf</code> et dans les fichiers <code>.htaccess</code>,
     mais pas dans un conteneur <directive module="core"
     type="section">Directory</directive> ou <directive module="core"
 
 <section id="Override"><title>Surcharge .htaccess</title>
 
-    <p>Ce terme indique quelle autorisation de surcharge doit &ecirc;tre
-    active pour que la directive puisse &ecirc;tre trait&eacute;e lorsqu'elle
-    appara&icirc;t dans un fichier <code>.htaccess</code>. Si le <a
+    <p>Ce terme indique quelle autorisation de surcharge doit être
+    active pour que la directive puisse être traitée lorsqu'elle
+    apparaît dans un fichier <code>.htaccess</code>. Si le <a
     href="#Context" >context</a> de la directive ne lui permet pas
-    d'appara&icirc;tre dans un fichier <code>.htaccess</code>, aucun contexte
-    ne sera sp&eacute;cifi&eacute;.</p>
-
-    <p>Les autorisations de surcharge sont activ&eacute;es via la directive
-    <directive module="core">AllowOverride</directive>, et poss&egrave;dent une
-    port&eacute;e particuli&egrave;re, comme un r&eacute;pertoire et tous ses
-    sous-r&eacute;pertoires, sauf si une autre directive <directive
-    module="core">AllowOverride</directive> appara&icirc;t &agrave; un niveau
-    inf&eacute;rieur. La documentation pour cette directive sp&eacute;cifie aussi les
+    d'apparaître dans un fichier <code>.htaccess</code>, aucun contexte
+    ne sera spécifié.</p>
+
+    <p>Les autorisations de surcharge sont activées via la directive
+    <directive module="core">AllowOverride</directive>, et possèdent une
+    portée particulière, comme un répertoire et tous ses
+    sous-répertoires, sauf si une autre directive <directive
+    module="core">AllowOverride</directive> apparaît à un niveau
+    inférieur. La documentation pour cette directive spécifie aussi les
     noms d'autorisations de surcharge disponibles.</p>
 </section>
 
 <section id="Status"><title>Statut</title>
 
-    <p>Cet attribut indique le degr&eacute; de rapprochement de la directive du
-    coeur d'Apache ; en d'autres termes, vous pouvez &ecirc;tre amen&eacute; &agrave;
-    recompiler le serveur avec un jeu de modules suppl&eacute;mentaires pour
-    pouvoir utiliser la directive, et ainsi acc&eacute;der &agrave; ses
-    fonctionnalit&eacute;s. Les valeurs possible pour cet attribut sont :</p>
+    <p>Cet attribut indique le degré de rapprochement de la directive du
+    coeur d'Apache ; en d'autres termes, vous pouvez être amené à
+    recompiler le serveur avec un jeu de modules supplémentaires pour
+    pouvoir utiliser la directive, et ainsi accéder à ses
+    fonctionnalités. Les valeurs possible pour cet attribut sont :</p>
 
     <dl>
       <dt>Core</dt>
       <dd>Une directive dont le statut est "MPM" est fournie par un <a
       href="../mpm.html">module Multi-Processus</a>. Ce type de
       directive sera disponible si et seulement si vous utilisez un des
-      MPMs sp&eacute;cifi&eacute;s dans la ligne <a href="#Module">Module</a> de la
-      d&eacute;finition de la directive.</dd>
+      MPMs spécifiés dans la ligne <a href="#Module">Module</a> de la
+      définition de la directive.</dd>
 
       <dt>Base</dt>
 
       <dd>Une directive dont le statut est "Base" est fournie par un des
-      modules Apache standards qui sont compil&eacute;s dans le serveur par
-      d&eacute;faut, et sont de ce fait toujours disponibles, sauf si vous avez
+      modules Apache standards qui sont compilés dans le serveur par
+      défaut, et sont de ce fait toujours disponibles, sauf si vous avez
       fait en sorte de les supprimer de votre configuration.</dd>
 
       <dt>Extension</dt>
 
       <dd>Une directive dont le statut est "Extension" est fournie par
       un des modules inclus dans le kit du serveur Apache, mais qui ne
-      sont pas compil&eacute;s dans le serveur par d&eacute;faut. Pour activer la
-      directive et acc&eacute;der &agrave; ses fonctionnalit&eacute;s, vous devez modifier
+      sont pas compilés dans le serveur par défaut. Pour activer la
+      directive et accéder à ses fonctionnalités, vous devez modifier
       les fichiers de configuration de la compilation du serveur, et
       recompiler Apache.</dd>
 
-      <dt>Exp&eacute;rimental</dt>
+      <dt>Expérimental</dt>
 
       <dd>Le statut "Experimental" indique que la directive fait partie
-      du kit Apache, mais que vous l'utilisez &agrave; vos risques et p&eacute;rils.
-      La directive est document&eacute;e &agrave; titre d'exhaustivit&eacute;, et n'est pas
-      obligatoirement support&eacute;e. Le module qui fournit la directive peut
-      &ecirc;tre compil&eacute; par d&eacute;faut dans le serveur ou non ; consultez le haut
-      de la page qui d&eacute;crit la directive et son module pour v&eacute;rifier sa
-      disponibilit&eacute;.</dd>
+      du kit Apache, mais que vous l'utilisez à vos risques et périls.
+      La directive est documentée à titre d'exhaustivité, et n'est pas
+      obligatoirement supportée. Le module qui fournit la directive peut
+      être compilé par défaut dans le serveur ou non ; consultez le haut
+      de la page qui décrit la directive et son module pour vérifier sa
+      disponibilité.</dd>
     </dl>
 </section>
 
     fournissent la directive.</p>
 </section>
 
-<section id="Compatibility"><title>Compatibilit&eacute;</title>
+<section id="Compatibility"><title>Compatibilité</title>
 
     <p>Si la directive ne faisait pas partie de la distribution
-    originale d'Apache version 2, la version dans laquelle elle a &eacute;t&eacute;
-    introduite est indiqu&eacute;e ici. Cette section indique aussi si la
+    originale d'Apache version 2, la version dans laquelle elle a été
+    introduite est indiquée ici. Cette section indique aussi si la
     directive n'est disponible que sur certaines plates-formes.</p>
 </section>
 
index 3e4d16ea7a490e9862f1dc19c043fdfee24dd562..de518091fee64dd9a9a2cc29bd23b7abded191a7 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 1544626 -->
+<!-- English Revision: 1544626:1799456 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 90abd9e2058736806776d594a069c40db8db9c95..912b6247e2abbe3d8c3fa7bcc87ab4680793d230 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1544626 (outdated) -->
+<!-- English Revision: 151408:1799456 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index a7f17bfb8e6615132c48f2b84ccd3afc625fdc32..eaf60824eb16148ed3bb5ae9d5aae19b129dda11 100644 (file)
@@ -8,9 +8,9 @@
 
   <variants>
     <variant>en</variant>
-    <variant>es</variant>
+    <variant outdated="yes">es</variant>
     <variant>fr</variant>
-    <variant>ja</variant>
+    <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
     <variant outdated="yes">tr</variant>
   </variants>
index d6037928b542945c3691b593f47f96801a63de42..68065e1500439ef06b3749d224f14de6cffb07df 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 420990:1544626 (outdated) -->
+<!-- English Revision: 420990:1799456 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 337918c25b16af9367c0d99f9af09981356663d9..e3cfb2763261fc2a3d1aed60b4bd6f30593cff24 100644 (file)
@@ -71,15 +71,14 @@ of consuming threads only for connections with active processing</dd>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section"><h2><a id="other" name="other">Otros Módulos</a></h2>
 <p class="letters"><a href="#A">&nbsp;A&nbsp;</a> | <a href="#B">&nbsp;B&nbsp;</a> | <a href="#C">&nbsp;C&nbsp;</a> | <a href="#D">&nbsp;D&nbsp;</a> | <a href="#E">&nbsp;E&nbsp;</a> | <a href="#F">&nbsp;F&nbsp;</a> | <a href="#H">&nbsp;H&nbsp;</a> | <a href="#I">&nbsp;I&nbsp;</a> | <a href="#J">&nbsp;J&nbsp;</a> | <a href="#L">&nbsp;L&nbsp;</a> | <a href="#M">&nbsp;M&nbsp;</a> | <a href="#N">&nbsp;N&nbsp;</a> | <a href="#P">&nbsp;P&nbsp;</a> | <a href="#R">&nbsp;R&nbsp;</a> | <a href="#S">&nbsp;S&nbsp;</a> | <a href="#U">&nbsp;U&nbsp;</a> | <a href="#V">&nbsp;V&nbsp;</a> | <a href="#W">&nbsp;W&nbsp;</a> | <a href="#X">&nbsp;X&nbsp;</a></p>
-<dl><dt><a href="mod_access_compat.html" id="A" name="A">mod_access_compat</a></dt><dd>Group authorizations based on host (name or IP
-address)</dd>
-<dt><a href="mod_actions.html">mod_actions</a></dt><dd>Execute CGI scripts based on media type or request method.</dd>
-<dt><a href="mod_alias.html">mod_alias</a></dt><dd>Provides for mapping different parts of the host
-    filesystem in the document tree and for URL redirection</dd>
-<dt><a href="mod_allowhandlers.html">mod_allowhandlers</a></dt><dd>Easily restrict what HTTP handlers can be used on the server</dd>
-<dt><a href="mod_allowmethods.html">mod_allowmethods</a></dt><dd>Easily restrict what HTTP methods can be used on the server</dd>
-<dt><a href="mod_asis.html">mod_asis</a></dt><dd>Sends files that contain their own
-HTTP headers</dd>
+<dl><dt><a href="mod_access_compat.html" id="A" name="A">mod_access_compat</a></dt><dd>Autorizaciones de grupo basadas en el host (nombre o dirección IP)</dd>
+<dt><a href="mod_actions.html">mod_actions</a></dt><dd>Ejecuta scripts CGI basándose en el tipo de medio o método de la petición.</dd>
+<dt><a href="mod_alias.html">mod_alias</a></dt><dd>Facilita el mapeo a diferentes partes del sistema de ficheros del host en el árbol de documentos y la redirección de URLs
+</dd>
+<dt><a href="mod_allowhandlers.html">mod_allowhandlers</a></dt><dd>Restringir fácilmente qué handlers HTTP pueden ser usados en el servidor</dd>
+<dt><a href="mod_allowmethods.html">mod_allowmethods</a></dt><dd>Restringe fácilmente qué métodos HTTP pueden ser usados en el servidor</dd>
+<dt><a href="mod_asis.html">mod_asis</a></dt><dd>Envía ficheros que contienen sus propias 
+  cabeceras HTTP</dd>
 <dt><a href="mod_auth_basic.html">mod_auth_basic</a></dt><dd>Basic HTTP authentication</dd>
 <dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
     Digest Authentication</dd>
index d142e4db748a358ebdec3175bb7a597095bdadc3..342ca8535f84a69f1969c2220014be1aee172bdc 100644 (file)
@@ -4,6 +4,10 @@ URI: mod_access_compat.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: mod_access_compat.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
+
 URI: mod_access_compat.html.fr
 Content-Language: fr
 Content-type: text/html; charset=ISO-8859-1
index 28ffbdb3b13ab45b83c067d9254076811e80f34c..090e27fc43b5729741703ab41d764bbea42cb89b 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache Module mod_access_compat</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_access_compat.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
 </div>
@@ -468,6 +469,7 @@ Satisfy Any</pre>
 </div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_access_compat.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
diff --git a/docs/manual/mod/mod_access_compat.html.es b/docs/manual/mod/mod_access_compat.html.es
new file mode 100644 (file)
index 0000000..e698421
--- /dev/null
@@ -0,0 +1,378 @@
+<?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>mod_access_compat - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_access_compat</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Autorizaciones de grupo basadas en el host (nombre o dirección IP)</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Extensión</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>access_compat_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_access_compat.c</td></tr>
+<tr><th><a href="module-dict.html#Compatibility">Compatibilidad:</a></th><td>Disponible en el servidor Apache HTTP 2.3 como un módulo de compatibilidad con versiones previas de Apache http 2.x. Las directivas facilitadas por este módulo han quedado obsoletas en favor de la nueva refactorización de authz. Por favor vea <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+    <p>Las directivas facilitadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> se usan en las secciones 
+    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, 
+    <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, y 
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> así como en los ficheros 
+    <code><a href="core.html#accessfilename">.htaccess</a></code> para controlar el acceso a partes específicas del servidor. El acceso se puede controlar en base al nombre de host del cliente, dirección IP u otras características de la petición del cliente, tal y como se capturan en las 
+    <a href="../env.html">variables de entorno</a>. La directivas 
+    <code class="directive"><a href="#allow">Allow</a></code> y 
+    <code class="directive"><a href="#deny">Deny</a></code> se usan para especificar qué clientes tienen acceso y cuales no al servidor, mientras que la directiva 
+    <code class="directive"><a href="#order">Order</a></code> configura el estado del acceso por defecto, y configura cómo las directivas 
+    <code class="directive"><a href="#allow">Allow</a></code> y 
+    <code class="directive"><a href="#deny">Deny</a></code> interactuan la una con la otra.</p>
+
+    <p>Se pueden configurar simultáneamente restricciones basadas en el host y autenticación con contraseña. En ese caso, la directiva <code class="directive"><a href="#satisfy">Satisfy</a></code> se usa para determinar como los dos sets de restricciones interactuan.</p>
+
+    <div class="warning"><h3>Atención</h3>
+      <p>Las directivas facilitadas por <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> han quedado obsoletas en favor de
+      <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>. Mezclar directivas antiguas como 
+      <code class="directive"><a href="#order">Order</a></code>, 
+      <code class="directive"><a href="#allow">Allow</a></code> o 
+      <code class="directive"><a href="#deny">Deny</a></code> con las nuevas directivas como 
+      <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> es técnicamente posible pero no recomendable. Éste módulo se creó para dar soporte a configuraciones que solo contienen directivas antiguas para facilitar una actualización a la versión 2.4. Por favor compruebe la guía 
+      <a href="../upgrading.html">Actualizando</a> para más información.</p>
+    </div>
+
+    <p>En general, las directivas de restricción de acceso aplican a todos los métodos de acceso (<code>GET</code>, <code>PUT</code>, <code>POST</code>, etc). Éste es el comportamiento deseado en la mayor parte de los casos. Sin embargo, es posible restringir algunos métodos, dejando otros métodos sin restricción, configurando las directivas dentro de una sección <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code>.</p>
+
+    <div class="note"> <h3>Fusionando secciones de configuración</h3>
+      <p>Cuando cualquier directiva facilitada por este módulo se usa en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </div>
+
+</div>
+<div id="quickview"><h3 class="directives">Directivas</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#allow">Allow</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#deny">Deny</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#order">Order</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#satisfy">Satisfy</a></li>
+</ul>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_access_compat">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_access_compat">Report a bug</a></li></ul><h3>Consulte también</h3>
+<ul class="seealso">
+<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</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_core.html">mod_authz_core</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="directive-section"><h2><a name="Allow" id="Allow">Allow</a> <a name="allow" id="allow">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Controla qué hosts pueden acceder a un área del servidor</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code> Allow from all|<var>host</var>|env=[!]<var>env-variable</var>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>Limit</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Extensión</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_access_compat</td></tr>
+</table>
+    <p>La directiva <code class="directive">Allow</code> afecta a qué hosts pueden acceder un área del servidor. El acceso puede controlarse por nombre de host, dirección IP, rango de direcciones IP, o por otras caracterísitcas de la petición del cliente capturadas en variables de entorno.</p>
+
+    <p>El primer parámetro para esta directiva siempre es <code>from</code>. Los siguientes parámetros pueden tomar tres formas diferentes. Si se especifica <code>Allow from all</code>, entonces se permite el acceso a todos los host, dependiendo de la configuración de las directivas 
+    <code class="directive"><a href="#deny">Deny</a></code> y 
+    <code class="directive"><a href="#order">Order</a></code> tal y como se indicó más arriba. Para permitir solo host específicos o grupos de host acceder al servidor, se puede especificar el <em>host</em> en cualquiera de los siguientes formatos:</p>
+
+    <dl>
+      <dt>Un nomre de dominio (parcial)</dt>
+
+      <dd>
+      <pre class="prettyprint lang-config">Allow from example.org
+Allow from .net example.edu</pre>
+
+      
+      <p>Hosts cuyo nombre coincide, o acaba en estas cadenas de caracteres se les permite acceso. Solo componentes completos pueden coincidir, así que el ejemplo de arriba coincidirá con <code>foo.example.org</code> pero no coincidirán con <code>fooexample.org</code>. Esta configuración provocará que Apache httpd haga una doble resolución de DNS en la dirección IP del cliente, independientemente de la configuración de la directiva 
+      <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code>. Hará una resolución inversa de DNS en la dirección IP para encontrar el nombre de host asociado, y entonces hará una resolución del nombre de host para asegurarse de que coincide con la dirección IP original. Solo se le dará acceso al nombre de host si ambas resoluciones de DNS son consistentes.</p></dd>
+
+      <dt>Una dirección IP completa</dt>
+
+      <dd>
+      <pre class="prettyprint lang-config">Allow from 10.1.2.3
+Allow from 192.168.1.104 192.168.1.205</pre>
+
+      <p>Se le permite acceso a una dirección IP de un host</p></dd>
+
+      <dt>Una dirección IP parcial</dt>
+
+      <dd>
+      <pre class="prettyprint lang-config">Allow from 10.1
+Allow from 10 172.20 192.168.2</pre>
+
+      <p>Los primeros 1 al 3 bytes de una dirección IP, para restricción de subred.</p></dd>
+
+      <dt>Una pareja de red/máscara de red</dt>
+
+      <dd>
+      <pre class="prettyprint lang-config">Allow from 10.1.0.0/255.255.0.0</pre>
+
+
+      <p>Una red a.b.c.d, y una máscara de red w.x.y.z. Para una restricción de subred más específica.</p></dd>
+
+      <dt>Una especificación de red/nnn CIDR</dt>
+
+      <dd>
+      <pre class="prettyprint lang-config">Allow from 10.1.0.0/16</pre>
+
+
+      <p>Similar al caso anterior, exceptuando que la máscara de red se especifica con número de bits.</p></dd>
+    </dl>
+
+    <p>Tenga en cuenta que los tres últimos ejemplos coinciden exactamente con el mismo grupo de hosts.</p>
+
+    <p>Direcciones y subredes IPv6 pueden especificarse como se describe aquí:</p>
+
+    <pre class="prettyprint lang-config">Allow from 2001:db8::a00:20ff:fea7:ccea
+Allow from 2001:db8::a00:20ff:fea7:ccea/10</pre>
+
+
+    <p>El tercer formato de parámetros para la directiva <code class="directive">Allow</code> permite que el acceso al servidor se controle mediante la existencia de 
+    <a href="../env.html">variable de entorno</a>. Cuando se especifica 
+    <code>Allow from env=<var>env-variable</var></code>, entonces se le da acceso si la variable de entorno <var>env-variable</var> existe. Cuando se especifica 
+    <code>Allow from env=!<var>env-variable</var></code>, entonces se da acceso si la variable de entorno 
+    <var>env-variable</var> no existe. El servidor facilita la configuración de variables de entorno de una manera flexible basándose en las características de la petición del cliente usando las directivas facilitadas por <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. Por tanto, esta directiva se puede usar para permitir acceso basándose en tales factores como el <code>User-Agent</code> del cliente (tipo de navegador), <code>Referer</code>, u otros campos de cabeceras HTTP de petición.</p>
+
+    <pre class="prettyprint lang-config">SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
+&lt;Directory "/docroot"&gt;
+    Order Deny,Allow
+    Deny from all
+    Allow from env=let_me_in
+&lt;/Directory&gt;</pre>
+
+
+    <p>En este caso, navegadores con una cadena user-agent que comienza con <code>KnockKnock/2.0</code> podrán acceder, y al resto se les denegará el acceso.</p>
+
+    <div class="note"> <h3>Fusión de secciones de configuración</h3>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Deny" id="Deny">Deny</a> <a name="deny" id="deny">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Controla a qué hosts se les deniega el acceso al servidor</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code> Deny from all|<var>host</var>|env=[!]<var>env-variable</var>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>Limit</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Extensión</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_access_compat</td></tr>
+</table>
+    <p>Esta directiva permite que se restrinja el acceso al servidor basándose en el nombre de host, dirección IP, o variables de entorno. Los parámetros para la directiva 
+    <code class="directive">Deny</code> son idénticos a los parámetros para la directiva 
+    <code class="directive"><a href="#allow">Allow</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Order" id="Order">Order</a> <a name="order" id="order">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Controla el estado por defecto del acceso y el orden en que se evalúan 
+  <code class="directive">Allow</code> y 
+<code class="directive">Deny</code>.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code> Order <var>ordering</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Valor por defecto:</a></th><td><code>Order Deny,Allow</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>Limit</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Extensión</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_access_compat</td></tr>
+</table>
+
+    <p>La directiva <code class="directive">Order</code> , junto con las directivas
+    <code class="directive"><a href="#allow">Allow</a></code> y
+    <code class="directive"><a href="#deny">Deny</a></code>, realizan un sistema de control de tres fases. La primera fase proceso o bien todas las directivas 
+    <code class="directive"><a href="#allow">Allow</a></code> o todas las directivas 
+    <code class="directive"><a href="#deny">Deny</a></code>, tal y como se haya especificado en la directiva  
+    <code class="directive"><a href="#order">Order</a></code>. La segunda fase interpreta el resto de directivas 
+    (<code class="directive"><a href="#deny">Deny</a></code> o
+    <code class="directive"><a href="#allow">Allow</a></code>). La tercera fase se aplica a todas las peticiones que no coinciden con cualquiera de las dos fases anteriores.</p>
+
+    <p>Tenga en cuenta que todas las directivas 
+    <code class="directive"><a href="#allow">Allow</a></code> y 
+    <code class="directive"><a href="#deny">Deny</a></code> son procesadas, al contrario que el cortafuegos típico, donde solo se usa la primera coincidencia. La última coincidencia es efectiva (también al contrario que un cortafuegos típico). Además, el orden en el que las directivas aparecen en la configuración no es relevante -- todas las líneas 
+    <code class="directive"><a href="#allow">Allow</a></code> se interpretan como un grupo, todas las líneas <code class="directive"><a href="#deny">Deny</a></code> se interpretan como otro grupo, y el estado por defecto se procesa a sí mismo.</p>
+
+    <p><em>Ordenar</em> es una de las dos:</p>
+
+    <dl>
+      <dt><code>Allow,Deny</code></dt>
+
+      <dd>Primero, se interpretan todas las directivas <code class="directive"><a href="#allow">Allow</a></code>; al menos una debe coincidir, o se deniega el acceso a la petición. Después, todas las directivas <code class="directive"><a href="#deny">Deny</a></code> son interpretadas. Si alguna coincide, se deniega el acceso a la petición. Por último, cualquier petición que no encaje en una directiva <code class="directive"><a href="#allow">Allow</a></code> o <code class="directive"><a href="#deny">Deny</a></code> se les deniega el acceso por defecto.</dd>
+
+      <dt><code>Deny,Allow</code></dt>
+
+      <dd>Primero, se interpretan todas las directivas <code class="directive"><a href="#deny">Deny</a></code>; si alguna coincide, se deniega el acceso a la petición <strong>a menos que</strong> también encaje con una directiva <code class="directive"><a href="#allow">Allow</a></code>. Cualquier petición que no encaje ni con directivas <code class="directive"><a href="#allow">Allow</a></code> ni <code class="directive"><a href="#deny">Deny</a></code> se les permite el acceso.</dd>
+
+      <dt><code>Mutual-failure</code></dt>
+
+      <dd>Este orden tiene el mismo efecto que <code>Order Allow,Deny</code> y ha quedado obsoleto en su favor.</dd>
+    </dl>
+
+    <p>Las palabras clave solo pueden ser separadas por coma; no se permiten <em>espacios en blanco</em> entre ellas.</p>
+
+    <table class="bordered">
+      <tr>
+        <th>Filtro</th>
+        <th>Resultado Allow,Deny</th>
+        <th>Resultado Deny,Allow</th>
+      </tr><tr>
+        <th>Solo coincide con Allow</th>
+        <td>Petición permitida</td>
+        <td>Petición permitida</td>
+      </tr><tr>
+        <th>Solo coincide con Deny</th>
+        <td>Petición denegada</td>
+        <td>Petición denegada</td>
+      </tr><tr>
+        <th>No coincide</th>
+        <td>Por defecto con la segunda directiva: Denegado</td>
+        <td>Por defecto con la segunda directiva: Permitido</td>
+      </tr><tr>
+        <th>Coincide con ambas Allow &amp; Deny</th>
+        <td>Control de coincidencia final: Denegado</td>
+        <td>Control de coincidencia final: Permitido</td>
+      </tr>
+    </table>
+
+    <p>En el siguiente ejemplo, todos los host en el dominio example.org tienen permitido el acceso; el resto de host tienen el acceso denegado.</p>
+
+    <pre class="prettyprint lang-config">Order Deny,Allow
+Deny from all
+Allow from example.org</pre>
+
+
+    <p>En el siguiente ejemplo, todos los hosts del dominio example.org tienen permitido el acceso, excepto para los host que están en el subdominio foo.example.org, a los que se le deniega el acceso. Todos los host que no coinciden con el dominio example.org tienen el acceso denegado porque el estado por defecto es <code class="directive"><a href="#deny">Deny</a></code> con el acceso al servidor.</p>
+
+    <pre class="prettyprint lang-config">Order Allow,Deny
+Allow from example.org
+Deny from foo.example.org</pre>
+
+
+    <p>Por otro lado, si el <code class="directive">Order</code> en el último ejemplo se cambia a <code>Deny,Allow</code>, se permitirá el acceso a todos los host. Esto pasa porque, independientemente del orden actual de las directivas en el fichero de configuración, <code>Allow from example.org</code> será interpretrado en último lugar y sobreescribirá la orden de <code>Deny from foo.example.org</code>. Todos los host que no estén en el dominio <code>example.org</code> también tendrán acceso porque el estado por defecto es <code class="directive"><a href="#allow">Allow</a></code>.</p>
+
+    <p>La presencia de una directiva <code class="directive">Order</code> puede afectar el acceso a una parte del servidor incluso en la ausencia de las directivas <code class="directive"><a href="#allow">Allow</a></code>
+    y <code class="directive"><a href="#deny">Deny</a></code> por su efecto en el estado del acceso por defecto. Por ejemplo,</p>
+
+    <pre class="prettyprint lang-config">&lt;Directory "/www"&gt;
+    Order Allow,Deny
+&lt;/Directory&gt;</pre>
+
+
+    <p>denegará todos los accesos al directorio <code>/www</code> porque el estado del acceso por defecto está configurado con <code class="directive"><a href="#deny">Deny</a></code>.</p>
+
+    <p>La directiva <code class="directive">Order</code> controla el orden de procesamiento de las directivas solo en cada fase del procesamiento de la configuración de un servidor. Esto implica, por ejemplo, que una directiva 
+    <code class="directive"><a href="#allow">Allow</a></code> o <code class="directive"><a href="#deny">Deny</a></code> dentro de una sección
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> será siempre interpretada después de una directiva 
+     <code class="directive"><a href="#allow">Allow</a></code> o <code class="directive"><a href="#deny">Deny</a></code> dentro de una sección
+    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> o fichero <code>.htaccess</code>, independientemente de la configuración de la directiva <code class="directive">Order</code>. Para detalles sobre la fusión de secciones de configuración, vea la documentación en <a href="../sections.html">Cómo funcionan las secciones Directory, Location y Files</a>.</p>
+
+    <div class="note"> <h3>Fusión de secciones de configuración</h3>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </div>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Satisfy" id="Satisfy">Satisfy</a> <a name="satisfy" id="satisfy">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Interacción entre control de acceso a nivel-de-hostess y autenticación de usuario</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>Satisfy Any|All</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Valor por defecto:</a></th><td><code>Satisfy All</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>AuthConfig</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Extensión</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_access_compat</td></tr>
+</table>
+    <p>Política de acceso si se usan ambos <code class="directive"><a href="#allow">Allow</a></code> y <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>. El parámetro puede ser <code>All</code> o <code>Any</code>. Esta directiva solo es útil si el acceso a un área en particular se está restringiendo por usuario/contraseña <em>y</em> dirección de host del cliente. En este caso el comportamiento por defecto (<code>All</code>) es requerir que el cliente pase la restricción de dirección de acceso <em>y</em> además introduce un usuario y contraseña válidos. Con la opción <code>Any</code> se le garantizará acceso al cliente si pasa la restricción de host o introduce un usuario y contraseña válidos. Esto puede usarse para restringir con contraseña el acceso a un area, pero para permitir acceso a los clientes desde unas direcciones en particular sin pedirles contraseña.</p>
+
+    <p>Por ejemplo, si quisiera dejar entrar a personas de su red con acceso sin restricciones a una parte de su website, pero requiere que gente de fuera de su red facilite una contraseña, podría usar una configuración similar a la siguiente:</p>
+
+    <pre class="prettyprint lang-config">Require valid-user
+Allow from 192.168.1
+Satisfy Any</pre>
+
+
+    <p>Otro uso típico de la directiva <code class="directive">Satisfy</code> es para suavizar las restricciones de acceso a un subdirectorio:</p>
+
+    <pre class="prettyprint lang-config">&lt;Directory "/var/www/private"&gt;
+    Require valid-user
+&lt;/Directory&gt;
+
+&lt;Directory "/var/www/private/public"&gt;
+    Allow from all
+    Satisfy Any
+&lt;/Directory&gt;</pre>
+
+
+    <p>En el ejemplo de arriba, se requiere autenticación para el directorio <code>/var/www/private</code>, pero no se requerirá para el directorio <code>/var/www/private/public</code>.</p>
+
+    <p>Desde la versión 2.0.51 las directivas <code class="directive">Satisfy</code> pueden restringirse a métodos específicos con secciones <code class="directive"><a href="../mod/core.html#limit">&lt;Limit&gt;</a></code> y <code class="directive"><a href="../mod/core.html#limitexcept">&lt;LimitExcept&gt;</a></code>.</p>
+
+    <div class="note"> <h3>Fusión de secciones de configuración.</h3>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </div>
+
+
+<h3>Consulte también</h3>
+<ul>
+<li><code class="directive"><a href="#allow">Allow</a></code></li>
+<li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li>
+</ul>
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_access_compat.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 2017 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/quickreference.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
index 4590c3bf2ab4f95a0c659b483a3a13403c24bfd4..f82b9a3c9a64626f2f338a8f212a852f74dd19c7 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Module Apache mod_access_compat</h1>
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
 </div>
@@ -493,6 +494,7 @@ Satisfy Any</pre>
 </div>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
index 7cda244a35140d37d35bac4da8ebcf59be2e7531..c28e3c5a4c5d0f47df48e3779826c8c19ee75fbf 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache モジュール mod_access_compat</h1>
 <div class="toplang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" title="Japanese">&nbsp;ja&nbsp;</a></p>
 </div>
 </div>
 <div class="bottomlang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_access_compat.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_access_compat.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_access_compat.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_access_compat.html" title="Japanese">&nbsp;ja&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
diff --git a/docs/manual/mod/mod_access_compat.xml.es b/docs/manual/mod/mod_access_compat.xml.es
new file mode 100644 (file)
index 0000000..cf3dc78
--- /dev/null
@@ -0,0 +1,349 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1738217 -->
+<!-- Spanish Translation: Daniel Ferradal -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_access_compat.xml.meta">
+
+<name>mod_access_compat</name>
+<description>Autorizaciones de grupo basadas en el host (nombre o dirección IP)</description>
+<status>Extension</status>
+<sourcefile>mod_access_compat.c</sourcefile>
+<identifier>access_compat_module</identifier>
+<compatibility>Disponible en el servidor Apache HTTP 2.3 como un módulo de compatibilidad con versiones previas de Apache http 2.x. Las directivas facilitadas por este módulo han quedado obsoletas en favor de la nueva refactorización de authz. Por favor vea <module>mod_authz_host</module></compatibility>
+
+<summary>
+    <p>Las directivas facilitadas por <module>mod_access_compat</module> se usan en las secciones 
+    <directive module="core" type="section">Directory</directive>, 
+    <directive module="core" type="section">Files</directive>, y 
+    <directive module="core" type="section">Location</directive> así como en los ficheros 
+    <code><a href="core.html#accessfilename">.htaccess</a></code> para controlar el acceso a partes específicas del servidor. El acceso se puede controlar en base al nombre de host del cliente, dirección IP u otras características de la petición del cliente, tal y como se capturan en las 
+    <a href="../env.html">variables de entorno</a>. La directivas 
+    <directive module="mod_access_compat">Allow</directive> y 
+    <directive module="mod_access_compat">Deny</directive> se usan para especificar qué clientes tienen acceso y cuales no al servidor, mientras que la directiva 
+    <directive module="mod_access_compat">Order</directive> configura el estado del acceso por defecto, y configura cómo las directivas 
+    <directive module="mod_access_compat">Allow</directive> y 
+    <directive module="mod_access_compat">Deny</directive> interactuan la una con la otra.</p>
+
+    <p>Se pueden configurar simultáneamente restricciones basadas en el host y autenticación con contraseña. En ese caso, la directiva <directive module="mod_access_compat">Satisfy</directive> se usa para determinar como los dos sets de restricciones interactuan.</p>
+
+    <note type="warning"><title>Atención</title>
+      <p>Las directivas facilitadas por <module>mod_access_compat</module> han quedado obsoletas en favor de
+      <module>mod_authz_host</module>. Mezclar directivas antiguas como 
+      <directive module="mod_access_compat">Order</directive>, 
+      <directive module="mod_access_compat">Allow</directive> o 
+      <directive module="mod_access_compat">Deny</directive> con las nuevas directivas como 
+      <directive module="mod_authz_core">Require</directive> es técnicamente posible pero no recomendable. Éste módulo se creó para dar soporte a configuraciones que solo contienen directivas antiguas para facilitar una actualización a la versión 2.4. Por favor compruebe la guía 
+      <a href="../upgrading.html">Actualizando</a> para más información.</p>
+    </note>
+
+    <p>En general, las directivas de restricción de acceso aplican a todos los métodos de acceso (<code>GET</code>, <code>PUT</code>, <code>POST</code>, etc). Éste es el comportamiento deseado en la mayor parte de los casos. Sin embargo, es posible restringir algunos métodos, dejando otros métodos sin restricción, configurando las directivas dentro de una sección <directive module="core" type="section">Limit</directive>.</p>
+
+    <note> <title>Fusionando secciones de configuración</title>
+      <p>Cuando cualquier directiva facilitada por este módulo se usa en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </note>
+
+</summary>
+
+<seealso><directive module="mod_authz_core">Require</directive></seealso>
+<seealso><module>mod_authz_host</module></seealso>
+<seealso><module>mod_authz_core</module></seealso>
+
+<directivesynopsis>
+<name>Allow</name>
+<description>Controla qué hosts pueden acceder a un área del servidor</description>
+<syntax> Allow from all|<var>host</var>|env=[!]<var>env-variable</var>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</syntax>
+<contextlist><context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>Limit</override>
+
+<usage>
+    <p>La directiva <directive>Allow</directive> afecta a qué hosts pueden acceder un área del servidor. El acceso puede controlarse por nombre de host, dirección IP, rango de direcciones IP, o por otras caracterísitcas de la petición del cliente capturadas en variables de entorno.</p>
+
+    <p>El primer parámetro para esta directiva siempre es <code>from</code>. Los siguientes parámetros pueden tomar tres formas diferentes. Si se especifica <code>Allow from all</code>, entonces se permite el acceso a todos los host, dependiendo de la configuración de las directivas 
+    <directive module="mod_access_compat">Deny</directive> y 
+    <directive module="mod_access_compat">Order</directive> tal y como se indicó más arriba. Para permitir solo host específicos o grupos de host acceder al servidor, se puede especificar el <em>host</em> en cualquiera de los siguientes formatos:</p>
+
+    <dl>
+      <dt>Un nomre de dominio (parcial)</dt>
+
+      <dd>
+      <highlight language="config">
+Allow from example.org
+Allow from .net example.edu
+      </highlight>
+      
+      <p>Hosts cuyo nombre coincide, o acaba en estas cadenas de caracteres se les permite acceso. Solo componentes completos pueden coincidir, así que el ejemplo de arriba coincidirá con <code>foo.example.org</code> pero no coincidirán con <code>fooexample.org</code>. Esta configuración provocará que Apache httpd haga una doble resolución de DNS en la dirección IP del cliente, independientemente de la configuración de la directiva 
+      <directive module="core">HostnameLookups</directive>. Hará una resolución inversa de DNS en la dirección IP para encontrar el nombre de host asociado, y entonces hará una resolución del nombre de host para asegurarse de que coincide con la dirección IP original. Solo se le dará acceso al nombre de host si ambas resoluciones de DNS son consistentes.</p></dd>
+
+      <dt>Una dirección IP completa</dt>
+
+      <dd>
+      <highlight language="config">
+Allow from 10.1.2.3
+Allow from 192.168.1.104 192.168.1.205
+      </highlight>
+      <p>Se le permite acceso a una dirección IP de un host</p></dd>
+
+      <dt>Una dirección IP parcial</dt>
+
+      <dd>
+      <highlight language="config">
+Allow from 10.1
+Allow from 10 172.20 192.168.2
+      </highlight>
+      <p>Los primeros 1 al 3 bytes de una dirección IP, para restricción de subred.</p></dd>
+
+      <dt>Una pareja de red/máscara de red</dt>
+
+      <dd>
+      <highlight language="config">
+        Allow from 10.1.0.0/255.255.0.0
+      </highlight>
+
+      <p>Una red a.b.c.d, y una máscara de red w.x.y.z. Para una restricción de subred más específica.</p></dd>
+
+      <dt>Una especificación de red/nnn CIDR</dt>
+
+      <dd>
+      <highlight language="config">
+        Allow from 10.1.0.0/16
+      </highlight>
+
+      <p>Similar al caso anterior, exceptuando que la máscara de red se especifica con número de bits.</p></dd>
+    </dl>
+
+    <p>Tenga en cuenta que los tres últimos ejemplos coinciden exactamente con el mismo grupo de hosts.</p>
+
+    <p>Direcciones y subredes IPv6 pueden especificarse como se describe aquí:</p>
+
+    <highlight language="config">
+Allow from 2001:db8::a00:20ff:fea7:ccea
+Allow from 2001:db8::a00:20ff:fea7:ccea/10
+    </highlight>
+
+    <p>El tercer formato de parámetros para la directiva <directive>Allow</directive> permite que el acceso al servidor se controle mediante la existencia de 
+    <a href="../env.html">variable de entorno</a>. Cuando se especifica 
+    <code>Allow from env=<var>env-variable</var></code>, entonces se le da acceso si la variable de entorno <var>env-variable</var> existe. Cuando se especifica 
+    <code>Allow from env=!<var>env-variable</var></code>, entonces se da acceso si la variable de entorno 
+    <var>env-variable</var> no existe. El servidor facilita la configuración de variables de entorno de una manera flexible basándose en las características de la petición del cliente usando las directivas facilitadas por <module>mod_setenvif</module>. Por tanto, esta directiva se puede usar para permitir acceso basándose en tales factores como el <code>User-Agent</code> del cliente (tipo de navegador), <code>Referer</code>, u otros campos de cabeceras HTTP de petición.</p>
+
+    <highlight language="config">
+SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
+&lt;Directory "/docroot"&gt;
+    Order Deny,Allow
+    Deny from all
+    Allow from env=let_me_in
+&lt;/Directory&gt;
+    </highlight>
+
+    <p>En este caso, navegadores con una cadena user-agent que comienza con <code>KnockKnock/2.0</code> podrán acceder, y al resto se les denegará el acceso.</p>
+
+    <note> <title>Fusión de secciones de configuración</title>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </note>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Deny</name>
+<description>Controla a qué hosts se les deniega el acceso al servidor</description>
+<syntax> Deny from all|<var>host</var>|env=[!]<var>env-variable</var>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</syntax>
+<contextlist><context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>Limit</override>
+
+<usage>
+    <p>Esta directiva permite que se restrinja el acceso al servidor basándose en el nombre de host, dirección IP, o variables de entorno. Los parámetros para la directiva 
+    <directive>Deny</directive> son idénticos a los parámetros para la directiva 
+    <directive module="mod_access_compat">Allow</directive>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Order</name>
+<description>Controla el estado por defecto del acceso y el orden en que se evalúan 
+  <directive>Allow</directive> y 
+<directive>Deny</directive>.</description>
+<syntax> Order <var>ordering</var></syntax>
+<default>Order Deny,Allow</default>
+<contextlist><context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>Limit</override>
+
+<usage>
+
+    <p>La directiva <directive>Order</directive> , junto con las directivas
+    <directive module="mod_access_compat">Allow</directive> y
+    <directive module="mod_access_compat">Deny</directive>, realizan un sistema de control de tres fases. La primera fase proceso o bien todas las directivas 
+    <directive module="mod_access_compat">Allow</directive> o todas las directivas 
+    <directive module="mod_access_compat">Deny</directive>, tal y como se haya especificado en la directiva  
+    <directive module="mod_access_compat">Order</directive>. La segunda fase interpreta el resto de directivas 
+    (<directive module="mod_access_compat">Deny</directive> o
+    <directive module="mod_access_compat">Allow</directive>). La tercera fase se aplica a todas las peticiones que no coinciden con cualquiera de las dos fases anteriores.</p>
+
+    <p>Tenga en cuenta que todas las directivas 
+    <directive module="mod_access_compat">Allow</directive> y 
+    <directive module="mod_access_compat">Deny</directive> son procesadas, al contrario que el cortafuegos típico, donde solo se usa la primera coincidencia. La última coincidencia es efectiva (también al contrario que un cortafuegos típico). Además, el orden en el que las directivas aparecen en la configuración no es relevante -- todas las líneas 
+    <directive module="mod_access_compat">Allow</directive> se interpretan como un grupo, todas las líneas <directive module="mod_access_compat">Deny</directive> se interpretan como otro grupo, y el estado por defecto se procesa a sí mismo.</p>
+
+    <p><em>Ordenar</em> es una de las dos:</p>
+
+    <dl>
+      <dt><code>Allow,Deny</code></dt>
+
+      <dd>Primero, se interpretan todas las directivas <directive module="mod_access_compat">Allow</directive>; al menos una debe coincidir, o se deniega el acceso a la petición. Después, todas las directivas <directive module="mod_access_compat">Deny</directive> son interpretadas. Si alguna coincide, se deniega el acceso a la petición. Por último, cualquier petición que no encaje en una directiva <directive module="mod_access_compat">Allow</directive> o <directive module="mod_access_compat">Deny</directive> se les deniega el acceso por defecto.</dd>
+
+      <dt><code>Deny,Allow</code></dt>
+
+      <dd>Primero, se interpretan todas las directivas <directive module="mod_access_compat">Deny</directive>; si alguna coincide, se deniega el acceso a la petición <strong>a menos que</strong> también encaje con una directiva <directive module="mod_access_compat">Allow</directive>. Cualquier petición que no encaje ni con directivas <directive module="mod_access_compat">Allow</directive> ni <directive
+      module="mod_access_compat">Deny</directive> se les permite el acceso.</dd>
+
+      <dt><code>Mutual-failure</code></dt>
+
+      <dd>Este orden tiene el mismo efecto que <code>Order Allow,Deny</code> y ha quedado obsoleto en su favor.</dd>
+    </dl>
+
+    <p>Las palabras clave solo pueden ser separadas por coma; no se permiten <em>espacios en blanco</em> entre ellas.</p>
+
+    <table border="1">
+      <tr>
+        <th>Filtro</th>
+        <th>Resultado Allow,Deny</th>
+        <th>Resultado Deny,Allow</th>
+      </tr><tr>
+        <th>Solo coincide con Allow</th>
+        <td>Petición permitida</td>
+        <td>Petición permitida</td>
+      </tr><tr>
+        <th>Solo coincide con Deny</th>
+        <td>Petición denegada</td>
+        <td>Petición denegada</td>
+      </tr><tr>
+        <th>No coincide</th>
+        <td>Por defecto con la segunda directiva: Denegado</td>
+        <td>Por defecto con la segunda directiva: Permitido</td>
+      </tr><tr>
+        <th>Coincide con ambas Allow &amp; Deny</th>
+        <td>Control de coincidencia final: Denegado</td>
+        <td>Control de coincidencia final: Permitido</td>
+      </tr>
+    </table>
+
+    <p>En el siguiente ejemplo, todos los host en el dominio example.org tienen permitido el acceso; el resto de host tienen el acceso denegado.</p>
+
+    <highlight language="config">
+Order Deny,Allow
+Deny from all
+Allow from example.org
+    </highlight>
+
+    <p>En el siguiente ejemplo, todos los hosts del dominio example.org tienen permitido el acceso, excepto para los host que están en el subdominio foo.example.org, a los que se le deniega el acceso. Todos los host que no coinciden con el dominio example.org tienen el acceso denegado porque el estado por defecto es <directive module="mod_access_compat">Deny</directive> con el acceso al servidor.</p>
+
+    <highlight language="config">
+Order Allow,Deny
+Allow from example.org
+Deny from foo.example.org
+    </highlight>
+
+    <p>Por otro lado, si el <directive>Order</directive> en el último ejemplo se cambia a <code>Deny,Allow</code>, se permitirá el acceso a todos los host. Esto pasa porque, independientemente del orden actual de las directivas en el fichero de configuración, <code>Allow from example.org</code> será interpretrado en último lugar y sobreescribirá la orden de <code>Deny from foo.example.org</code>. Todos los host que no estén en el dominio <code>example.org</code> también tendrán acceso porque el estado por defecto es <directive
+    module="mod_access_compat">Allow</directive>.</p>
+
+    <p>La presencia de una directiva <directive>Order</directive> puede afectar el acceso a una parte del servidor incluso en la ausencia de las directivas <directive module="mod_access_compat">Allow</directive>
+    y <directive module="mod_access_compat">Deny</directive> por su efecto en el estado del acceso por defecto. Por ejemplo,</p>
+
+    <highlight language="config">
+&lt;Directory "/www"&gt;
+    Order Allow,Deny
+&lt;/Directory&gt;
+    </highlight>
+
+    <p>denegará todos los accesos al directorio <code>/www</code> porque el estado del acceso por defecto está configurado con <directive module="mod_access_compat">Deny</directive>.</p>
+
+    <p>La directiva <directive>Order</directive> controla el orden de procesamiento de las directivas solo en cada fase del procesamiento de la configuración de un servidor. Esto implica, por ejemplo, que una directiva 
+    <directive module="mod_access_compat">Allow</directive> o <directive
+    module="mod_access_compat">Deny</directive> dentro de una sección
+    <directive module="core" type="section">Location</directive> será siempre interpretada después de una directiva 
+     <directive module="mod_access_compat">Allow</directive> o <directive
+    module="mod_access_compat">Deny</directive> dentro de una sección
+    <directive module="core" type="section">Directory</directive> o fichero <code>.htaccess</code>, independientemente de la configuración de la directiva <directive>Order</directive>. Para detalles sobre la fusión de secciones de configuración, vea la documentación en <a
+    href="../sections.html">Cómo funcionan las secciones Directory, Location y Files</a>.</p>
+
+    <note> <title>Fusión de secciones de configuración</title>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </note>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Satisfy</name>
+<description>Interacción entre control de acceso a nivel-de-hostess y autenticación de usuario</description>
+<syntax>Satisfy Any|All</syntax>
+<default>Satisfy All</default>
+<contextlist><context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>AuthConfig</override>
+
+<usage>
+    <p>Política de acceso si se usan ambos <directive
+    module="mod_access_compat">Allow</directive> y <directive
+    module="mod_authz_core">Require</directive>. El parámetro puede ser <code>All</code> o <code>Any</code>. Esta directiva solo es útil si el acceso a un área en particular se está restringiendo por usuario/contraseña <em>y</em> dirección de host del cliente. En este caso el comportamiento por defecto (<code>All</code>) es requerir que el cliente pase la restricción de dirección de acceso <em>y</em> además introduce un usuario y contraseña válidos. Con la opción <code>Any</code> se le garantizará acceso al cliente si pasa la restricción de host o introduce un usuario y contraseña válidos. Esto puede usarse para restringir con contraseña el acceso a un area, pero para permitir acceso a los clientes desde unas direcciones en particular sin pedirles contraseña.</p>
+
+    <p>Por ejemplo, si quisiera dejar entrar a personas de su red con acceso sin restricciones a una parte de su website, pero requiere que gente de fuera de su red facilite una contraseña, podría usar una configuración similar a la siguiente:</p>
+
+    <highlight language="config">
+Require valid-user
+Allow from 192.168.1
+Satisfy Any
+    </highlight>
+
+    <p>Otro uso típico de la directiva <directive>Satisfy</directive> es para suavizar las restricciones de acceso a un subdirectorio:</p>
+
+    <highlight language="config">
+&lt;Directory "/var/www/private"&gt;
+    Require valid-user
+&lt;/Directory&gt;
+
+&lt;Directory "/var/www/private/public"&gt;
+    Allow from all
+    Satisfy Any
+&lt;/Directory&gt;
+    </highlight>
+
+    <p>En el ejemplo de arriba, se requiere autenticación para el directorio <code>/var/www/private</code>, pero no se requerirá para el directorio <code>/var/www/private/public</code>.</p>
+
+    <p>Desde la versión 2.0.51 las directivas <directive>Satisfy</directive> pueden restringirse a métodos específicos con secciones <directive module="core" type="section">Limit</directive> y <directive module="core" type="section"
+    >LimitExcept</directive>.</p>
+
+    <note> <title>Fusión de secciones de configuración.</title>
+      <p>Cuando se usa cualquier directiva facilitada por este módulo en una nueva sección de configuración, no se heredará ninguna directiva facilitada por este módulo en secciones anteriores de configuración.</p>
+    </note>
+
+</usage>
+   <seealso><directive module="mod_access_compat">Allow</directive></seealso>
+   <seealso><directive module="mod_authz_core">Require</directive></seealso>
+</directivesynopsis>
+
+</modulesynopsis>
index 8fdd0493ef54118665b0143ec34216cf5df5894c..939e6d971c4996a35628db1a34fe8045f0c8533c 100644 (file)
@@ -8,6 +8,7 @@
 
   <variants>
     <variant>en</variant>
+    <variant>es</variant>
     <variant>fr</variant>
     <variant outdated="yes">ja</variant>
   </variants>
index 65b9912fa940e14f438413a2bebc2f632fbac56e..952f3ee9ec489acb3b4f96eb1f125f62cc2fe400 100644 (file)
@@ -8,6 +8,10 @@ URI: mod_actions.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: mod_actions.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
+
 URI: mod_actions.html.fr
 Content-Language: fr
 Content-type: text/html; charset=ISO-8859-1
index 73f4dc11410f82ba8cda449345e7f0ddeb4bc862..382b87306ea2737d61d2e11d45b9d64b5e17e4f4 100644 (file)
@@ -28,6 +28,7 @@
 <div class="toplang">
 <p><span>Verfügbare Sprachen: </span><a href="../de/mod/mod_actions.html" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 <div class="bottomlang">
 <p><span>Verfügbare Sprachen: </span><a href="../de/mod/mod_actions.html" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
index b74a67cf8e4012bf670760fae1327586ad37f593..f57e5865a869459803c40bd1df5dfeb548833d46 100644 (file)
@@ -28,6 +28,7 @@
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
@@ -154,6 +155,7 @@ Script PUT /~bob/put.cgi</pre>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
diff --git a/docs/manual/mod/mod_actions.html.es b/docs/manual/mod/mod_actions.html.es
new file mode 100644 (file)
index 0000000..1623081
--- /dev/null
@@ -0,0 +1,156 @@
+<?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>mod_actions - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_actions</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Ejecuta scripts CGI basándose en el tipo de medio o método de la petición.</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>actions_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_actions.c</td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+    <p>Este módulo tiene dos directivas. La directiva <code class="directive"><a href="#action">Action</a></code> le permite ejecutar scripts CGI siempre que se solicite un fichero con cierto  <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">tipo de contenido MIME</a>. La direcitiva 
+    <code class="directive"><a href="#script">Script</a></code> le permite ejecutar scripts CGI siempre que se use un método concreto en una petición. Esto hace mucho más fácil ejecutar scripts para procesar ficheros.</p>
+</div>
+<div id="quickview"><h3 class="directives">Directivas</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#action">Action</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#script">Script</a></li>
+</ul>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_actions">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_actions">Report a bug</a></li></ul><h3>Consulte también</h3>
+<ul class="seealso">
+<li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li>
+<li><a href="../howto/cgi.html">Contenido Dinámico con CGI</a></li>
+<li><a href="../handler.html">Uso de Handler de Apache httpd</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="directive-section"><h2><a name="Action" id="Action">Action</a> <a name="action" id="action">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Activa un script CGI para un handler concreto o content-type</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>Action <var>action-type</var> <var>cgi-script</var> [virtual]</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_actions</td></tr>
+</table>
+    <p>Esta directiva añade una acción, que activará <var>cgi-script</var> cuando <var>action-type</var> se activa por una petición. El <var>cgi-script</var> es el path-de-URL a un recurso designado como un script CGI script usando 
+    <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> o 
+    <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>. El 
+    <var>action-type</var> puede ser un <a href="../handler.html">handler</a> o un <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">tipo de contenido MIME</a>. Envía la URL y el path al fichero del documento solicitado usando las variables de entorno estándar de CGI <code>PATH_INFO</code> y <code>PATH_TRANSLATED</code>. El handler que se usa para esta petición en particular se envía usando la variable <code>REDIRECT_HANDLER</code>.</p>
+
+    <div class="example"><h3>Ejemplo: tipo MIME</h3><pre class="prettyprint lang-config"># Petición de ficheros de un tipo concreto de contenido MIME:
+Action image/gif /cgi-bin/images.cgi</pre>
+</div>
+
+    <p>En este ejemplo, las peticiones de ficheros con contenido tipo MIME <code>image/gif</code> serán gestionadas por el script cgi especificado en <code>/cgi-bin/images.cgi</code>.</p>
+
+    <div class="example"><h3>Ejemplo: Extensión de fichero</h3><pre class="prettyprint lang-config"># Ficheros con una extensión concreta
+AddHandler my-file-type .xyz
+Action my-file-type /cgi-bin/program.cgi</pre>
+</div>
+    <p>En este ejemplo, las peticiones a ficheros con una extensión de fichero
+    <code>.xyz</code> serán gestionadas por el script cgi especificado en
+    <code>/cgi-bin/program.cgi</code>.</p>
+
+    <p>El modificador opcional <code>virtual</code> desactiva la comprobación para saber si el fichero realmente existe. Esto es útil, por ejemplo, si quiere usar la directiva <code class="directive">Action</code> en ubicaciones virtuales.</p>
+
+    <pre class="prettyprint lang-config">&lt;Location "/news"&gt;
+    SetHandler news-handler
+    Action news-handler /cgi-bin/news.cgi virtual
+&lt;/Location&gt;</pre>
+
+
+<h3>Consulte también</h3>
+<ul>
+<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Script" id="Script">Script</a> <a name="script" id="script">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Activa un script CGI para peticiones con un método concreto.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>Script <var>method</var> <var>cgi-script</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_actions</td></tr>
+</table>
+    <p>Esta directiva añade una acción, que activará <var>cgi-script</var> cuando se solicita un fichero usando un método especificado en el parámetro <var>method</var>. El <var>cgi-script</var> es el path-de-URL al recurso que ha sido designado como un script CGI usando <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> o <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>. La URL y la ruta al fichero del documento solicitado se envía usando las variables de entorno estándar de CGI <code>PATH_INFO</code> y <code>PATH_TRANSLATED</code>.</p>
+
+    <div class="note">
+      Se puede usar cualquier nombre de método arbitrario. <strong>Los nombres de Método son sensibles a mayúsculas</strong>, así que <code>Script PUT</code> and <code>Script put</code> tienen dos efectos totalmente diferentes.
+    </div>
+
+    <p>Tenga en cuenta que el comando <code class="directive">Script</code> solo define acciones por defecto. Si se llama a un script CGI, o algún otro recurso que esté capacitado para gestionar el método solicitado internamente, éste se utilizará. También tenga en cuenta que solo se invocará <code class="directive">Script</code> con un método <code>GET</code> si hay parámetros de query string presentes en la petición (<em>p.e.</em>, foo.html?hi). Si no, la petición se procesará normalmente.</p>
+
+    <pre class="prettyprint lang-config"># todas las peticiones GET van aquí
+Script GET /cgi-bin/search
+
+# Un handler PUT de CGI
+Script PUT /~bob/put.cgi</pre>
+
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_actions.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 2017 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/quickreference.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
index 5c018035d6bfb476f1a5c450fb5417265f01c633..1fc92affd48d9c6cc82d9f54085f38085d7a7487 100644 (file)
@@ -28,6 +28,7 @@
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
@@ -164,6 +165,7 @@ Script PUT /~bob/put.cgi</pre>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
index 81032a5f767ef9d8aab0b441dcf6bd6917f08abd..09dba9d15973f7937cba3f12760dabae9e2780c8 100644 (file)
@@ -28,6 +28,7 @@
 <div class="toplang">
 <p><span>翻訳済み言語: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
@@ -175,6 +176,7 @@ Apache 2.1 で導入されました</td></tr>
 <div class="bottomlang">
 <p><span>翻訳済み言語: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
index 617e7500094c8080dd6a7854a9fc20e2c029a823..ed63126ac2a49552492b5ff80993a22cae8a8e67 100644 (file)
@@ -28,6 +28,7 @@
 <div class="toplang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" title="Korean">&nbsp;ko&nbsp;</a></p>
 <div class="bottomlang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../de/mod/mod_actions.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
 <a href="../en/mod/mod_actions.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_actions.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_actions.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_actions.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_actions.html" title="Korean">&nbsp;ko&nbsp;</a></p>
diff --git a/docs/manual/mod/mod_actions.xml.es b/docs/manual/mod/mod_actions.xml.es
new file mode 100644 (file)
index 0000000..393af41
--- /dev/null
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1673892 -->
+<!-- Spanish Translation: Daniel Ferradal <dferradal@apache.org> -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_actions.xml.meta">
+
+<name>mod_actions</name>
+
+<description>Ejecuta scripts CGI basándose en el tipo de medio o método de la petición.</description>
+
+<status>Base</status>
+<sourcefile>mod_actions.c</sourcefile>
+<identifier>actions_module</identifier>
+
+<summary>
+    <p>Este módulo tiene dos directivas. La directiva <directive
+    module="mod_actions">Action</directive> le permite ejecutar scripts CGI siempre que se solicite un fichero con cierto  <glossary
+    ref="mime-type">tipo de contenido MIME</glossary>. La direcitiva 
+    <directive module="mod_actions">Script</directive> le permite ejecutar scripts CGI siempre que se use un método concreto en una petición. Esto hace mucho más fácil ejecutar scripts para procesar ficheros.</p>
+</summary>
+
+<seealso><module>mod_cgi</module></seealso>
+<seealso><a href="../howto/cgi.html">Contenido Dinámico con CGI</a></seealso>
+<seealso><a href="../handler.html">Uso de Handler de Apache httpd</a></seealso>
+
+<directivesynopsis>
+<name>Action</name>
+<description>Activa un script CGI para un handler concreto o content-type</description>
+<syntax>Action <var>action-type</var> <var>cgi-script</var> [virtual]</syntax>
+<contextlist>
+<context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>FileInfo</override>
+
+<usage>
+    <p>Esta directiva añade una acción, que activará <var>cgi-script</var> cuando <var>action-type</var> se activa por una petición. El <var>cgi-script</var> es el path-de-URL a un recurso designado como un script CGI script usando 
+    <directive module="mod_alias">ScriptAlias</directive> o 
+    <directive module="mod_mime">AddHandler</directive>. El 
+    <var>action-type</var> puede ser un <a href="../handler.html">handler</a> o un <glossary ref="mime-type">tipo de contenido MIME</glossary>. Envía la URL y el path al fichero del documento solicitado usando las variables de entorno estándar de CGI <code>PATH_INFO</code> y <code>PATH_TRANSLATED</code>. El handler que se usa para esta petición en particular se envía usando la variable <code>REDIRECT_HANDLER</code>.</p>
+
+    <example><title>Ejemplo: tipo MIME</title>
+    <highlight language="config">
+# Petición de ficheros de un tipo concreto de contenido MIME:
+Action image/gif /cgi-bin/images.cgi
+    </highlight>
+    </example>
+
+    <p>En este ejemplo, las peticiones de ficheros con contenido tipo MIME <code>image/gif</code> serán gestionadas por el script cgi especificado en <code>/cgi-bin/images.cgi</code>.</p>
+
+    <example>
+        <title>Ejemplo: Extensión de fichero</title>
+    <highlight language="config">
+# Ficheros con una extensión concreta
+AddHandler my-file-type .xyz
+Action my-file-type /cgi-bin/program.cgi
+    </highlight>
+    </example>
+    <p>En este ejemplo, las peticiones a ficheros con una extensión de fichero
+    <code>.xyz</code> serán gestionadas por el script cgi especificado en
+    <code>/cgi-bin/program.cgi</code>.</p>
+
+    <p>El modificador opcional <code>virtual</code> desactiva la comprobación para saber si el fichero realmente existe. Esto es útil, por ejemplo, si quiere usar la directiva <directive>Action</directive> en ubicaciones virtuales.</p>
+
+    <highlight language="config">
+&lt;Location "/news"&gt;
+    SetHandler news-handler
+    Action news-handler /cgi-bin/news.cgi virtual
+&lt;/Location&gt;
+    </highlight>
+</usage>
+
+<seealso><directive module="mod_mime">AddHandler</directive></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Script</name>
+<description>Activa un script CGI para peticiones con un método concreto.</description>
+<syntax>Script <var>method</var> <var>cgi-script</var></syntax>
+<contextlist>
+<context>server config</context><context>virtual host</context>
+<context>directory</context></contextlist>
+<usage>
+    <p>Esta directiva añade una acción, que activará <var>cgi-script</var> cuando se solicita un fichero usando un método especificado en el parámetro <var>method</var>. El <var>cgi-script</var> es el path-de-URL al recurso que ha sido designado como un script CGI usando <directive
+    module="mod_alias">ScriptAlias</directive> o <directive
+    module="mod_mime">AddHandler</directive>. La URL y la ruta al fichero del documento solicitado se envía usando las variables de entorno estándar de CGI <code>PATH_INFO</code> y <code>PATH_TRANSLATED</code>.</p>
+
+    <note>
+      Se puede usar cualquier nombre de método arbitrario. <strong>Los nombres de Método son sensibles a mayúsculas</strong>, así que <code>Script PUT</code> and <code>Script put</code> tienen dos efectos totalmente diferentes.
+    </note>
+
+    <p>Tenga en cuenta que el comando <directive>Script</directive> solo define acciones por defecto. Si se llama a un script CGI, o algún otro recurso que esté capacitado para gestionar el método solicitado internamente, éste se utilizará. También tenga en cuenta que solo se invocará <directive>Script</directive> con un método <code>GET</code> si hay parámetros de query string presentes en la petición (<em>p.e.</em>, foo.html?hi). Si no, la petición se procesará normalmente.</p>
+
+    <highlight language="config">
+# todas las peticiones GET van aquí
+Script GET /cgi-bin/search
+
+# Un handler PUT de CGI
+Script PUT /~bob/put.cgi
+    </highlight>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
\ No newline at end of file
index 21a3be67ab926f521a7860ab9a6d9e719d309464..498c1d865fc106e908a469a956cded6ffbe584cf 100644 (file)
@@ -9,6 +9,7 @@
   <variants>
     <variant outdated="yes">de</variant>
     <variant>en</variant>
+    <variant>es</variant>
     <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
index 7bf1274e07c13d43fd47c8eb7696b0af0a3571a9..450b6694d4fbfe5668d9bcfe417b00466c4f7915 100644 (file)
@@ -4,6 +4,10 @@ URI: mod_alias.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: mod_alias.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
+
 URI: mod_alias.html.fr
 Content-Language: fr
 Content-type: text/html; charset=ISO-8859-1
index 8a239135a7d3e041f77d44f5108617ce14ff9731..3bbf0b28df782c86f76d93ba88b1385ba1dd3033 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache Module mod_alias</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
@@ -310,8 +311,11 @@ a different URL</td></tr>
 
     <p>The new <em>URL</em> may be either an absolute URL beginning
     with a scheme and hostname, or a URL-path beginning with a slash.
-    In this latter case the scheme and hostname of the current server will
-    be added.</p>
+    In this latter case the scheme and hostname of the current server
+    will be added if you have 
+    <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> set to on, 
+    otherwise the hostname will be replaced with the requested Host 
+    header.</p>
 
     <p>Then any request beginning with <em>URL-path</em> will return a
     redirect request to the client at the location of the target
@@ -604,6 +608,7 @@ and designates the target as a CGI script</td></tr>
 </div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_alias.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
diff --git a/docs/manual/mod/mod_alias.html.es b/docs/manual/mod/mod_alias.html.es
new file mode 100644 (file)
index 0000000..d0ceac9
--- /dev/null
@@ -0,0 +1,552 @@
+<?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>mod_alias - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_alias</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
+<a href="../tr/mod/mod_alias.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Facilita el mapeo a diferentes partes del sistema de ficheros del host en el árbol de documentos y la redirección de URLs
+</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>alias_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_alias.c</td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+    <p>Las directivas facilitadas por este módulo permiten la manipulación y control de URLs según llegan las peticiones al servidor. Las directivas
+    <code class="directive"><a href="#alias">Alias</a></code> y 
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> se usan para mapear URLs con rutas del sistema de ficheros. Esto permite que se sirva contenido que no está directamente dentro del 
+    <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> como si fuera parte de éste. La directiva <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> tiene además el efecto de hacer que el directorio de destino contenga solo scripts CGI.</p>
+
+    <p>Las directivas <code class="directive"><a href="#redirect">Redirect</a></code> se usan para indicar a los clientes que hagan una nueva petición con una URL distinta. Se usan a menudo cuando el recurso se ha movido a una nueva ubicación.</p>
+
+    <p>Cuando se usan las directivas <code class="directive"><a href="#alias">Alias</a></code>,
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> y
+    <code class="directive"><a href="#redirect">Redirect</a></code> dentro de una sección 
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    o <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, se puede usar
+    <a href="../expr.html">sintaxis de expresión</a> para manipuilar la ruta de destino o URL.
+    </p>
+
+    <p><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code> se ha diseñado para gestionar tareas sencillas de manipulación de URL. Para tareas más complicadas como la manipulación de "query string", use las herramientas facilitadas por
+    <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
+
+</div>
+<div id="quickview"><h3>Temas</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#order">Orden de Procesamiento</a></li>
+</ul><h3 class="directives">Directivas</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#alias">Alias</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#aliasmatch">AliasMatch</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirect</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#redirectmatch">RedirectMatch</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#redirectpermanent">RedirectPermanent</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#redirecttemp">RedirectTemp</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#scriptalias">ScriptAlias</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#scriptaliasmatch">ScriptAliasMatch</a></li>
+</ul>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_alias">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_alias">Report a bug</a></li></ul><h3>Consulte también</h3>
+<ul class="seealso">
+<li><code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code></li>
+<li><a href="../urlmapping.html">Mapeo de 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="order" id="order">Orden de Procesamiento</a></h2>
+
+    <p>Aliases y Redirects que se dan en diferentes contextos se procesan como otras directivas según las <a href="../sections.html#mergin">reglas de fusión</a> estándar.  Pero cuando se dan múltiples 
+    Aliases o Redirects en el mismo contexto (por ejemplo, en la misma sección 
+    <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>)
+    entonces se procesan en un orden concreto.</p>
+
+    <p>En primer lugar, todos los Redirect se procesan antes que los Aliases, y por tanto una solicitud que coincida con un 
+    <code class="directive"><a href="#redirect">Redirect</a></code> o 
+    <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code> nunca aplicará un Alias. En segundo lugar, los Aliases y Redirect se procesan en el orden en el que aparecen en los ficheros de configuración, y la primera coincidencia es la que tiene prioridad.</p>
+
+    <p>Por esta razón, cuando dos o más de estas directivas se aplican a la misma sub-ruta, debe definir la ruta más específica primero para que todas las directivas tengan efecto. Por ejemplo, la siguiente configuración funcionará como se espera:</p>
+
+    <pre class="prettyprint lang-config">Alias "/foo/bar" "/baz"
+Alias "/foo" "/gaq"</pre>
+
+
+    <p>Pero si estas dos directivas estuvieran en orden inverso, el 
+    <code class="directive"><a href="#alias">Alias</a></code>
+    <code>/foo</code> siempre se aplicaría antes que el 
+    <code class="directive"><a href="#alias">Alias</a></code> <code>/foo/bar</code>, así que se obviaría la última directiva.</p>
+
+    <p>Cuando las directivas <code class="directive"><a href="#alias">Alias</a></code>,
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> y
+    <code class="directive"><a href="#redirect">Redirect</a></code> se usan dentro de una sección
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    o <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, estas directivas tendrán prioridad sobre cualquier directiva 
+    <code class="directive"><a href="#alias">Alias</a></code>, 
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> y
+    <code class="directive"><a href="#redirect">Redirect</a></code> definidas globalmente.
+    </p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Alias" id="Alias">Alias</a> <a name="alias" id="alias">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Mapea URLs a rutas del sistema de ficheros</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>Alias [<var>URL-path</var>]
+<var>file-path</var>|<var>directory-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+
+    <p>La directiva <code class="directive">Alias</code> permite que se almacenen documentos en el sistema de ficheros local en rutas distintas de las que están bajo
+    <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. URLs con una ruta 
+    (%-decodificada) que comienzan con <var>URL-path</var> serán mapeadas a ficheros locales que comiencen con
+    <var>directory-path</var>.  El
+    <var>URL-path</var> es sensible a mayúsculas, incluso en sistemas de ficheros que no lo son.</p>
+
+    <pre class="prettyprint lang-config">Alias "/image" "/ftp/pub/image"</pre>
+
+
+    <p>Una petición para <code>http://example.com/image/foo.gif</code> haría que el servidor respondiera con el fichero 
+    <code>/ftp/pub/image/foo.gif</code>. Solo se comparan segmentos de ruta completos, así que el alias de más arriba no valdría para la petición 
+    <code>http://example.com/imagefoo.gif</code>. Para ejemplos más complejos de expresiones regulares, vea la directiva 
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code>.</p>
+
+    <p>Tenga en cuenta que si incluye una / final en el 
+    <var>URL-path</var> entonces el servidor requerirá una / final para poder extender el alias. Es decir, si usa</p>
+
+    <pre class="prettyprint lang-config">Alias "/icons/" "/usr/local/apache/icons/"</pre>
+
+
+    <p>entonces la URL <code>/icons</code> no coincidirá con el alias, porque no tiene la / final. De la misma manera, si omite la barra en el
+    <var>URL-path</var> también debe omitirla del
+    <var>file-path</var>.</p>
+
+    <p>Considere que seguramente tenga que especificar secciones de  
+    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> adicionales que cubran los <em>destinos</em> de los aliases. Las directivas Alias se comprueban antes que las de 
+    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, así que solo los destinos de los alias se ven afectados.
+    (Sin embargo tenga en cuenta que las secciones 
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    se examinan una vez antes de que los alias tengan efecto, así que se aplicarán.)</p>
+
+    <p>En particular, si está creando un <code>Alias</code> a un directorio fuera de su 
+    <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>, probablemente tenga que darle permisos de manera explícita al directorio de destino.</p>
+
+    <pre class="prettyprint lang-config">Alias "/image" "/ftp/pub/image"
+&lt;Directory "/ftp/pub/image"&gt;
+    Require all granted
+&lt;/Directory&gt;</pre>
+
+
+    <p>Cualquier número de barras en el parámetro <var>URL-path</var> coincide con el mismo número de barras en el URL-path solicitado.</p>
+
+    <p>Si la directiva <code class="directive">Alias</code> se usa dentro de una sección
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    o <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> el URL-path se omite, y el file-path se interpreta usando <a href="../expr.html">sintáxis de expresión</a>.<br />
+    Esta sintáxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <pre class="prettyprint lang-config">&lt;Location "/image"&gt;
+    Alias "/ftp/pub/image"
+&lt;/Location&gt;
+&lt;LocationMatch "/error/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    Alias "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html"
+&lt;/LocationMatch&gt;</pre>
+
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="AliasMatch" id="AliasMatch">AliasMatch</a> <a name="aliasmatch" id="aliasmatch">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Mapea URLs a ubicaciones del sistema de ficheros usando expresiones regulares</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>AliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>Esta directiva es equivalente a 
+    <code class="directive"><a href="#alias">Alias</a></code>, pero hace uso de 
+    <a class="glossarylink" href="../glossary.html#regex" title="ver glosario">expresiones regulares</a>,
+    en lugar de comparaciones simples de prefijo. La expresión 
+    regular facilitada se compara con el URL-path, y si coincide, 
+    el servidor sustituye cualquier coincidencia entre paréntesis con 
+    la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para activar el directorio <code>/icons</code>, uno podría usar:
+    </p>
+
+    <pre class="prettyprint lang-config">AliasMatch "^/icons(/|$)(.*)" "/usr/local/apache/icons$1$2"</pre>
+
+
+    <p>Puede usar toda la capacidad que le permiten las
+    <a class="glossarylink" href="../glossary.html#regex" title="ver glosario">expresiones regulares</a>. Por ejemplo, es posible construir un alias con comprobación insensible a mayúsculas del URL-path:</p>
+
+    <pre class="prettyprint lang-config">AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"</pre>
+
+
+    <p>Una sutil diferencia entre 
+    <code class="directive"><a href="#alias">Alias</a></code>
+    y <code class="directive"><a href="#aliasmatch">AliasMatch</a></code> es que
+    <code class="directive"><a href="#alias">Alias</a></code> copiará automáticamente cualquier parte adicional de la URI, pasada la parte que coincide, al final de la ruta del fichero en el parámetro de la derecha, mientras que
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code> no lo hará. Esto significa en casi todos los casos, querrá que las expresiones regulares concuerden con la URI solicitada al completo desde el comienzo al final, y usar la sustitución del parámetro a la derecha.</p>
+
+    <p>En otras palabras, cambiar
+    <code class="directive"><a href="#alias">Alias</a></code> a
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code> no tendrá el mismo resultado. Como mínimo, tendrá que añadir un <code>^</code> al comienzo de la expresión regular, añadir un <code>(.*)$</code> al final y añadir 
+    <code>$1</code> al final del reemplazo.</p>
+
+    <p>Por ejemplo, supongamos que quiere reemplazar esto con AliasMatch:</p>
+
+    <pre class="prettyprint lang-config">Alias "/image/" "/ftp/pub/image/"</pre>
+
+
+    <p>Esto no es equivalente - ¡no haga esto! Esto enviará todas las peticiones que tengan /image/ en cualquier parte de la petición y la pondrá en /ftp/pub/image/:</p>
+
+    <pre class="prettyprint lang-config">AliasMatch "/image/" "/ftp/pub/image/"</pre>
+
+
+    <p>Esto es lo que necesita para que tenga el mismo efecto:</p>
+
+    <pre class="prettyprint lang-config">AliasMatch "^/image/(.*)$" "/ftp/pub/image/$1"</pre>
+
+
+    <p>Por supuesto, no hay ningún motivo para usar
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code>
+    donde <code class="directive"><a href="#alias">Alias</a></code> funcionaría.  
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code> le permite hacer cosas más complicadas. Por ejemplo, puede servir diferentes tipos de ficheros desde diferentes directorios:</p>
+
+    <pre class="prettyprint lang-config">AliasMatch "^/image/(.*)\.jpg$" "/files/jpg.images/$1.jpg"
+AliasMatch "^/image/(.*)\.gif$" "/files/gif.images/$1.gif"</pre>
+
+
+    <p>Si se usan multiples barras iniciales en la URL solicitada, el servidor las descarta antes de que las directivas de este módulo las compare con el URL-path solicitado.
+    </p>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Redirect" id="Redirect">Redirect</a> <a name="redirect" id="redirect">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Envía una redirección externa indicando al cliente que solicite una URL distinta</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>Redirect [<var>status</var>] [<var>URL-path</var>]
+<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>La directiva <code class="directive">Redirect</code> mapea una URL antigua a una nueva indicando al cliente que solicite el recurso en otra ubicación.</p>
+
+    <p>El antiguo <em>URL-path</em> es una ruta (%-decodificada) que comienza con una barra. No se permite una ruta relativa.</p>
+
+    <p>La nueva <em>URL</em> puede ser una URL absoluta que comienza con esquema y nombre de host, or un URL-path que comienza con una barra (/). En este último caso se añadirán el esquema y nombre de host del servidor actual si tiene <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> configurado a on, si no el nombre de host se reemplazará por la cabecera Host solicitada.</p>
+
+    <p>Entonces cualquier petición que comience con <em>URL-path</em> devolverá una solicitud de redirección al cliente hacia la ubicación de la <em>URL</em> de destino. Información adicional de la ruta pasado el <em>URL-path</em> que coincide se añadirá al final de la URL de destino.</p>
+
+    <pre class="prettyprint lang-config"># Redirect hacia una URL en un host diferente
+Redirect "/service" "http://foo2.example.com/service"
+
+# Redirect hacia una URL en el mismo host
+Redirect "/one" "/two"</pre>
+
+
+    <p>Si el cliente solicita <code>http://example.com/service/foo.txt</code>, se le indicará que acceda a 
+    <code>http://foo2.example.com/service/foo.txt</code> en su lugar. Esto incluye solicitudes con parámetros 
+    <code>GET</code>, tales como
+    <code>http://example.com/service/foo.pl?q=23&amp;a=42</code>,que será
+    redirigido a
+    <code>http://foo2.example.com/service/foo.pl?q=23&amp;a=42</code>.
+    Tenga en cuenta que los <code>POST</code> serán descartados.<br />
+    Solo se comparan segmentos completos de ruta, así que el ejemplo de más arriba no coincidiría con una petición a
+    <code>http://example.com/servicefoo.txt</code>. Para comparaciones más complejas usando la 
+    <a href="../expr.html">sintáxis de expresión</a>, omita el argumento de URL-path tal y como se indica más abajo. Alternativamente, para coincidencias usando expresiones regulares, vea la directiva 
+    <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code>.</p>
+
+
+    <div class="note"><h3>Nota</h3>
+    <p>Las directivas <code class="directive">Redirect</code> tienen priodidad sobre directivas 
+    <code class="directive"><a href="#alias">Alias</a></code> y 
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>, independientemente de su orden en el fichero de configuración. Directivas 
+    <code class="directive">Redirect</code> 
+    dentro de Location tiene prioridad sobre directivas 
+    <code class="directive">Redirect</code> y 
+    <code class="directive"><a href="#alias">Alias</a></code> con un <var>URL-path</var>.</p>
+    </div>
+
+    <p>Si no se indica un parámetro <var>status</var>, la redirección será
+    "temporal" (estado HTTP 302). Esto le indica al cliente que el recurso se ha movido temporalmente. El parámetro <var>status</var> se puede usar para devolver otros códigos de estado HTTP:</p>
+
+    <dl>
+      <dt>permanent</dt>
+
+      <dd>Devuelve una estado de redirección permanente (301) indicando que el recurso se ha movido de forma permanente.</dd>
+
+      <dt>temp</dt>
+
+      <dd>Devuelve un estado de redirección temporal (302). Este es el valor por defecto.</dd>
+
+      <dt>seeother</dt>
+
+      <dd>Devuelve un estado "See Other" (303) indicando que el recurso ha sido sustituido.</dd>
+
+      <dt>gone</dt>
+
+      <dd>Devuelve un estado "Gone" (410) indicando que el recurso ha sido eliminado de forma permanente. Cuando se usa este estado, el parámetro 
+      <var>URL</var> debería omitirse.</dd>
+    </dl>
+
+    <p>Se pueden devolver otros códigos de estado indicando el código numérico del estado en el valor de <var>status</var>. Si el estado está entre 300 y 399, el parámetro <var>URL</var> debe estar presente. Si el estado 
+    <em>no</em> está entre 300 and 399, el parámetro <var>URL</var> debe ser omitido. El estado debe ser un código de estado válido HTTP, conocido por el Servidor Apache HTTP (vea la función <code>send_error_response</code> en http_protocol.c).</p>
+
+    <pre class="prettyprint lang-config">Redirect permanent "/one" "http://example.com/two"
+Redirect 303 "/three" "http://example.com/other"</pre>
+
+
+    <p>Si se usa la directiva <code class="directive">Redirect</code> dentro de una sección
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    o <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
+    sin el <var>URL-path</var>, entonces el parámetro <var>URL</var> será interpretado
+    usando <a href="../expr.html">sintáxis de expresión</a>.<br />
+    Esta sintáxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <pre class="prettyprint lang-config">&lt;Location "/one"&gt;
+    Redirect permanent "http://example.com/two"
+&lt;/Location&gt;
+&lt;Location "/three"&gt;
+    Redirect 303 "http://example.com/other"
+&lt;/Location&gt;
+&lt;LocationMatch "/error/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html"
+&lt;/LocationMatch&gt;</pre>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RedirectMatch" id="RedirectMatch">RedirectMatch</a> <a name="redirectmatch" id="redirectmatch">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Envía una redirección externa basada en una coincidencia de expresión regular con la URL actual
+</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>Esta directiva es equivalente a 
+    <code class="directive"><a href="#redirect">Redirect</a></code>, pero hace uso de 
+    <a class="glossarylink" href="../glossary.html#regex" title="ver glosario">expresiones regulares</a>,
+    en lugar de comparaciones simple de prefijo. La expresión 
+    regular facilitada se compara con el URL-path, y si coincide, 
+    el servidor sustituye cualquier coincidencia entre paréntesis con 
+    la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para redirigir todos los ficheros GIF al mismo nombre pero del tipo JPEG en otro servidor, uno podría usar:</p>
+
+    <pre class="prettyprint lang-config">RedirectMatch "(.*)\.gif$" "http://other.example.com$1.jpg"</pre>
+
+
+    <p>Las consideraciones relacionadas con las diferencias entre
+    <code class="directive"><a href="#alias">Alias</a></code> y
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code>
+    también aplican a las diferencias entre
+    <code class="directive"><a href="#redirect">Redirect</a></code> y
+    <code class="directive"><a href="#redirectmatch">RedirectMatch</a></code>.
+    Vea <code class="directive"><a href="#aliasmatch">AliasMatch</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="directive-section"><h2><a name="RedirectPermanent" id="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent" id="redirectpermanent">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Envía una redirección externa permanente indicando al cliente que solicite una URL diferente</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>RedirectPermanent <var>URL-path</var> <var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>Esta directiva hace saber al cliente que el Redirect es permanente
+    (estado 301). Exactamente equivalente a 
+    <code>Redirect permanent</code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RedirectTemp" id="RedirectTemp">RedirectTemp</a> <a name="redirecttemp" id="redirecttemp">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Envía una redirección externa temporal indicando al cliente que solicite una URL diferente</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>RedirectTemp <var>URL-path</var> <var>URL</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Anula:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>Esta directiva le hace saber al cliente que el Redirect es solo temporal (estado 302). Exactamente equivalente a 
+    <code>Redirect temp</code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptAlias" id="ScriptAlias">ScriptAlias</a> <a name="scriptalias" id="scriptalias">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Mapea una URL a una ubicación del sistema de ficheros y designa el destino como un script CGI</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>ScriptAlias [<var>URL-path</var>]
+<var>file-path</var>|<var>directory-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>La directiva <code class="directive">ScriptAlias</code> tiene el mismo comportamiento que la directiva <code class="directive"><a href="#alias">Alias</a></code>, excepto que además indica el directorio de destino conteniendo scripts CGI que serán procesados por el handler cgi-script de 
+    <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>. URLs con una ruta sensible a mayúsculas y (%-decodificadas) que comienzan con <var>URL-path</var> serán
+    mapeadas a scripts que comiencen con el segundo parámetro, que es un nombre de ruta completo en el sistema de ficheros local.</p>
+
+    <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/web/cgi-bin/"</pre>
+
+
+    <p>Una petición para <code>http://example.com/cgi-bin/foo</code> haría que el servidor ejecute el script <code>/web/cgi-bin/foo</code>. Esta configuración es esencialmente equivalente a:</p>
+    <pre class="prettyprint lang-config">Alias "/cgi-bin/" "/web/cgi-bin/"
+&lt;Location "/cgi-bin"&gt;
+    SetHandler cgi-script
+    Options +ExecCGI
+&lt;/Location&gt;</pre>
+
+
+    <p>También puede usarse <code class="directive">ScriptAlias</code>junto con un script o handler que usted tenga. Por ejemplo:</p>
+
+    <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/web/cgi-handler.pl"</pre>
+
+
+    <p>En este escenario todos los ficheros solicitados en 
+    <code>/cgi-bin/</code> serán gestionados por el fichero que usted ha configurado, esto permite que use su propio handler personalizado. Puede que quiera usar esto como un wrapper de CGI y así pueda añadir contenido, o alguna otra acción a medida.</p>
+
+    <div class="warning">Es más seguro evitar que se coloquen scripts CGI bajo el <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> para que no se revele de manera accidental el código fuente si la configuración se vuelve a cambiar alguna vez. El <code class="directive">ScriptAlias</code> hace esto fácil mapeando una URL y designando CGI scripts al mismo tiempo. Si decide colocar sus scripts CGI en un directorio que ya es accesible desde la web, no use
+    <code class="directive">ScriptAlias</code>. En su lugar, use <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>, y <code class="directive"><a href="../mod/core.html#options">Options</a></code> como en:
+
+    <pre class="prettyprint lang-config">&lt;Directory "/usr/local/apache2/htdocs/cgi-bin"&gt;
+    SetHandler cgi-script
+    Options ExecCGI
+&lt;/Directory&gt;</pre>
+
+
+    Esto es necesario puesto que multiples <var>URL-paths</var> pueden mapear a la misma ubicación del sistema de ficheros, potencialmente saltándose el
+    <code class="directive">ScriptAlias</code> y revelando el código fuente de los scripts CGI si no están restringidos por una sección 
+    <code class="directive"><a href="../mod/core.html#directory">Directory</a></code>.
+    </div>
+
+    <p>Si se usa la directiva 
+    <code class="directive">ScriptAlias</code> dentro de una sección
+    <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>
+    o <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
+    con el URL-path omitido, entonces el parámetro URL será interpretando usando
+    <a href="../expr.html">sintaxis de expresión</a>.<br />
+    Esta sintaxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <pre class="prettyprint lang-config">&lt;Location "/cgi-bin"&gt;
+    ScriptAlias "/web/cgi-bin/"
+&lt;/Location&gt;
+&lt;LocationMatch "/cgi-bin/errors/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    ScriptAlias "/web/cgi-bin/errors/%{env:MATCH_NUMBER}.cgi"
+&lt;/LocationMatch&gt;</pre>
+
+
+
+<h3>Consulte también</h3>
+<ul>
+<li><a href="../howto/cgi.html">Tutorial CGI</a></li>
+</ul>
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ScriptAliasMatch" id="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch" id="scriptaliasmatch">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Mapea una URL a una ubicación del sistema de ficheros usando 
+una expresión regular y designa el destino como un script CGI</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_alias</td></tr>
+</table>
+    <p>Esta directiva es equivalente a 
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code>, pero hace uso de
+    <a class="glossarylink" href="../glossary.html#regex" title="ver glosario">expresiones regulares</a>,
+    en lugar de comparaciones simples de prefijo. La expresión regular facilitada se compara con el URL-path, y si coincide, el servidor sustituye cualquier coincidencia entre paréntesis con la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para activar el estándar 
+    <code>/cgi-bin</code>, uno podría usar:</p>
+
+    <pre class="prettyprint lang-config">ScriptAliasMatch "^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"</pre>
+
+
+    <p>En cuanto a AliasMatch, puede usar toda la capacidad que le permiten las
+    <a class="glossarylink" href="../glossary.html#rexex" title="ver glosario">expresiones regulares</a>. 
+    Por ejemplo, es posible construir un alias con comparación insensible
+    a mayúsculas del URL-path:</p>
+
+    <pre class="prettyprint lang-config">ScriptAliasMatch "(?i)^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"</pre>
+
+
+    <p>Las consideraciones relacionadas con las diferencias entre
+    <code class="directive"><a href="#alias">Alias</a></code> y
+    <code class="directive"><a href="#aliasmatch">AliasMatch</a></code>
+    también aplican a las diferencias entre
+    <code class="directive"><a href="#scriptalias">ScriptAlias</a></code> y
+    <code class="directive"><a href="#scriptaliasmatch">ScriptAliasMatch</a></code>.
+    Vea <code class="directive"><a href="#aliasmatch">AliasMatch</a></code> para más
+    detalles.</p>
+
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
+<a href="../tr/mod/mod_alias.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_alias.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 2017 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/quickreference.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
index 0e2f50a806c447232e4dae5b9054c6a27fa27bae..4abe31abb466524db6519b16f7b800db6354a7ee 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Module Apache mod_alias</h1>
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
@@ -316,7 +317,8 @@ d'effectuer une autre requ
     peut être une URL absolue commençant par un protocole et un nom
     d'hôte, mais on peut aussi utiliser un chemin URL commençant par un
     slash, auquel cas le protocole et le nom d'hôte du serveur local
-    seront ajoutés.</p>
+    seront ajoutés, si vous avez défini <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> à on. Si <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> n'a pas été défini à on, le nom
+    d'hôte sera remplacé par la valeur de l'en-tête requested Host.</p>
 
     <p>Ensuite, toute requête commençant par <em>URL-path</em> va
     renvoyer une redirection au client vers l'<em>URL</em> cible. Tout
@@ -615,6 +617,7 @@ comme un script CGI</td></tr>
 </div>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
index f20fe47e31f56d8e6561a176bc26f530b3839710..c77861d78e9188b03b626a1bd52a2985c25dcb37 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache モジュール mod_alias</h1>
 <div class="toplang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
@@ -388,6 +389,7 @@ CGI スクリプトに指定</td></tr>
 </div>
 <div class="bottomlang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
index 9689c78a9b65610378a0cf060dcdac6b22b1706a..d44dc3cb0bdddd351a3e29b1b1e92cb0ede036b3 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_alias</h1>
 <div class="toplang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" title="Korean">&nbsp;ko&nbsp;</a> |
@@ -355,6 +356,7 @@ Alias /foo /gaq
 </div>
 <div class="bottomlang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" title="Korean">&nbsp;ko&nbsp;</a> |
index e4361c294f28b1feefa97fd15c519579af27db44..1f37fb0f27b685c48502d6f7ffa5fadaedccd14f 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache Modülü mod_alias</h1>
 <div class="toplang">
 <p><span>Mevcut Diller: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
@@ -532,6 +533,7 @@ eşler ve hedefi bir CGI betiği olarak çalıştırır.</td></tr>
 </div>
 <div class="bottomlang">
 <p><span>Mevcut Diller: </span><a href="../en/mod/mod_alias.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_alias.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_alias.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_alias.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_alias.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
index fc1040f15a56e4dd09b1df0935f7895f3c08ee77..67f36b3e59a5f4f714eade0a3ddc1b8958333c7b 100644 (file)
@@ -307,8 +307,11 @@ a different URL</description>
 
     <p>The new <em>URL</em> may be either an absolute URL beginning
     with a scheme and hostname, or a URL-path beginning with a slash.
-    In this latter case the scheme and hostname of the current server will
-    be added.</p>
+    In this latter case the scheme and hostname of the current server
+    will be added if you have 
+    <directive module="core">UseCanonicalName</directive> set to on, 
+    otherwise the hostname will be replaced with the requested Host 
+    header.</p>
 
     <p>Then any request beginning with <em>URL-path</em> will return a
     redirect request to the client at the location of the target
diff --git a/docs/manual/mod/mod_alias.xml.es b/docs/manual/mod/mod_alias.xml.es
new file mode 100644 (file)
index 0000000..5c8711c
--- /dev/null
@@ -0,0 +1,520 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1799478 -->
+<!-- Spanish Translation: Daniel Ferradal <dferradal@apache.org> -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_alias.xml.meta">
+
+<name>mod_alias</name>
+<description>Facilita el mapeo a diferentes partes del sistema de ficheros del host en el árbol de documentos y la redirección de URLs
+</description>
+
+<status>Base</status>
+<sourcefile>mod_alias.c</sourcefile>
+<identifier>alias_module</identifier>
+
+<summary>
+    <p>Las directivas facilitadas por este módulo permiten la manipulación y control de URLs según llegan las peticiones al servidor. Las directivas
+    <directive module="mod_alias">Alias</directive> y 
+    <directive module="mod_alias">ScriptAlias</directive> se usan para mapear URLs con rutas del sistema de ficheros. Esto permite que se sirva contenido que no está directamente dentro del 
+    <directive module="core">DocumentRoot</directive> como si fuera parte de éste. La directiva <directive module="mod_alias">ScriptAlias</directive> tiene además el efecto de hacer que el directorio de destino contenga solo scripts CGI.</p>
+
+    <p>Las directivas <directive module="mod_alias">Redirect</directive> se usan para indicar a los clientes que hagan una nueva petición con una URL distinta. Se usan a menudo cuando el recurso se ha movido a una nueva ubicación.</p>
+
+    <p>Cuando se usan las directivas <directive module="mod_alias">Alias</directive>,
+    <directive module="mod_alias">ScriptAlias</directive> y
+    <directive module="mod_alias">Redirect</directive> dentro de una sección 
+    <directive type="section" module="core">Location</directive>
+    o <directive type="section" module="core">LocationMatch</directive>, se puede usar
+    <a href="../expr.html">sintaxis de expresión</a> para manipuilar la ruta de destino o URL.
+    </p>
+
+    <p><module>mod_alias</module> se ha diseñado para gestionar tareas sencillas de manipulación de URL. Para tareas más complicadas como la manipulación de "query string", use las herramientas facilitadas por
+    <module>mod_rewrite</module>.</p>
+
+</summary>
+
+<seealso><module>mod_rewrite</module></seealso> 
+<seealso><a href="../urlmapping.html">Mapeo de URLs al sistema de ficheros</a></seealso>
+
+<section id="order"><title>Orden de Procesamiento</title>
+
+    <p>Aliases y Redirects que se dan en diferentes contextos se procesan como otras directivas según las <a href="../sections.html#mergin">reglas de fusión</a> estándar.  Pero cuando se dan múltiples 
+    Aliases o Redirects en el mismo contexto (por ejemplo, en la misma sección 
+    <directive type="section" module="core">VirtualHost</directive>)
+    entonces se procesan en un orden concreto.</p>
+
+    <p>En primer lugar, todos los Redirect se procesan antes que los Aliases, y por tanto una solicitud que coincida con un 
+    <directive module="mod_alias">Redirect</directive> o 
+    <directive module="mod_alias">RedirectMatch</directive> nunca aplicará un Alias. En segundo lugar, los Aliases y Redirect se procesan en el orden en el que aparecen en los ficheros de configuración, y la primera coincidencia es la que tiene prioridad.</p>
+
+    <p>Por esta razón, cuando dos o más de estas directivas se aplican a la misma sub-ruta, debe definir la ruta más específica primero para que todas las directivas tengan efecto. Por ejemplo, la siguiente configuración funcionará como se espera:</p>
+
+    <highlight language="config">
+Alias "/foo/bar" "/baz"
+Alias "/foo" "/gaq"
+    </highlight>
+
+    <p>Pero si estas dos directivas estuvieran en orden inverso, el 
+    <directive module="mod_alias">Alias</directive>
+    <code>/foo</code> siempre se aplicaría antes que el 
+    <directive module="mod_alias">Alias</directive> <code>/foo/bar</code>, así que se obviaría la última directiva.</p>
+
+    <p>Cuando las directivas <directive module="mod_alias">Alias</directive>,
+    <directive module="mod_alias">ScriptAlias</directive> y
+    <directive module="mod_alias">Redirect</directive> se usan dentro de una sección
+    <directive type="section" module="core">Location</directive>
+    o <directive type="section" module="core">LocationMatch</directive>, estas directivas tendrán prioridad sobre cualquier directiva 
+    <directive module="mod_alias">Alias</directive>, 
+    <directive module="mod_alias">ScriptAlias</directive> y
+    <directive module="mod_alias">Redirect</directive> definidas globalmente.
+    </p>
+
+</section>
+
+<directivesynopsis>
+<name>Alias</name>
+<description>Mapea URLs a rutas del sistema de ficheros</description>
+<syntax>Alias [<var>URL-path</var>]
+<var>file-path</var>|<var>directory-path</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context>
+</contextlist>
+
+<usage>
+
+    <p>La directiva <directive>Alias</directive> permite que se almacenen documentos en el sistema de ficheros local en rutas distintas de las que están bajo
+    <directive module="core">DocumentRoot</directive>. URLs con una ruta 
+    (%-decodificada) que comienzan con <var>URL-path</var> serán mapeadas a ficheros locales que comiencen con
+    <var>directory-path</var>.  El
+    <var>URL-path</var> es sensible a mayúsculas, incluso en sistemas de ficheros que no lo son.</p>
+
+    <highlight language="config">
+Alias "/image" "/ftp/pub/image"
+    </highlight>
+
+    <p>Una petición para <code>http://example.com/image/foo.gif</code> haría que el servidor respondiera con el fichero 
+    <code>/ftp/pub/image/foo.gif</code>. Solo se comparan segmentos de ruta completos, así que el alias de más arriba no valdría para la petición 
+    <code>http://example.com/imagefoo.gif</code>. Para ejemplos más complejos de expresiones regulares, vea la directiva 
+    <directive module="mod_alias">AliasMatch</directive>.</p>
+
+    <p>Tenga en cuenta que si incluye una / final en el 
+    <var>URL-path</var> entonces el servidor requerirá una / final para poder extender el alias. Es decir, si usa</p>
+
+    <highlight language="config">
+Alias "/icons/" "/usr/local/apache/icons/"
+    </highlight>
+
+    <p>entonces la URL <code>/icons</code> no coincidirá con el alias, porque no tiene la / final. De la misma manera, si omite la barra en el
+    <var>URL-path</var> también debe omitirla del
+    <var>file-path</var>.</p>
+
+    <p>Considere que seguramente tenga que especificar secciones de  
+    <directive type="section" module="core">Directory</directive> adicionales que cubran los <em>destinos</em> de los aliases. Las directivas Alias se comprueban antes que las de 
+    <directive type="section" module="core">Directory</directive>, así que solo los destinos de los alias se ven afectados.
+    (Sin embargo tenga en cuenta que las secciones 
+    <directive type="section" module="core">Location</directive>
+    se examinan una vez antes de que los alias tengan efecto, así que se aplicarán.)</p>
+
+    <p>En particular, si está creando un <code>Alias</code> a un directorio fuera de su 
+    <directive module="core">DocumentRoot</directive>, probablemente tenga que darle permisos de manera explícita al directorio de destino.</p>
+
+    <highlight language="config">
+Alias "/image" "/ftp/pub/image"
+&lt;Directory "/ftp/pub/image"&gt;
+    Require all granted
+&lt;/Directory&gt;
+    </highlight>
+
+    <p>Cualquier número de barras en el parámetro <var>URL-path</var> coincide con el mismo número de barras en el URL-path solicitado.</p>
+
+    <p>Si la directiva <directive>Alias</directive> se usa dentro de una sección
+    <directive type="section" module="core">Location</directive>
+    o <directive type="section" module="core">LocationMatch</directive> el URL-path se omite, y el file-path se interpreta usando <a href="../expr.html">sintáxis de expresión</a>.<br />
+    Esta sintáxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <highlight language="config">
+&lt;Location "/image"&gt;
+    Alias "/ftp/pub/image"
+&lt;/Location&gt;
+&lt;LocationMatch "/error/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    Alias "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html"
+&lt;/LocationMatch&gt;
+    </highlight>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>AliasMatch</name>
+<description>Mapea URLs a ubicaciones del sistema de ficheros usando expresiones regulares</description>
+<syntax>AliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+</contextlist>
+
+<usage>
+    <p>Esta directiva es equivalente a 
+    <directive module="mod_alias">Alias</directive>, pero hace uso de 
+    <glossary ref="regex">expresiones regulares</glossary>,
+    en lugar de comparaciones simples de prefijo. La expresión 
+    regular facilitada se compara con el URL-path, y si coincide, 
+    el servidor sustituye cualquier coincidencia entre paréntesis con 
+    la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para activar el directorio <code>/icons</code>, uno podría usar:
+    </p>
+
+    <highlight language="config">
+AliasMatch "^/icons(/|$)(.*)" "/usr/local/apache/icons$1$2"
+    </highlight>
+
+    <p>Puede usar toda la capacidad que le permiten las
+    <glossary ref="regex">expresiones regulares</glossary>. Por ejemplo, es posible construir un alias con comprobación insensible a mayúsculas del URL-path:</p>
+
+    <highlight language="config">
+AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1"
+    </highlight>
+
+    <p>Una sutil diferencia entre 
+    <directive module="mod_alias">Alias</directive>
+    y <directive module="mod_alias">AliasMatch</directive> es que
+    <directive module="mod_alias">Alias</directive> copiará automáticamente cualquier parte adicional de la URI, pasada la parte que coincide, al final de la ruta del fichero en el parámetro de la derecha, mientras que
+    <directive module="mod_alias">AliasMatch</directive> no lo hará. Esto significa en casi todos los casos, querrá que las expresiones regulares concuerden con la URI solicitada al completo desde el comienzo al final, y usar la sustitución del parámetro a la derecha.</p>
+
+    <p>En otras palabras, cambiar
+    <directive module="mod_alias">Alias</directive> a
+    <directive module="mod_alias">AliasMatch</directive> no tendrá el mismo resultado. Como mínimo, tendrá que añadir un <code>^</code> al comienzo de la expresión regular, añadir un <code>(.*)$</code> al final y añadir 
+    <code>$1</code> al final del reemplazo.</p>
+
+    <p>Por ejemplo, supongamos que quiere reemplazar esto con AliasMatch:</p>
+
+    <highlight language="config">
+Alias "/image/" "/ftp/pub/image/"
+    </highlight>
+
+    <p>Esto no es equivalente - ¡no haga esto! Esto enviará todas las peticiones que tengan /image/ en cualquier parte de la petición y la pondrá en /ftp/pub/image/:</p>
+
+    <highlight language="config">
+AliasMatch "/image/" "/ftp/pub/image/"
+    </highlight>
+
+    <p>Esto es lo que necesita para que tenga el mismo efecto:</p>
+
+    <highlight language="config">
+AliasMatch "^/image/(.*)$" "/ftp/pub/image/$1"
+    </highlight>
+
+    <p>Por supuesto, no hay ningún motivo para usar
+    <directive module="mod_alias">AliasMatch</directive>
+    donde <directive module="mod_alias">Alias</directive> funcionaría.  
+    <directive module="mod_alias">AliasMatch</directive> le permite hacer cosas más complicadas. Por ejemplo, puede servir diferentes tipos de ficheros desde diferentes directorios:</p>
+
+    <highlight language="config">
+AliasMatch "^/image/(.*)\.jpg$" "/files/jpg.images/$1.jpg"
+AliasMatch "^/image/(.*)\.gif$" "/files/gif.images/$1.gif"
+    </highlight>
+
+    <p>Si se usan multiples barras iniciales en la URL solicitada, el servidor las descarta antes de que las directivas de este módulo las compare con el URL-path solicitado.
+    </p>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>Redirect</name>
+<description>Envía una redirección externa indicando al cliente que solicite una URL distinta</description>
+<syntax>Redirect [<var>status</var>] [<var>URL-path</var>]
+<var>URL</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>FileInfo</override>
+
+<usage>
+    <p>La directiva <directive>Redirect</directive> mapea una URL antigua a una nueva indicando al cliente que solicite el recurso en otra ubicación.</p>
+
+    <p>El antiguo <em>URL-path</em> es una ruta (%-decodificada) que comienza con una barra. No se permite una ruta relativa.</p>
+
+    <p>La nueva <em>URL</em> puede ser una URL absoluta que comienza con esquema y nombre de host, or un URL-path que comienza con una barra (/). En este último caso se añadirán el esquema y nombre de host del servidor actual si tiene <directive module="core">UseCanonicalName</directive> configurado a on, si no el nombre de host se reemplazará por la cabecera Host solicitada.</p>
+
+    <p>Entonces cualquier petición que comience con <em>URL-path</em> devolverá una solicitud de redirección al cliente hacia la ubicación de la <em>URL</em> de destino. Información adicional de la ruta pasado el <em>URL-path</em> que coincide se añadirá al final de la URL de destino.</p>
+
+    <highlight language="config">
+# Redirect hacia una URL en un host diferente
+Redirect "/service" "http://foo2.example.com/service"
+
+# Redirect hacia una URL en el mismo host
+Redirect "/one" "/two"
+    </highlight>
+
+    <p>Si el cliente solicita <code>http://example.com/service/foo.txt</code>, se le indicará que acceda a 
+    <code>http://foo2.example.com/service/foo.txt</code> en su lugar. Esto incluye solicitudes con parámetros 
+    <code>GET</code>, tales como
+    <code>http://example.com/service/foo.pl?q=23&amp;a=42</code>,que será
+    redirigido a
+    <code>http://foo2.example.com/service/foo.pl?q=23&amp;a=42</code>.
+    Tenga en cuenta que los <code>POST</code> serán descartados.<br />
+    Solo se comparan segmentos completos de ruta, así que el ejemplo de más arriba no coincidiría con una petición a
+    <code>http://example.com/servicefoo.txt</code>. Para comparaciones más complejas usando la 
+    <a href="../expr.html">sintáxis de expresión</a>, omita el argumento de URL-path tal y como se indica más abajo. Alternativamente, para coincidencias usando expresiones regulares, vea la directiva 
+    <directive module="mod_alias">RedirectMatch</directive>.</p>
+
+
+    <note><title>Nota</title>
+    <p>Las directivas <directive>Redirect</directive> tienen priodidad sobre directivas 
+    <directive module="mod_alias">Alias</directive> y 
+    <directive module="mod_alias">ScriptAlias</directive>, independientemente de su orden en el fichero de configuración. Directivas 
+    <directive>Redirect</directive> 
+    dentro de Location tiene prioridad sobre directivas 
+    <directive>Redirect</directive> y 
+    <directive module="mod_alias">Alias</directive> con un <var>URL-path</var>.</p>
+    </note>
+
+    <p>Si no se indica un parámetro <var>status</var>, la redirección será
+    "temporal" (estado HTTP 302). Esto le indica al cliente que el recurso se ha movido temporalmente. El parámetro <var>status</var> se puede usar para devolver otros códigos de estado HTTP:</p>
+
+    <dl>
+      <dt>permanent</dt>
+
+      <dd>Devuelve una estado de redirección permanente (301) indicando que el recurso se ha movido de forma permanente.</dd>
+
+      <dt>temp</dt>
+
+      <dd>Devuelve un estado de redirección temporal (302). Este es el valor por defecto.</dd>
+
+      <dt>seeother</dt>
+
+      <dd>Devuelve un estado "See Other" (303) indicando que el recurso ha sido sustituido.</dd>
+
+      <dt>gone</dt>
+
+      <dd>Devuelve un estado "Gone" (410) indicando que el recurso ha sido eliminado de forma permanente. Cuando se usa este estado, el parámetro 
+      <var>URL</var> debería omitirse.</dd>
+    </dl>
+
+    <p>Se pueden devolver otros códigos de estado indicando el código numérico del estado en el valor de <var>status</var>. Si el estado está entre 300 y 399, el parámetro <var>URL</var> debe estar presente. Si el estado 
+    <em>no</em> está entre 300 and 399, el parámetro <var>URL</var> debe ser omitido. El estado debe ser un código de estado válido HTTP, conocido por el Servidor Apache HTTP (vea la función <code>send_error_response</code> en http_protocol.c).</p>
+
+    <highlight language="config">
+Redirect permanent "/one" "http://example.com/two"
+Redirect 303 "/three" "http://example.com/other"
+    </highlight>
+
+    <p>Si se usa la directiva <directive>Redirect</directive> dentro de una sección
+    <directive type="section" module="core">Location</directive>
+    o <directive type="section" module="core">LocationMatch</directive>
+    sin el <var>URL-path</var>, entonces el parámetro <var>URL</var> será interpretado
+    usando <a href="../expr.html">sintáxis de expresión</a>.<br />
+    Esta sintáxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <highlight language="config">
+&lt;Location "/one"&gt;
+    Redirect permanent "http://example.com/two"
+&lt;/Location&gt;
+&lt;Location "/three"&gt;
+    Redirect 303 "http://example.com/other"
+&lt;/Location&gt;
+&lt;LocationMatch "/error/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html"
+&lt;/LocationMatch&gt;
+    </highlight>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>RedirectMatch</name>
+<description>Envía una redirección externa basada en una coincidencia de expresión regular con la URL actual
+</description>
+<syntax>RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>FileInfo</override>
+
+<usage>
+    <p>Esta directiva es equivalente a 
+    <directive module="mod_alias">Redirect</directive>, pero hace uso de 
+    <glossary ref="regex">expresiones regulares</glossary>,
+    en lugar de comparaciones simple de prefijo. La expresión 
+    regular facilitada se compara con el URL-path, y si coincide, 
+    el servidor sustituye cualquier coincidencia entre paréntesis con 
+    la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para redirigir todos los ficheros GIF al mismo nombre pero del tipo JPEG en otro servidor, uno podría usar:</p>
+
+    <highlight language="config">
+RedirectMatch "(.*)\.gif$" "http://other.example.com$1.jpg"
+    </highlight>
+
+    <p>Las consideraciones relacionadas con las diferencias entre
+    <directive module="mod_alias">Alias</directive> y
+    <directive module="mod_alias">AliasMatch</directive>
+    también aplican a las diferencias entre
+    <directive module="mod_alias">Redirect</directive> y
+    <directive module="mod_alias">RedirectMatch</directive>.
+    Vea <directive module="mod_alias">AliasMatch</directive> para más
+    detalles.</p>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>RedirectTemp</name>
+<description>Envía una redirección externa temporal indicando al cliente que solicite una URL diferente</description>
+<syntax>RedirectTemp <var>URL-path</var> <var>URL</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>FileInfo</override>
+
+<usage>
+    <p>Esta directiva le hace saber al cliente que el Redirect es solo temporal (estado 302). Exactamente equivalente a 
+    <code>Redirect temp</code>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>RedirectPermanent</name>
+<description>Envía una redirección externa permanente indicando al cliente que solicite una URL diferente</description>
+<syntax>RedirectPermanent <var>URL-path</var> <var>URL</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context></contextlist>
+<override>FileInfo</override>
+
+<usage>
+    <p>Esta directiva hace saber al cliente que el Redirect es permanente
+    (estado 301). Exactamente equivalente a 
+    <code>Redirect permanent</code>.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ScriptAlias</name>
+<description>Mapea una URL a una ubicación del sistema de ficheros y designa el destino como un script CGI</description>
+<syntax>ScriptAlias [<var>URL-path</var>]
+<var>file-path</var>|<var>directory-path</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context>
+</contextlist>
+
+<usage>
+    <p>La directiva <directive>ScriptAlias</directive> tiene el mismo comportamiento que la directiva <directive module="mod_alias">Alias</directive>, excepto que además indica el directorio de destino conteniendo scripts CGI que serán procesados por el handler cgi-script de 
+    <module>mod_cgi</module>. URLs con una ruta sensible a mayúsculas y (%-decodificadas) que comienzan con <var>URL-path</var> serán
+    mapeadas a scripts que comiencen con el segundo parámetro, que es un nombre de ruta completo en el sistema de ficheros local.</p>
+
+    <highlight language="config">
+ScriptAlias "/cgi-bin/" "/web/cgi-bin/"
+    </highlight>
+
+    <p>Una petición para <code>http://example.com/cgi-bin/foo</code> haría que el servidor ejecute el script <code>/web/cgi-bin/foo</code>. Esta configuración es esencialmente equivalente a:</p>
+    <highlight language="config">
+Alias "/cgi-bin/" "/web/cgi-bin/"
+&lt;Location "/cgi-bin"&gt;
+    SetHandler cgi-script
+    Options +ExecCGI
+&lt;/Location&gt;
+    </highlight>
+
+    <p>También puede usarse <directive>ScriptAlias</directive>junto con un script o handler que usted tenga. Por ejemplo:</p>
+
+    <highlight language="config">
+ScriptAlias "/cgi-bin/" "/web/cgi-handler.pl"
+    </highlight>
+
+    <p>En este escenario todos los ficheros solicitados en 
+    <code>/cgi-bin/</code> serán gestionados por el fichero que usted ha configurado, esto permite que use su propio handler personalizado. Puede que quiera usar esto como un wrapper de CGI y así pueda añadir contenido, o alguna otra acción a medida.</p>
+
+    <note type="warning">Es más seguro evitar que se coloquen scripts CGI bajo el <directive module="core">DocumentRoot</directive> para que no se revele de manera accidental el código fuente si la configuración se vuelve a cambiar alguna vez. El <directive>ScriptAlias</directive> hace esto fácil mapeando una URL y designando CGI scripts al mismo tiempo. Si decide colocar sus scripts CGI en un directorio que ya es accesible desde la web, no use
+    <directive>ScriptAlias</directive>. En su lugar, use <directive
+    module="core" type="section">Directory</directive>, <directive
+    module="core">SetHandler</directive>, y <directive
+    module="core">Options</directive> como en:
+
+    <highlight language="config">
+&lt;Directory "/usr/local/apache2/htdocs/cgi-bin"&gt;
+    SetHandler cgi-script
+    Options ExecCGI
+&lt;/Directory&gt;
+    </highlight>
+
+    Esto es necesario puesto que multiples <var>URL-paths</var> pueden mapear a la misma ubicación del sistema de ficheros, potencialmente saltándose el
+    <directive>ScriptAlias</directive> y revelando el código fuente de los scripts CGI si no están restringidos por una sección 
+    <directive module="core">Directory</directive>.
+    </note>
+
+    <p>Si se usa la directiva 
+    <directive>ScriptAlias</directive> dentro de una sección
+    <directive type="section" module="core">Location</directive>
+    o <directive type="section" module="core">LocationMatch</directive>
+    con el URL-path omitido, entonces el parámetro URL será interpretando usando
+    <a href="../expr.html">sintaxis de expresión</a>.<br />
+    Esta sintaxis está disponible en Apache 2.4.19 y versiones posteriores.</p>
+
+    <highlight language="config">
+&lt;Location "/cgi-bin"&gt;
+    ScriptAlias "/web/cgi-bin/"
+&lt;/Location&gt;
+&lt;LocationMatch "/cgi-bin/errors/(?&lt;NUMBER&gt;[0-9]+)"&gt;
+    ScriptAlias "/web/cgi-bin/errors/%{env:MATCH_NUMBER}.cgi"
+&lt;/LocationMatch&gt;
+    </highlight>
+
+</usage>
+<seealso><a href="../howto/cgi.html">Tutorial CGI</a></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ScriptAliasMatch</name>
+<description>Mapea una URL a una ubicación del sistema de ficheros usando 
+una expresión regular y designa el destino como un script CGI</description>
+<syntax>ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+</contextlist>
+
+<usage>
+    <p>Esta directiva es equivalente a 
+    <directive module="mod_alias">ScriptAlias</directive>, pero hace uso de
+    <glossary ref="regex">expresiones regulares</glossary>,
+    en lugar de comparaciones simples de prefijo. La expresión regular facilitada se compara con el URL-path, y si coincide, el servidor sustituye cualquier coincidencia entre paréntesis con la cadena de caracteres facilitada y la usa como el nombre de fichero. Por ejemplo, para activar el estándar 
+    <code>/cgi-bin</code>, uno podría usar:</p>
+
+    <highlight language="config">
+ScriptAliasMatch "^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"
+    </highlight>
+
+    <p>En cuanto a AliasMatch, puede usar toda la capacidad que le permiten las
+    <glossary ref="rexex">expresiones regulares</glossary>. 
+    Por ejemplo, es posible construir un alias con comparación insensible
+    a mayúsculas del URL-path:</p>
+
+    <highlight language="config">
+ScriptAliasMatch "(?i)^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1"
+    </highlight>
+
+    <p>Las consideraciones relacionadas con las diferencias entre
+    <directive module="mod_alias">Alias</directive> y
+    <directive module="mod_alias">AliasMatch</directive>
+    también aplican a las diferencias entre
+    <directive module="mod_alias">ScriptAlias</directive> y
+    <directive module="mod_alias">ScriptAliasMatch</directive>.
+    Vea <directive module="mod_alias">AliasMatch</directive> para más
+    detalles.</p>
+
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
index b0157e2f37b483df2aea79fbc0c038fddfb2685a..9a956dc90f8ea2078b6de06626f8eacd33f3d4f9 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1756706 -->
+<!-- English Revision: 1799478 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
@@ -332,7 +332,10 @@ d'effectuer une autre requête avec une URL différente</description>
     peut être une URL absolue commençant par un protocole et un nom
     d'hôte, mais on peut aussi utiliser un chemin URL commençant par un
     slash, auquel cas le protocole et le nom d'hôte du serveur local
-    seront ajoutés.</p>
+    seront ajoutés, si vous avez défini <directive
+    module="core">UseCanonicalName</directive> à on. Si <directive
+    module="core">UseCanonicalName</directive> n'a pas été défini à on, le nom
+    d'hôte sera remplacé par la valeur de l'en-tête requested Host.</p>
 
     <p>Ensuite, toute requête commençant par <em>URL-path</em> va
     renvoyer une redirection au client vers l'<em>URL</em> cible. Tout
index 5e1a36c4f2480d2625501cc0f4f5bc6ecd2d6715..356293d2b5e4f460c13229a3af98e4e5f767b6f8 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 151408:1756706 (outdated) -->
+<!-- English Revision: 151408:1799478 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index eb87c3ef98301ca1b669139d100276fd16b2f6ae..c399781afddc11d233417d11c6d95c325e06aca9 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="EUC-KR" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
-<!-- English Revision: 151408:1756706 (outdated) -->
+<!-- English Revision: 151408:1799478 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 547a2db7730dd46f16c2efb9093f87bd098e5028..89d0ab80df89a812ecc4d970384379c8e498f519 100644 (file)
@@ -8,6 +8,7 @@
 
   <variants>
     <variant>en</variant>
+    <variant>es</variant>
     <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
index 586ef1acd270961bc754f692e261bceb4bb51bca..332f4835036e6c6395a85fa0e329d821628665c7 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 1174747:1756706 (outdated) -->
+<!-- English Revision: 1174747:1799478 (outdated) -->
 <!-- =====================================================
  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
    Reviewed by: Orhan Berent <berent belgeler.org>
index e5e9d863ed79d7df9a2ed53621b1b4342ffb9037..53518b6dec071634e0dabbddbd40370dee462f59 100644 (file)
@@ -3,3 +3,7 @@
 URI: mod_allowhandlers.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
+
+URI: mod_allowhandlers.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
index b749fc9bae7db06d19bbd7905f368fe395ffd944..849a6a2d17505e82d6b321008d4dcb992f9546f4 100644 (file)
@@ -26,7 +26,8 @@
 <div id="page-content">
 <div id="preamble"><h1>Apache Module mod_allowhandlers</h1>
 <div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_allowhandlers.html" title="English">&nbsp;en&nbsp;</a></p>
+<p><span>Available Languages: </span><a href="../en/mod/mod_allowhandlers.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowhandlers.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a></p>
 </div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Easily restrict what HTTP handlers can be used on the server</td></tr>
 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Experimental</td></tr>
@@ -85,7 +86,8 @@ earlier in the configuration merge order:</p>
 </div>
 </div>
 <div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_allowhandlers.html" title="English">&nbsp;en&nbsp;</a></p>
+<p><span>Available Languages: </span><a href="../en/mod/mod_allowhandlers.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowhandlers.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
 <script type="text/javascript"><!--//--><![CDATA[//><!--
 var comments_shortname = 'httpd';
diff --git a/docs/manual/mod/mod_allowhandlers.html.es b/docs/manual/mod/mod_allowhandlers.html.es
new file mode 100644 (file)
index 0000000..a2314a0
--- /dev/null
@@ -0,0 +1,110 @@
+<?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>mod_allowhandlers - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_allowhandlers</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_allowhandlers.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowhandlers.html" title="Español">&nbsp;es&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Restringir fácilmente qué handlers HTTP pueden ser usados en el servidor</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Experimental</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>allowhandlers_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_allowhandlers.c</td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+<p>Éste módulo hace que sea fácil restringir qué handlers podrían usarse para una petición. Una posible configuración sería:</p>
+
+<pre class="prettyprint lang-config">&lt;Location "/"&gt;
+  AllowHandlers not server-info server-status balancer-manager ldap-status
+&lt;/Location&gt;</pre>
+
+
+<p>También registra un handler llamado <code>forbidden</code> que sencillamente devuelve 403 FORBIDDEN al cliente. Esto se puede usar con directivas como
+<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>.</p>
+
+</div>
+<div id="quickview"><h3 class="directives">Directivas</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#allowhandlers">AllowHandlers</a></li>
+</ul>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_allowhandlers">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_allowhandlers">Report a bug</a></li></ul><h3>Consulte también</h3>
+<ul class="seealso">
+<li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li>
+<li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</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="directive-section"><h2><a name="AllowHandlers" id="AllowHandlers">AllowHandlers</a> <a name="allowhandlers" id="allowhandlers">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Restringe acceso a los handlers listados</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>AllowHandlers [not] none|<em>handler-name</em>
+[none|<em>handler-name</em>]...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Valor por defecto:</a></th><td><code>AllowHandlers all</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_allowhandlers</td></tr>
+</table>
+
+<p>Los nombres de handler son sensibles a mayúsculas. El nombre especial
+<code>none</code> puede usarse para hacer coincidir mayúsculas donde no se ha configurado ningún handler. El valor especial <code>all</code> puede usarse para permitir todos los handlers otra vez en una sección de configuración posterior, incluso si algunas cabeceras fueron denegadas previamente en el orden de fusión de la configuración:</p>
+
+<pre class="prettyprint lang-config">&lt;Location "/server-status"&gt;
+  AllowHandlers all
+  SetHandler server-status
+&lt;/Location&gt;</pre>
+
+
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_allowhandlers.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowhandlers.html" title="Español">&nbsp;es&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_allowhandlers.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 2017 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/quickreference.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/mod/mod_allowhandlers.xml.es b/docs/manual/mod/mod_allowhandlers.xml.es
new file mode 100644 (file)
index 0000000..adcd705
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1673892 -->
+<!-- Spanish Translation: Daniel Ferradal <dferradal@apache.org> -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_allowhandlers.xml.meta">
+<name>mod_allowhandlers</name>
+<description>Restringir fácilmente qué handlers HTTP pueden ser usados en el servidor</description>
+<status>Experimental</status>
+<sourcefile>mod_allowhandlers.c</sourcefile>
+<identifier>allowhandlers_module</identifier>
+
+
+<summary>
+<p>Éste módulo hace que sea fácil restringir qué handlers podrían usarse para una petición. Una posible configuración sería:</p>
+
+<highlight language="config">
+&lt;Location "/"&gt;
+  AllowHandlers not server-info server-status balancer-manager ldap-status
+&lt;/Location&gt;
+</highlight>
+
+<p>También registra un handler llamado <code>forbidden</code> que sencillamente devuelve 403 FORBIDDEN al cliente. Esto se puede usar con directivas como
+<directive module="mod_mime">AddHandler</directive>.</p>
+
+</summary>
+
+<seealso><directive module="core">SetHandler</directive></seealso>
+<seealso><directive module="mod_mime">AddHandler</directive></seealso>
+
+<directivesynopsis>
+<name>AllowHandlers</name>
+<description>Restringe acceso a los handlers listados</description>
+<syntax>AllowHandlers [not] none|<em>handler-name</em>
+[none|<em>handler-name</em>]...</syntax>
+<default>AllowHandlers all</default>
+<contextlist><context>directory</context></contextlist>
+<status>Experimental</status>
+
+<usage>
+
+<p>Los nombres de handler son sensibles a mayúsculas. El nombre especial
+<code>none</code> puede usarse para hacer coincidir mayúsculas donde no se ha configurado ningún handler. El valor especial <code>all</code> puede usarse para permitir todos los handlers otra vez en una sección de configuración posterior, incluso si algunas cabeceras fueron denegadas previamente en el orden de fusión de la configuración:</p>
+
+<highlight language="config">
+&lt;Location "/server-status"&gt;
+  AllowHandlers all
+  SetHandler server-status
+&lt;/Location&gt;
+</highlight>
+
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
index 6e186b0714c87bd0cac3dc9285f9ac5537e45717..0b3181470701b9fece9655f994a7a6059c6099b0 100644 (file)
@@ -8,5 +8,6 @@
 
   <variants>
     <variant>en</variant>
+    <variant>es</variant>
   </variants>
 </metafile>
index 5d30fcfc4b75a8e65c6767bd482515204648df45..ceeed657bf76bf0636e5dbc97226524bbe3baa13 100644 (file)
@@ -4,6 +4,10 @@ URI: mod_allowmethods.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: mod_allowmethods.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
+
 URI: mod_allowmethods.html.fr
 Content-Language: fr
 Content-type: text/html; charset=ISO-8859-1
index b7be0d4049566178f3895b9b5627758624e18918..0026593f5d6688498e6ea82aaa95c3b2d3f7acde 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache Module mod_allowmethods</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_allowmethods.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_allowmethods.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Easily restrict what HTTP methods can be used on the server</td></tr>
@@ -87,6 +88,7 @@ kludgy implementation of <code class="directive"><a href="../mod/core.html#limit
 </div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_allowmethods.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_allowmethods.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
 <script type="text/javascript"><!--//--><![CDATA[//><!--
diff --git a/docs/manual/mod/mod_allowmethods.html.es b/docs/manual/mod/mod_allowmethods.html.es
new file mode 100644 (file)
index 0000000..ca8678c
--- /dev/null
@@ -0,0 +1,115 @@
+<?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>mod_allowmethods - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_allowmethods</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_allowmethods.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_allowmethods.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Restringe fácilmente qué métodos HTTP pueden ser usados en el servidor</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Experimental</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>allowmethods_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_allowmethods.c</td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+<p>Éste módulo hace fácil restringir qué métodos pueden ser usados en el servidor. 
+       La configuración más común sería:</p>
+
+<pre class="prettyprint lang-config">&lt;Location "/"&gt;
+   AllowMethods GET POST OPTIONS
+&lt;/Location&gt;</pre>
+
+
+</div>
+<div id="quickview"><h3 class="directives">Directivas</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#allowmethods">AllowMethods</a></li>
+</ul>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_allowmethods">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_allowmethods">Report a bug</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="directive-section"><h2><a name="AllowMethods" id="AllowMethods">AllowMethods</a> <a name="allowmethods" id="allowmethods">Directiva</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Descripción:</a></th><td>Restringe acceso a los métodos HTTP indicados</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Sintaxis:</a></th><td><code>AllowMethods reset|<em>HTTP-method</em>
+[<em>HTTP-method</em>]...</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Valor por defecto:</a></th><td><code>AllowMethods reset</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Contexto:</a></th><td>directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Estado:</a></th><td>Experimental</td></tr>
+<tr><th><a href="directive-dict.html#Module">Módulo:</a></th><td>mod_allowmethods</td></tr>
+</table>
+
+<p>Los métodos HTTP son sensibles a mayúsculas y son generalmente, según RFC, indicados en mayúsculas. Los métodos GET y HEAD se tratan como equivalentes. La palabra clave <code>reset</code> puede ser usada para desactivar
+ <code class="module"><a href="../mod/mod_allowmethods.html">mod_allowmethods</a></code> en un contexto anidado más profundo:</p>
+
+<pre class="prettyprint lang-config">&lt;Location "/svn"&gt;
+   AllowMethods reset
+&lt;/Location&gt;</pre>
+
+
+<div class="note"><h3>Precaución</h3>
+  <p>No se puede restringir el método TRACE con este módulo;
+  use <code class="directive"><a href="../mod/core.html#traceenable">TraceEnable</a></code> en su lugar.</p>
+</div>
+
+<p><code class="module"><a href="../mod/mod_allowmethods.html">mod_allowmethods</a></code> fue escrito para reemplazar la implementación más engorrosa de
+<code class="directive"><a href="../mod/core.html#limit">Limit</a></code> y
+<code class="directive"><a href="../mod/core.html#limitexcept">LimitExcept</a></code>.</p>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_allowmethods.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_allowmethods.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_allowmethods.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 2017 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/quickreference.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
index cbbb7d6fc3f3cb0866b6ff7b76575ac8185d1bf1..02a333c36c5640bb3ba2ec962c9f3840c297ae22 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Module Apache mod_allowmethods</h1>
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_allowmethods.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_allowmethods.html" title="Français">&nbsp;fr&nbsp;</a></p>
 </div>
 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Limitation simple des méthodes HTTP acceptées par e serveur</td></tr>
@@ -89,6 +90,7 @@ remplacer l'impl
 </div>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_allowmethods.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_allowmethods.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_allowmethods.html" title="Français">&nbsp;fr&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
 <script type="text/javascript"><!--//--><![CDATA[//><!--
diff --git a/docs/manual/mod/mod_allowmethods.xml.es b/docs/manual/mod/mod_allowmethods.xml.es
new file mode 100644 (file)
index 0000000..1edc930
--- /dev/null
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1717786 -->
+<!-- Spanish Translation: Daniel Ferradal <dferradal@apache.org> -->
+
+<!--
+Upon adding a new module XML doc, you will need to:
+
+svn ps svn:eol-style native <alltextfiles>
+svn ps svn:keywords LastChangedRevision mod_allowmethods.xml
+
+in order for it to rebuild correctly.
+
+-->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_allowmethods.xml.meta">
+<name>mod_allowmethods</name>
+<description>Restringe fácilmente qué métodos HTTP pueden ser usados en el servidor</description>
+<status>Experimental</status>
+<sourcefile>mod_allowmethods.c</sourcefile>
+<identifier>allowmethods_module</identifier>
+
+
+<summary>
+<p>Éste módulo hace fácil restringir qué métodos pueden ser usados en el servidor. 
+       La configuración más común sería:</p>
+
+<highlight language="config">
+&lt;Location "/"&gt;
+   AllowMethods GET POST OPTIONS
+&lt;/Location&gt;
+</highlight>
+
+</summary>
+
+<directivesynopsis>
+<name>AllowMethods</name>
+<description>Restringe acceso a los métodos HTTP indicados</description>
+<syntax>AllowMethods reset|<em>HTTP-method</em>
+[<em>HTTP-method</em>]...</syntax>
+<default>AllowMethods reset</default>
+<contextlist><context>directory</context></contextlist>
+<status>Experimental</status>
+
+<usage>
+
+<p>Los métodos HTTP son sensibles a mayúsculas y son generalmente, según RFC, indicados en mayúsculas. Los métodos GET y HEAD se tratan como equivalentes. La palabra clave <code>reset</code> puede ser usada para desactivar
+ <module>mod_allowmethods</module> en un contexto anidado más profundo:</p>
+
+<highlight language="config">
+&lt;Location "/svn"&gt;
+   AllowMethods reset
+&lt;/Location&gt;
+</highlight>
+
+<note><title>Precaución</title>
+  <p>No se puede restringir el método TRACE con este módulo;
+  use <directive module="core">TraceEnable</directive> en su lugar.</p>
+</note>
+
+<p><module>mod_allowmethods</module> fue escrito para reemplazar la implementación más engorrosa de
+<directive module="core">Limit</directive> y
+<directive module="core">LimitExcept</directive>.</p>
+</usage>
+</directivesynopsis>
+
+</modulesynopsis>
index e7cf8b579b6acca58a5d2cafeaef1b37f3e79268..64f36bfa352d11a968066194947b5a1bfb1d1971 100644 (file)
@@ -8,6 +8,7 @@
 
   <variants>
     <variant>en</variant>
+    <variant>es</variant>
     <variant>fr</variant>
   </variants>
 </metafile>
index 95bb91308ccb6340a0ffa08b1fb2c64b153914e8..541db902f861c67b4aa12326bab876022f1436e5 100644 (file)
@@ -4,6 +4,10 @@ URI: mod_asis.html.en
 Content-Language: en
 Content-type: text/html; charset=ISO-8859-1
 
+URI: mod_asis.html.es
+Content-Language: es
+Content-type: text/html; charset=ISO-8859-1
+
 URI: mod_asis.html.fr
 Content-Language: fr
 Content-type: text/html; charset=ISO-8859-1
index 47285a019d47237f01831b982dbe15f85decccd4..8ed0e13b8bccd3e32c0612b57f13519cd206b85d 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache Module mod_asis</h1>
 <div class="toplang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
@@ -113,6 +114,7 @@ HTTP headers</td></tr>
 </div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_asis.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
diff --git a/docs/manual/mod/mod_asis.html.es b/docs/manual/mod/mod_asis.html.es
new file mode 100644 (file)
index 0000000..d92234d
--- /dev/null
@@ -0,0 +1,144 @@
+<?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>mod_asis - Servidor HTTP Apache Versión 2.5</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>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.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.5 del Servidor HTTP Apache</p>
+<img alt="" src="../images/feather.png" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">Módulos</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Módulo Apache mod_asis</h1>
+<div class="toplang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Descripción:</a></th><td>Envía ficheros que contienen sus propias 
+  cabeceras HTTP</td></tr>
+<tr><th><a href="module-dict.html#Status">Estado:</a></th><td>Base</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Identificador de Módulos:</a></th><td>asis_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Fichero de Código Fuente:</a></th><td>mod_asis.c</td></tr></table>
+<h3>Resumen de contenidos</h3>
+
+    <p>Este módulo provee el handler <code>send-as-is</code>
+      que hace que Apache HTTP Server envíe documentos sin añadir a ellos la 
+      mayoría de las cabeceras típicas de HTTP.</p>
+
+    <p>Esto se puede usar para enviar cualquier tipo de datos desde el servidor, 
+      incluyendo redirecciones y otras respuestas HTTP especiales, sin 
+      necesitar un script-cgi o un script nph.</p>
+
+    <p>Por razones históricas, este módulo también procesará cualquier fichero
+      con el tipo MIME <code>httpd/send-as-is</code>.</p>
+</div>
+<div id="quickview"><h3>Temas</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#usage">Uso</a></li>
+</ul><h3 class="directives">Directivas</h3>
+<p>Este módulo no suministra ninguna
+            directiva.</p>
+<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_asis">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_asis">Report a bug</a></li></ul><h3>Consulte también</h3>
+<ul class="seealso">
+<li><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code></li>
+<li><code class="module"><a href="../mod/mod_cern_meta.html">mod_cern_meta</a></code></li>
+<li><a href="../handler.html">Uso de Handler de Apache httpd</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="usage" id="usage">Uso</a></h2>
+
+    <p>En el fichero de configuración del servidor, asociar ficheros con el 
+      handler <code>send-as-is</code> <em>p. ej.</em></p>
+
+    <pre class="prettyprint lang-config">AddHandler send-as-is asis</pre>
+
+
+    <p>Los contenidos de cualquier fichero con la extensión <code>.asis</code> 
+    se enviarán por Apache httpd al cliente sin apenas cambios. En particular, 
+    las cabeceras HTTP provienen del propio fichero según las reglas de 
+    <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, así que un fichero "asis" debe incluir cabeceras 
+    válidas, y también puede usar la cabecera CGI 
+    <code>Status:</code> para determinar el código de la respuesta HTTP. La 
+    cabecera <code>Content-Length:</code> se insertará automáticamente, o si se 
+    incluye en el fichero, será corregida por httpd.</p>
+
+    <p>Aquí hay un ejemplo de un fichero cuyo contenido se envía 
+      <em>as is</em> (tal cual) para decirle al cliente que 
+      un fichero se ha redirigido.</p>
+
+    <div class="example"><p><code>
+      Status: 301 Y ahora donde he dejado esa URL<br />
+      Location: http://xyz.example.com/foo/bar.html<br />
+      Content-type: text/html<br />
+      <br />
+      &lt;html&gt;<br />
+      &lt;head&gt;<br />
+      &lt;title&gt;Excusas flojas'R'us&lt;/title&gt;<br />
+      &lt;/head&gt;<br />
+      &lt;body&gt;<br />
+      &lt;h1&gt;La excepcionalmente maravillosa página de Fred's se ha movido a<br />
+      &lt;a href="http://xyz.example.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
+      site.<br />
+      &lt;/h1&gt;<br />
+      &lt;/body&gt;<br />
+      &lt;/html&gt;
+    </code></p></div>
+
+    <div class="note"><h3>Notas:</h3>
+    <p>El servidor siempre añade una cabecera <code>Date:</code> y 
+    <code>Server:</code> a los datos que se devuelven al cliente, de manera que 
+    estos no deben incluirse en el fichero. El servidor <em>no</em> añade una 
+    cabecera <code>Last-Modified</code> ; probablemente debería.</p>
+    </div>
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Idiomas disponibles: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://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/trunk/mod/mod_asis.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 2017 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/quickreference.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
index 1a9ef2021c4aeb8876092c5d546dc6f885132490..8c42e5e4050d1e902118317945660703edc0647e 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Module Apache mod_asis</h1>
 <div class="toplang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
@@ -113,6 +114,7 @@ d'Apache httpd</a></li>
 </div>
 <div class="bottomlang">
 <p><span>Langues Disponibles: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
index 2a1752c6136ebf402fe056288ec1f638bc2e6543..85e836d9b639f2f850aa7ae794529ab2a9559ad4 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>Apache モジュール mod_asis</h1>
 <div class="toplang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
 <div class="bottomlang">
 <p><span>翻訳済み言語: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
index d156bdf540e6cdac82f665cf8432cb1775ec64c6..ad872473d6a7e36eb8ed5c6db274012288738845 100644 (file)
@@ -27,6 +27,7 @@
 <div id="preamble"><h1>¾ÆÆÄÄ¡ ¸ðµâ mod_asis</h1>
 <div class="toplang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" title="Korean">&nbsp;ko&nbsp;</a></p>
 </div>
 <div class="bottomlang">
 <p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/mod/mod_asis.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="../es/mod/mod_asis.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
 <a href="../fr/mod/mod_asis.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
 <a href="../ja/mod/mod_asis.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
 <a href="../ko/mod/mod_asis.html" title="Korean">&nbsp;ko&nbsp;</a></p>
diff --git a/docs/manual/mod/mod_asis.xml.es b/docs/manual/mod/mod_asis.xml.es
new file mode 100644 (file)
index 0000000..b1a0d9a
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.es.xsl"?>
+<!-- English Revision: 1673932 -->
+<!-- Spanish Translation: Daniel Ferradal <dferradal@apache.org> -->
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<modulesynopsis metafile="mod_asis.xml.meta">
+
+<name>mod_asis</name>
+<description>Envía ficheros que contienen sus propias 
+  cabeceras HTTP</description>
+<status>Base</status>
+<sourcefile>mod_asis.c</sourcefile>
+<identifier>asis_module</identifier>
+
+<summary>
+    <p>Este módulo provee el handler <code>send-as-is</code>
+      que hace que Apache HTTP Server envíe documentos sin añadir a ellos la 
+      mayoría de las cabeceras típicas de HTTP.</p>
+
+    <p>Esto se puede usar para enviar cualquier tipo de datos desde el servidor, 
+      incluyendo redirecciones y otras respuestas HTTP especiales, sin 
+      necesitar un script-cgi o un script nph.</p>
+
+    <p>Por razones históricas, este módulo también procesará cualquier fichero
+      con el tipo MIME <code>httpd/send-as-is</code>.</p>
+</summary>
+
+<seealso><module>mod_headers</module></seealso>
+<seealso><module>mod_cern_meta</module></seealso>
+<seealso><a href="../handler.html">Uso de Handler de Apache httpd</a></seealso>
+
+<section id="usage"><title>Uso</title>
+
+    <p>En el fichero de configuración del servidor, asociar ficheros con el 
+      handler <code>send-as-is</code> <em>p. ej.</em></p>
+
+    <highlight language="config">
+AddHandler send-as-is asis
+    </highlight>
+
+    <p>Los contenidos de cualquier fichero con la extensión <code>.asis</code> 
+    se enviarán por Apache httpd al cliente sin apenas cambios. En particular, 
+    las cabeceras HTTP provienen del propio fichero según las reglas de 
+    <module>mod_cgi</module>, así que un fichero "asis" debe incluir cabeceras 
+    válidas, y también puede usar la cabecera CGI 
+    <code>Status:</code> para determinar el código de la respuesta HTTP. La 
+    cabecera <code>Content-Length:</code> se insertará automáticamente, o si se 
+    incluye en el fichero, será corregida por httpd.</p>
+
+    <p>Aquí hay un ejemplo de un fichero cuyo contenido se envía 
+      <em>as is</em> (tal cual) para decirle al cliente que 
+      un fichero se ha redirigido.</p>
+
+    <example>
+      Status: 301 Y ahora donde he dejado esa URL<br />
+      Location: http://xyz.example.com/foo/bar.html<br />
+      Content-type: text/html<br />
+      <br />
+      &lt;html&gt;<br />
+      &lt;head&gt;<br />
+      &lt;title&gt;Excusas flojas'R'us&lt;/title&gt;<br />
+      &lt;/head&gt;<br />
+      &lt;body&gt;<br />
+      &lt;h1&gt;La excepcionalmente maravillosa página de Fred's se ha movido a<br />
+      &lt;a href="http://xyz.example.com/foo/bar.html"&gt;Joe's&lt;/a&gt;
+      site.<br />
+      &lt;/h1&gt;<br />
+      &lt;/body&gt;<br />
+      &lt;/html&gt;
+    </example>
+
+    <note><title>Notas:</title>
+    <p>El servidor siempre añade una cabecera <code>Date:</code> y 
+    <code>Server:</code> a los datos que se devuelven al cliente, de manera que 
+    estos no deben incluirse en el fichero. El servidor <em>no</em> añade una 
+    cabecera <code>Last-Modified</code> ; probablemente debería.</p>
+    </note>
+</section>
+
+</modulesynopsis>
index e8af141c7ca8ab32f768de57e8145c8ea9ea7765..5ab7fb01de92663c49390a14d4f60e2ced6d7a9d 100644 (file)
@@ -8,6 +8,7 @@
 
   <variants>
     <variant>en</variant>
+    <variant>es</variant>
     <variant>fr</variant>
     <variant outdated="yes">ja</variant>
     <variant outdated="yes">ko</variant>
index 92d1f3c0f3fb94cfdb6998626ce0cfddafbef5a9..8a0882c34c094a48b4c324624784451cded9eb07 100644 (file)
@@ -90,8 +90,8 @@
     <p>This directive specifies group membership that is required for the
     user to gain access.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-group team
-      AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-group team
+AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"</pre>
 
 
 
     <p>This directive specifies a query to be run indicating the user
     has logged in.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-login
-      AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
 
 
 
     <p>This directive specifies a query to be run indicating the user
     has logged out.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-logout
-      AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-logout
+AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"</pre>
 
 
 
index 3a00d84e3d4732aed2438646d82e6d5bcf005e55..482dc9ee4209a37ef979615acce8e76502a18a0a 100644 (file)
@@ -92,8 +92,8 @@ d'Apache</td></tr></table>
     <p>Cette directive permet de spécifier à quel groupe un utilisateur
     doit appartenir pour obtenir l'autorisation d'accès.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-group team
-      AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-group team
+AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"</pre>
 
 
 
@@ -103,8 +103,8 @@ d'Apache</td></tr></table>
     <p>Cette directive permet de spécifier une requête à exécuter pour
     indiquer que l'utilisateur s'est authentifié.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-login
-      AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"</pre>
 
 
 
@@ -114,8 +114,8 @@ d'Apache</td></tr></table>
     <p>Cette directive permet de spécifier une requête à exécuter pour
     indiquer que l'utilisateur s'est déconnecté.</p>
 
-    <pre class="prettyprint lang-config">      Require dbd-logout
-      AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"</pre>
+    <pre class="prettyprint lang-config">Require dbd-logout
+AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"</pre>
 
 
 
index 0292c86257f2ca0d00d5d1171198d8053f005662..db753de8a99474b3274635cef98063851b52e125 100644 (file)
@@ -69,8 +69,8 @@
     user to gain access.</p>
 
     <highlight language="config">
-      Require dbd-group team
-      AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
+Require dbd-group team
+AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
     </highlight>
 
 </section>
@@ -81,8 +81,8 @@
     has logged in.</p>
 
     <highlight language="config">
-      Require dbd-login
-      AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
+Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
     </highlight>
 
 </section>
@@ -93,8 +93,8 @@
     has logged out.</p>
 
     <highlight language="config">
-      Require dbd-logout
-      AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
+Require dbd-logout
+AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
     </highlight>
 
 </section>
index 9f9cf1c95683ec59efce3922866f668133aefa5b..be93acce799fe1d99ef328baf8a839efad83b6d0 100644 (file)
@@ -1,7 +1,7 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision : 1673892 -->
+<!-- English Revision : 1796296 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
 <status>Extension</status>
 <sourcefile>mod_authz_dbd.c</sourcefile>
 <identifier>authz_dbd_module</identifier>
-<compatibility>Disponible dans les version 2.4 et sup&eacute;rieures
+<compatibility>Disponible dans les version 2.4 et supérieures
 d'Apache</compatibility>
 
 <summary>
-    <p>Ce module fournit des fonctionnalit&eacute;s d'autorisation permettant
-    d'accorder ou de refuser aux utilisateurs authentifi&eacute;s l'acc&egrave;s &agrave;
-    certaines zones du site web en fonction de leur appartenance &agrave; tel
+    <p>Ce module fournit des fonctionnalités d'autorisation permettant
+    d'accorder ou de refuser aux utilisateurs authentifiés l'accès à
+    certaines zones du site web en fonction de leur appartenance à tel
     ou tel groupe. Les modules <module>mod_authz_groupfile</module> et
-    <module>mod_authz_dbm</module> fournissent une fonctionnalit&eacute;
-    similaire, mais ici le module interroge une base de donn&eacute;es SQL pour
-    d&eacute;terminer si un utilisateur appartient ou non &agrave; tel ou tel groupe.</p>
-    <p>Ce module peut aussi fournir des fonctionnalit&eacute;s de connexion
-    utilisateur s'appuyant sur une base de donn&eacute;es. Ceci prend le plus souvent
-    sens lorsque le module est utilis&eacute; conjointement avec
+    <module>mod_authz_dbm</module> fournissent une fonctionnalité
+    similaire, mais ici le module interroge une base de données SQL pour
+    déterminer si un utilisateur appartient ou non à tel ou tel groupe.</p>
+    <p>Ce module peut aussi fournir des fonctionnalités de connexion
+    utilisateur s'appuyant sur une base de données. Ceci prend le plus souvent
+    sens lorsque le module est utilisé conjointement avec
     <module>mod_authn_dbd</module>.</p>
-    <p>Ce module s'appuie sur <module>mod_dbd</module> pour sp&eacute;cifier le
-    pilote de la base de donn&eacute;es sous-jacente et les param&egrave;tres de
-    connexion, et g&eacute;rer les connexions &agrave; la base de donn&eacute;es.</p>
+    <p>Ce module s'appuie sur <module>mod_dbd</module> pour spécifier le
+    pilote de la base de données sous-jacente et les paramètres de
+    connexion, et gérer les connexions à la base de données.</p>
 </summary>
 
 <seealso><directive module="mod_authz_core">Require</directive></seealso>
@@ -61,7 +61,7 @@ d'Apache</compatibility>
     <p>Les directives <directive
     module="mod_authz_core">Require</directive> d'Apache permettent,
     au cours de la phase d'autorisation, de s'assurer qu'un utilisateur
-    est bien autoris&eacute; &agrave; acc&eacute;der &agrave; une ressource. mod_authz_dbd ajoute
+    est bien autorisé à accéder à une ressource. mod_authz_dbd ajoute
     les types d'autorisation <code>dbd-group</code>,
     <code>dbd-login</code> et <code>dbd-logout</code>.</p>
 
@@ -70,36 +70,36 @@ d'Apache</compatibility>
 
 <section id="reqgroup"><title>Require dbd-group</title>
 
-    <p>Cette directive permet de sp&eacute;cifier &agrave; quel groupe un utilisateur
-    doit appartenir pour obtenir l'autorisation d'acc&egrave;s.</p>
+    <p>Cette directive permet de spécifier à quel groupe un utilisateur
+    doit appartenir pour obtenir l'autorisation d'accès.</p>
 
     <highlight language="config">
-      Require dbd-group team
-      AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
+Require dbd-group team
+AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
     </highlight>
 
 </section>
 
 <section id="reqlogin"><title>Require dbd-login</title>
 
-    <p>Cette directive permet de sp&eacute;cifier une requ&ecirc;te &agrave; ex&eacute;cuter pour
-    indiquer que l'utilisateur s'est authentifi&eacute;.</p>
+    <p>Cette directive permet de spécifier une requête à exécuter pour
+    indiquer que l'utilisateur s'est authentifié.</p>
 
     <highlight language="config">
-      Require dbd-login
-      AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
+Require dbd-login
+AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
     </highlight>
 
 </section>
 
 <section id="reqlogout"><title>Require dbd-logout</title>
 
-    <p>Cette directive permet de sp&eacute;cifier une requ&ecirc;te &agrave; ex&eacute;cuter pour
-    indiquer que l'utilisateur s'est d&eacute;connect&eacute;.</p>
+    <p>Cette directive permet de spécifier une requête à exécuter pour
+    indiquer que l'utilisateur s'est déconnecté.</p>
 
     <highlight language="config">
-      Require dbd-logout
-      AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
+Require dbd-logout
+AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
     </highlight>
 
 </section>
@@ -107,35 +107,35 @@ d'Apache</compatibility>
 </section>
 
 <section id="login">
-<title>Connexion s'appuyant sur une base de donn&eacute;es</title>
+<title>Connexion s'appuyant sur une base de données</title>
 <p>
-Outre sa fonction d'autorisation standard consistant &agrave; v&eacute;rifier
-l'appartenance &agrave; des groupes, ce module permet &eacute;galement de g&eacute;rer des
-sessions utilisateur c&ocirc;t&eacute; serveur gr&acirc;ce &agrave; sa fonctionnalit&eacute; de gestion de login/logout
-via base de donn&eacute;es. En particulier, il peut mettre &agrave;
-jour le statut de session de l'utilisateur dans la base de donn&eacute;es
-chaque fois que celui-ci visite certaines URLs (sous r&eacute;serve bien
+Outre sa fonction d'autorisation standard consistant à vérifier
+l'appartenance à des groupes, ce module permet également de gérer des
+sessions utilisateur côté serveur grâce à sa fonctionnalité de gestion de login/logout
+via base de données. En particulier, il peut mettre à
+jour le statut de session de l'utilisateur dans la base de données
+chaque fois que celui-ci visite certaines URLs (sous réserve bien
 entendu que l'utilisateur fournisse les informations de connexion
-n&eacute;cessaires).</p>
+nécessaires).</p>
 <p>Pour cela, il faut definir deux directives <directive
-module="mod_authz_core">Require</directive> sp&eacute;ciales : <code>Require
-dbd-login</code> et <code>Require dbd-logout</code>. Pour les d&eacute;tails de
+module="mod_authz_core">Require</directive> spéciales : <code>Require
+dbd-login</code> et <code>Require dbd-logout</code>. Pour les détails de
 leur utilisation, voir l'exemple de configuration ci-dessous.</p>
 </section>
 
 <section id="client">
-<title>Int&eacute;gration des ouvertures de sessions c&ocirc;t&eacute; client</title>
-<p>Pour les administrateurs qui d&eacute;sirent impl&eacute;menter une gestion de
-session c&ocirc;t&eacute; client fonctionnant de concert avec les fonctionnalit&eacute;s de
-connexion/d&eacute;connexion c&ocirc;t&eacute; serveur offertes par ce module, il est possible
-de d&eacute;finir ou en d'annuler par exemple un cookie HTTP ou un jeton
-de connextion lorsqu'un utilisateur se connecte ou se d&eacute;connecte.</p>
-<p> Pour supporter une telle int&eacute;gration, <module>mod_authz_dbd</module> exporte
-un d&eacute;clenchement optionnel (hook) qui sera lanc&eacute; chaque fois
-que le statut d'un utilisateur sera mis &agrave; jour dans la base de donn&eacute;es.
+<title>Intégration des ouvertures de sessions côté client</title>
+<p>Pour les administrateurs qui désirent implémenter une gestion de
+session côté client fonctionnant de concert avec les fonctionnalités de
+connexion/déconnexion côté serveur offertes par ce module, il est possible
+de définir ou en d'annuler par exemple un cookie HTTP ou un jeton
+de connextion lorsqu'un utilisateur se connecte ou se déconnecte.</p>
+<p> Pour supporter une telle intégration, <module>mod_authz_dbd</module> exporte
+un déclenchement optionnel (hook) qui sera lancé chaque fois
+que le statut d'un utilisateur sera mis à jour dans la base de données.
 D'autres modules de gestion de session pourront alors utiliser ce
-d&eacute;clencheur pour utiliser des fonctions d'ouverture et de
-fermeture de sessions c&ocirc;t&eacute; client.</p>
+déclencheur pour utiliser des fonctions d'ouverture et de
+fermeture de sessions côté client.</p>
 </section>
 
 <section id="example">
@@ -157,7 +157,7 @@ DBDExptime 300
   AuthName Team
   AuthBasicProvider dbd
 
-  # requ&ecirc;te SQL de mod_authn_dbd pour authentifier un utilisateur qui se
+  # requête SQL de mod_authn_dbd pour authentifier un utilisateur qui se
   # connecte
   AuthDBDUserPWQuery \
     "SELECT password FROM authn WHERE user = %s AND login = 'true'"
@@ -168,28 +168,28 @@ DBDExptime 300
   # configuration de mod_authz_dbd
   AuthzDBDQuery "SELECT group FROM authz WHERE user = %s"
 
-  # lorsqu'un utilisateur &eacute;choue dans sa tentative d'authentification ou
-  # d'autorisation, on l'invite &agrave; se connecter ; cette page doit
+  # lorsqu'un utilisateur échoue dans sa tentative d'authentification ou
+  # d'autorisation, on l'invite à se connecter ; cette page doit
   # contenir un lien vers /team-private/login.html
   ErrorDocument 401 /login-info.html
 
   &lt;Files "login.html"&gt;
-    # il n'est pas n&eacute;cessaire que l'utilisateur soit d&eacute;j&agrave; connect&eacute; !
+    # il n'est pas nécessaire que l'utilisateur soit déjà connecté !
     AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
 
-    # le processus de connexion dbd ex&eacute;cute une requ&ecirc;te pour enregistrer
+    # le processus de connexion dbd exécute une requête pour enregistrer
     # la connexion de l'utilisateur
     Require dbd-login
     AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
 
     # redirige l'utilisateur vers la page d'origine (si elle existe)
-    # apr&egrave;s une connexion r&eacute;ussie
+    # après une connexion réussie
     AuthzDBDLoginToReferer On
   &lt;/Files&gt;
 
   &lt;Files "logout.html"&gt;
-    # le processus de d&eacute;connexion dbd ex&eacute;cute une requ&ecirc;te pour
-    # enregistrer la d&eacute;connexion de l'utilisateur
+    # le processus de déconnexion dbd exécute une requête pour
+    # enregistrer la déconnexion de l'utilisateur
     Require dbd-logout
     AuthzDBDQuery "UPDATE authn SET login = 'false' WHERE user = %s"
   &lt;/Files&gt;
@@ -198,43 +198,43 @@ DBDExptime 300
 </section>
 
 <section id="security">
-<title>Pr&eacute;vention contre les injections SQL</title>
-  <p>Selon le pilote DBD choisi et le serveur d'arri&egrave;re-plan que vous utilisez,
-  vous devrez prendre garde &agrave; la s&eacute;curit&eacute; dans le domaine SQL.
-  Avec la plupart des pilotes, vous n'avez rien &agrave; faire : la
-  requ&ecirc;te est pr&eacute;par&eacute;e par la base de donn&eacute;es au d&eacute;marrage, et l'entr&eacute;e
-  utilisateur n'est utilis&eacute;e qu'en tant que donn&eacute;e. Mais vous aurez
-  peut-&ecirc;tre &agrave; nettoyer cette entr&eacute;e. Au moment o&ugrave; ces lignes sont
-  &eacute;crites, le seul pilote DBD qui peut n&eacute;cessiter le nettoyage de l'entr&eacute;e
+<title>Prévention contre les injections SQL</title>
+  <p>Selon le pilote DBD choisi et le serveur d'arrière-plan que vous utilisez,
+  vous devrez prendre garde à la sécurité dans le domaine SQL.
+  Avec la plupart des pilotes, vous n'avez rien à faire : la
+  requête est préparée par la base de données au démarrage, et l'entrée
+  utilisateur n'est utilisée qu'en tant que donnée. Mais vous aurez
+  peut-être à nettoyer cette entrée. Au moment où ces lignes sont
+  écrites, le seul pilote DBD qui peut nécessiter le nettoyage de l'entrée
   est FreeTDS.</p>
-  <p>Veuillez vous r&eacute;f&eacute;rez &agrave; la documentation de
-  <module>mod_dbd</module> pour plus d'informations &agrave; propos de la
-  s&eacute;curit&eacute; dans ce domaine.</p>
+  <p>Veuillez vous référez à la documentation de
+  <module>mod_dbd</module> pour plus d'informations à propos de la
+  sécurité dans ce domaine.</p>
 </section>
 
 <directivesynopsis>
 <name>AuthzDBDQuery</name>
-<description>D&eacute;finit la requ&ecirc;te SQL pour l'op&eacute;ration
+<description>Définit la requête SQL pour l'opération
 requise</description>
-<syntax>AuthzDBDQuery <var>requ&ecirc;te</var></syntax>
+<syntax>AuthzDBDQuery <var>requête</var></syntax>
 <contextlist><context>directory</context></contextlist>
 
 <usage>
     <p>La directive <directive>AuthzDBDQuery</directive> permet de
-    sp&eacute;cifier une requ&ecirc;te SQL &agrave; ex&eacute;cuter. Le but de cette requ&ecirc;te d&eacute;pend
+    spécifier une requête SQL à exécuter. Le but de cette requête dépend
     de la directive <directive
     module="mod_authz_core">Require</directive> en cours de
     traitement.</p>
     <ul>
-    <li>Avec la directive <code>Require dbd-group</code>, elle sp&eacute;cifie
-    une requ&ecirc;te permettant de rechercher les groupes d'appartenance de
-    l'utilisateur courant. Ceci correspond &agrave; la fonctionnalit&eacute; standard
+    <li>Avec la directive <code>Require dbd-group</code>, elle spécifie
+    une requête permettant de rechercher les groupes d'appartenance de
+    l'utilisateur courant. Ceci correspond à la fonctionnalité standard
     d'autres modules d'autorisation comme
     <module>mod_authz_groupfile</module> et
     <module>mod_authz_dbm</module>.
-    La premi&egrave;re colonne de chaque enregistrement renvoy&eacute; par la requ&ecirc;te
-    doit contenir une cha&icirc;ne de caract&egrave;res correspondant &agrave; un nom de
-    groupe. La requ&ecirc;te peut renvoyer z&eacute;ro, un ou plusieurs
+    La première colonne de chaque enregistrement renvoyé par la requête
+    doit contenir une chaîne de caractères correspondant à un nom de
+    groupe. La requête peut renvoyer zéro, un ou plusieurs
     enregistrements.
     <highlight language="config">
 Require dbd-group
@@ -242,10 +242,10 @@ AuthzDBDQuery "SELECT group FROM groups WHERE user = %s"
 </highlight>
     </li>
     <li>Avec la directive <code>Require dbd-login</code> ou
-    <code>Require dbd-logout</code>, elle ne refusera jamais l'acc&egrave;s,
-    mais au contraire ex&eacute;cutera une requ&ecirc;te SQL permettant d'enregistrer
-    la connexion ou la d&eacute;connexion de l'utilisateur. Ce dernier doit
-    &ecirc;tre d&eacute;j&agrave; authentifi&eacute; avec <module>mod_authn_dbd</module>.
+    <code>Require dbd-logout</code>, elle ne refusera jamais l'accès,
+    mais au contraire exécutera une requête SQL permettant d'enregistrer
+    la connexion ou la déconnexion de l'utilisateur. Ce dernier doit
+    être déjà authentifié avec <module>mod_authn_dbd</module>.
     <highlight language="config">
 Require dbd-login
 AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
@@ -253,56 +253,56 @@ AuthzDBDQuery "UPDATE authn SET login = 'true' WHERE user = %s"
     </li>
     </ul>
     <p>Dans tous les cas, l'identifiant utilisateur sera transmis comme
-    param&egrave;tre sous la forme d'une simple cha&icirc;ne lorsque la requ&ecirc;te SQL
-    sera ex&eacute;cut&eacute;e. Il y sera fait r&eacute;f&eacute;rence dans la requ&ecirc;te en utilisant
-    le sp&eacute;cificateur de format <code>%s</code>.</p>
+    paramètre sous la forme d'une simple chaîne lorsque la requête SQL
+    sera exécutée. Il y sera fait référence dans la requête en utilisant
+    le spécificateur de format <code>%s</code>.</p>
 </usage>
 </directivesynopsis>
 
 <directivesynopsis>
 <name>AuthzDBDRedirectQuery</name>
-<description>D&eacute;finit une requ&ecirc;te pour rechercher une page vers laquelle
-rediriger l'utilisateur apr&egrave;s une connexion r&eacute;ussie</description>
-<syntax>AuthzDBDRedirectQuery <var>requ&ecirc;te</var></syntax>
+<description>Définit une requête pour rechercher une page vers laquelle
+rediriger l'utilisateur après une connexion réussie</description>
+<syntax>AuthzDBDRedirectQuery <var>requête</var></syntax>
 <contextlist><context>directory</context></contextlist>
 
 <usage>
-    <p>Sp&eacute;cifie une requ&ecirc;te SQL optionnelle &agrave; utiliser apr&egrave;s une
-    connexion (ou une d&eacute;connexion) r&eacute;ussie pour rediriger l'utilisateur
-    vers une URL, qui peut &ecirc;tre sp&eacute;cifique &agrave; l'utilisateur.
-    L'identifiant utilisateur sera transmis comme param&egrave;tre sous la
-    forme d'une simple cha&icirc;ne lorsque la requ&ecirc;te SQL sera ex&eacute;cut&eacute;e. Il y
-    sera fait r&eacute;f&eacute;rence dans la requ&ecirc;te en utilisant le sp&eacute;cificateur de
+    <p>Spécifie une requête SQL optionnelle à utiliser après une
+    connexion (ou une déconnexion) réussie pour rediriger l'utilisateur
+    vers une URL, qui peut être spécifique à l'utilisateur.
+    L'identifiant utilisateur sera transmis comme paramètre sous la
+    forme d'une simple chaîne lorsque la requête SQL sera exécutée. Il y
+    sera fait référence dans la requête en utilisant le spécificateur de
     format <code>%s</code>.</p>
     <highlight language="config">
 AuthzDBDRedirectQuery "SELECT userpage FROM userpages WHERE user = %s"
 </highlight>
-    <p>La premi&egrave;re colonne du premier enregistrement renvoy&eacute; par la
-    requ&ecirc;te doit contenir une cha&icirc;ne de caract&egrave;res correspondant &agrave; une
+    <p>La première colonne du premier enregistrement renvoyé par la
+    requête doit contenir une chaîne de caractères correspondant à une
     URL vers laquelle rediriger le client. Les enregistrements suivants
-    sont ignor&eacute;s. Si aucun enregistrement n'est renvoy&eacute;, le client ne
-    sera pas redirig&eacute;.</p>
+    sont ignorés. Si aucun enregistrement n'est renvoyé, le client ne
+    sera pas redirigé.</p>
     <p>Notez que <directive>AuthzDBDLoginToReferer</directive> l'emporte
-    sur cette directive si les deux sont d&eacute;finies.</p>
+    sur cette directive si les deux sont définies.</p>
 </usage>
 </directivesynopsis>
 
 <directivesynopsis>
 <name>AuthzDBDLoginToReferer</name>
-<description>D&eacute;finit si le client doit &ecirc;tre redirig&eacute; vers la page
-d'origine en cas de connexion ou de d&eacute;connexion r&eacute;ussie si une en-t&ecirc;te
-de requ&ecirc;te <code>Referer</code> est pr&eacute;sente</description>
+<description>Définit si le client doit être redirigé vers la page
+d'origine en cas de connexion ou de déconnexion réussie si une en-tête
+de requête <code>Referer</code> est présente</description>
 <syntax>AuthzDBDLoginToReferer On|Off</syntax>
 <default>AuthzDBDLoginToReferer Off</default>
 <contextlist><context>directory</context></contextlist>
 
 <usage>
-    <p>Utilis&eacute;e en conjonction avec <code>Require dbd-login</code> ou
+    <p>Utilisée en conjonction avec <code>Require dbd-login</code> ou
     <code>Require dbd-logout</code>, cette directive permet de rediriger
-    le client vers la page d'origine (l'URL contenue dans l'en-t&ecirc;te
-    de requ&ecirc;te HTTP <code>Referer</code>, s'il est pr&eacute;sent). En
-    l'absence d'en-t&ecirc;te <code>Referer</code>, la d&eacute;finition
-    <code>AuthzDBDLoginToReferer On</code> sera ignor&eacute;e.</p>
+    le client vers la page d'origine (l'URL contenue dans l'en-tête
+    de requête HTTP <code>Referer</code>, s'il est présent). En
+    l'absence d'en-tête <code>Referer</code>, la définition
+    <code>AuthzDBDLoginToReferer On</code> sera ignorée.</p>
 </usage>
 </directivesynopsis>
 
index bf3957795830b45ccc12bc6e6cfbc128ceafdb4a..ea4fed2fe52c14e481800ba5aa899803e3bb2d19 100644 (file)
@@ -259,7 +259,8 @@ ProxyVia On
 
       <p>This will create a worker associated with the origin server URL
       <code>http://backend.example.com</code> that will use the given timeout
-      values. When used in a forward proxy, workers are usually defined
+      values. All timeouts use the <a href="directive-dict.html#Syntax">time-interval</a>
+      directive syntax. When used in a forward proxy, workers are usually defined
       via the <code class="directive"><a href="#proxyset">ProxySet</a></code> directive:</p>
 
       <pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
@@ -1189,7 +1190,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
         <td>Connect timeout in seconds.
         The number of seconds Apache httpd waits for the creation of a connection to
         the backend to complete. By adding a postfix of ms, the timeout can be
-        also set in milliseconds.
+        also set in milliseconds. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax
     </td></tr>
     <tr><td>disablereuse</td>
         <td>Off</td>
@@ -1222,6 +1223,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
         <td>10</td>
         <td>The time to wait for additional input, in milliseconds, before
         flushing the output brigade if 'flushpackets' is 'auto'.
+        Uses <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>iobuffersize</td>
         <td>8192</td>
@@ -1240,7 +1242,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
     <p>The frequency of initial and subsequent TCP keepalive probes
     depends on global OS settings, and may be as high as 2 hours. To be useful,
     the frequency configured in the OS must be smaller than the threshold used
-    by the firewall.</p>
+    by the firewall. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.</p>
     </td></tr>
     <tr><td>lbset</td>
         <td>0</td>
@@ -1267,7 +1269,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
         which could be an issue, but it will lower the
         traffic in case some of the cluster nodes are down or busy.
         By adding a postfix of ms, the delay can be also set in
-        milliseconds.
+        milliseconds. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>receivebuffersize</td>
         <td>0</td>
@@ -1292,6 +1294,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
     expires. This enables to shut down the backend server for maintenance
     and bring it back online later. A value of 0 means always retry workers
     in an error state with no timeout.
+    Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>route</td>
         <td>-</td>
@@ -1323,13 +1326,14 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
         <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
         <td>Connection timeout in seconds.
         The number of seconds Apache httpd waits for data sent by / to the backend.
+        Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>ttl</td>
         <td>-</td>
         <td>Time to live for inactive connections and associated connection
         pool entries, in seconds.  Once reaching this limit, a
         connection will not be used again; it will be closed at some
-        later time.
+        later time. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>flusher</td>
         <td>flush</td>
@@ -1408,6 +1412,7 @@ ProxyPass "/mirror/foo"   "http://backend.example.com"</pre>
         <td>0</td>
         <td>Balancer timeout in seconds. If set, this will be the maximum time
         to wait for a free worker. The default is to not wait.
+        Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>failonstatus</td>
         <td>-</td>
@@ -1962,7 +1967,7 @@ expressions</td></tr>
 <div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Value of <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
index b286cad7014913b85a520b93016096a5173cfc8d..948db5c4ea8425c59187ee2c8c65a7411d62a368 100644 (file)
@@ -279,11 +279,12 @@ ProxyVia On
 </div>
       
 
-      <p>Cette directive va créer un worker associé à l'URL du serveur
-      original <code>http://backend.example.com</code>, qui utilisera les
-      valeurs de timeout données. Lorsqu'ils sont utilisés dans le cadre
-      d'un mandataire direct, les workers sont en général définis via la
-      directive <code class="directive"><a href="#proxyset">ProxySet</a></code>,</p>
+      <p>Cette directive va créer un worker associé à l'URL du serveur original
+      <code>http://backend.example.com</code>, qui utilisera les valeurs de
+      timeout données. Toutes les spécifications de timeouts utilisent la
+      syntaxe <a href="directive-dict.html#Syntax">time-interval</a>. Lorsqu'ils
+      sont utilisés dans le cadre d'un mandataire direct, les workers sont en
+      général définis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p>
 
       <div class="example"><pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
 </div>
@@ -1329,7 +1330,7 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
         La durée en secondes pendant laquelle Apache httpd va attendre pour
        l'établissement d'une connexion vers le serveur d'arrière-plan.
        Le délai peut être spécifié en millisecondes en ajoutant le
-       suffixe ms.
+       suffixe ms. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>disablereuse</td>
         <td>Off</td>
@@ -1365,7 +1366,7 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
         <td>10</td>
         <td>Le délai d'attente pour une entrée additionnelle, en
        millisecondes, avant le vidage du tampon en sortie dans le cas
-       où 'flushpackets' est à 'auto'.
+       où 'flushpackets' est à 'auto'. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>iobuffersize</td>
         <td>8192</td>
@@ -1388,7 +1389,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
     <p>La fréquence de vérification des connexions TCP persistantes
     initiale et subséquentes dépend de la configuration globale de l'OS,
     et peut atteindre 2 heures. Pour être utile, la fréquence configurée
-    dans l'OS doit être inférieure au seuil utilisé par le pare-feu.</p>
+    dans l'OS doit être inférieure au seuil utilisé par le pare-feu. Utilise la
+    syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.</p>
 
     </td></tr>
     <tr><td>lbset</td>
@@ -1422,7 +1424,7 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
        cas où les noeuds de cluster sont arrêtés ou
        surchargés. Le délai peut
        aussi être défini en millisecondes en ajoutant le suffixe
-       ms.
+       ms. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>receivebuffersize</td>
         <td>0</td>
@@ -1450,7 +1452,7 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
        spécifié. Ceci permet d'arrêter le serveur d'arrière-plan pour
        maintenance, et de le remettre en ligne plus tard. Une valeur de
        0 implique de toujours essayer les serveurs cibles dans un état d'erreur
-       sans délai.
+       sans délai. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>route</td>
         <td>-</td>
@@ -1488,14 +1490,14 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
         <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
         <td>Délai d'attente de la connexion en secondes. Le nombre de
        secondes pendant lesquelles Apache httpd attend l'envoi de
-       données vers le serveur d'arrière-plan.
+       données vers le serveur d'arrière-plan. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>ttl</td>
         <td>-</td>
         <td>Durée de vie des connexions inactives et des entrées du pool
        de connexions associées en secondes. Une fois cette
        limite atteinte, une connexion ne sera pas réutilisée ; elle
-       sera fermée après un délai variable.
+       sera fermée après un délai variable. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>flusher</td>
         <td>flush</td>
@@ -1591,7 +1593,7 @@ ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
         <td>Délai du répartiteur en secondes. Si ce paramètre est
        défini, sa valeur correspond à la durée maximale d'attente pour
        un serveur cible libre. Le comportement par défaut est de ne pas
-       attendre.
+       attendre. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>failonstatus</td>
         <td>-</td>
@@ -2225,7 +2227,7 @@ mod_status</td></tr>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Délai d'attente réseau pour les requêtes
 mandatées</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>secondes</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration du serveur, serveur virtuel</td></tr>
 <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
index d9b894cf447f25fa58ee4eea2fa3c1f308538450..746436f18cc2f002c9518dba8ac0fe5cf764f3e4 100644 (file)
@@ -217,7 +217,8 @@ ProxyPass "/example" "http://backend.example.com" connectiontimeout=5 timeout=30
 
       <p>This will create a worker associated with the origin server URL
       <code>http://backend.example.com</code> that will use the given timeout
-      values. When used in a forward proxy, workers are usually defined
+      values. All timeouts use the <a href="directive-dict.html#Syntax">time-interval</a>
+      directive syntax. When used in a forward proxy, workers are usually defined
       via the <directive module="mod_proxy">ProxySet</directive> directive:</p>
 
       <highlight language="config">
@@ -1061,7 +1062,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
         <td>Connect timeout in seconds.
         The number of seconds Apache httpd waits for the creation of a connection to
         the backend to complete. By adding a postfix of ms, the timeout can be
-        also set in milliseconds.
+        also set in milliseconds. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax
     </td></tr>
     <tr><td>disablereuse</td>
         <td>Off</td>
@@ -1094,6 +1095,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
         <td>10</td>
         <td>The time to wait for additional input, in milliseconds, before
         flushing the output brigade if 'flushpackets' is 'auto'.
+        Uses <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>iobuffersize</td>
         <td>8192</td>
@@ -1112,7 +1114,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
     <p>The frequency of initial and subsequent TCP keepalive probes
     depends on global OS settings, and may be as high as 2 hours. To be useful,
     the frequency configured in the OS must be smaller than the threshold used
-    by the firewall.</p>
+    by the firewall. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.</p>
     </td></tr>
     <tr><td>lbset</td>
         <td>0</td>
@@ -1139,7 +1141,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
         which could be an issue, but it will lower the
         traffic in case some of the cluster nodes are down or busy.
         By adding a postfix of ms, the delay can be also set in
-        milliseconds.
+        milliseconds. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>receivebuffersize</td>
         <td>0</td>
@@ -1164,6 +1166,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
     expires. This enables to shut down the backend server for maintenance
     and bring it back online later. A value of 0 means always retry workers
     in an error state with no timeout.
+    Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>route</td>
         <td>-</td>
@@ -1195,13 +1198,14 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
         <td><directive module="mod_proxy">ProxyTimeout</directive></td>
         <td>Connection timeout in seconds.
         The number of seconds Apache httpd waits for data sent by / to the backend.
+        Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>ttl</td>
         <td>-</td>
         <td>Time to live for inactive connections and associated connection
         pool entries, in seconds.  Once reaching this limit, a
         connection will not be used again; it will be closed at some
-        later time.
+        later time. Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>flusher</td>
         <td>flush</td>
@@ -1280,6 +1284,7 @@ ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300
         <td>0</td>
         <td>Balancer timeout in seconds. If set, this will be the maximum time
         to wait for a free worker. The default is to not wait.
+        Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.
     </td></tr>
     <tr><td>failonstatus</td>
         <td>-</td>
@@ -1864,7 +1869,7 @@ NoProxy         .example.com 192.168.112.0/21
 <directivesynopsis>
 <name>ProxyTimeout</name>
 <description>Network timeout for proxied requests</description>
-<syntax>ProxyTimeout <var>seconds</var></syntax>
+<syntax>ProxyTimeout <var>time-interval</var>[s]</syntax>
 <default>Value of <directive module="core">Timeout</directive></default>
 <contextlist><context>server config</context><context>virtual host</context>
 </contextlist>
index 3a3fe894f4317a578f593c3fac0a5d8524b2298d..8f8d5f4dba8f79cc17d48b2ec026f186d2aa61a5 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1792092 -->
+<!-- English Revision: 1799463 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
@@ -237,11 +237,13 @@ ProxyVia On
       </example>
       
 
-      <p>Cette directive va créer un worker associé à l'URL du serveur
-      original <code>http://backend.example.com</code>, qui utilisera les
-      valeurs de timeout données. Lorsqu'ils sont utilisés dans le cadre
-      d'un mandataire direct, les workers sont en général définis via la
-      directive <directive module="mod_proxy">ProxySet</directive>,</p>
+      <p>Cette directive va créer un worker associé à l'URL du serveur original
+      <code>http://backend.example.com</code>, qui utilisera les valeurs de
+      timeout données. Toutes les spécifications de timeouts utilisent la
+      syntaxe <a href="directive-dict.html#Syntax">time-interval</a>. Lorsqu'ils
+      sont utilisés dans le cadre d'un mandataire direct, les workers sont en
+      général définis via la directive <directive
+      module="mod_proxy">ProxySet</directive> :</p>
 
       <example>
       <highlight language="config">
@@ -1202,7 +1204,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
         La durée en secondes pendant laquelle Apache httpd va attendre pour
        l'établissement d'une connexion vers le serveur d'arrière-plan.
        Le délai peut être spécifié en millisecondes en ajoutant le
-       suffixe ms.
+       suffixe ms. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>disablereuse</td>
         <td>Off</td>
@@ -1238,7 +1241,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
         <td>10</td>
         <td>Le délai d'attente pour une entrée additionnelle, en
        millisecondes, avant le vidage du tampon en sortie dans le cas
-       où 'flushpackets' est à 'auto'.
+       où 'flushpackets' est à 'auto'. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>iobuffersize</td>
         <td>8192</td>
@@ -1261,7 +1265,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
     <p>La fréquence de vérification des connexions TCP persistantes
     initiale et subséquentes dépend de la configuration globale de l'OS,
     et peut atteindre 2 heures. Pour être utile, la fréquence configurée
-    dans l'OS doit être inférieure au seuil utilisé par le pare-feu.</p>
+    dans l'OS doit être inférieure au seuil utilisé par le pare-feu. Utilise la
+    syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.</p>
 
     </td></tr>
     <tr><td>lbset</td>
@@ -1295,7 +1300,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
        cas où les noeuds de cluster sont arrêtés ou
        surchargés. Le délai peut
        aussi être défini en millisecondes en ajoutant le suffixe
-       ms.
+       ms. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>receivebuffersize</td>
         <td>0</td>
@@ -1323,7 +1329,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
        spécifié. Ceci permet d'arrêter le serveur d'arrière-plan pour
        maintenance, et de le remettre en ligne plus tard. Une valeur de
        0 implique de toujours essayer les serveurs cibles dans un état d'erreur
-       sans délai.
+       sans délai. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>route</td>
         <td>-</td>
@@ -1361,14 +1368,16 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
         <td><directive module="mod_proxy">ProxyTimeout</directive></td>
         <td>Délai d'attente de la connexion en secondes. Le nombre de
        secondes pendant lesquelles Apache httpd attend l'envoi de
-       données vers le serveur d'arrière-plan.
+       données vers le serveur d'arrière-plan. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>ttl</td>
         <td>-</td>
         <td>Durée de vie des connexions inactives et des entrées du pool
        de connexions associées en secondes. Une fois cette
        limite atteinte, une connexion ne sera pas réutilisée ; elle
-       sera fermée après un délai variable.
+       sera fermée après un délai variable. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>flusher</td>
         <td>flush</td>
@@ -1464,7 +1473,8 @@ ProxyPass "/mirror/foo" "http://backend.example.com"
         <td>Délai du répartiteur en secondes. Si ce paramètre est
        défini, sa valeur correspond à la durée maximale d'attente pour
        un serveur cible libre. Le comportement par défaut est de ne pas
-       attendre.
+       attendre. Utilise la syntaxe <a
+       href="directive-dict.html#Syntax">time-interval</a>.
     </td></tr>
     <tr><td>failonstatus</td>
         <td>-</td>
@@ -2131,7 +2141,7 @@ NoProxy         .example.com 192.168.112.0/21
 <name>ProxyTimeout</name>
 <description>Délai d'attente réseau pour les requêtes
 mandatées</description>
-<syntax>ProxyTimeout <var>secondes</var></syntax>
+<syntax>ProxyTimeout <var>time-interval</var>[s]</syntax>
 <default>Valeur de la directive <directive
 module="core">Timeout</directive></default>
 <contextlist><context>server config</context><context>virtual host</context>
index 1a5bfa87b62cb9bc4ddb112f03ea779f181f27bf..bb474e9cf724c8d172d3ddb5e823f208d7bac768 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 344971:1792092 (outdated) -->
+<!-- English Revision: 344971:1799463 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 42faf3790920958877ea0fda560c3207cb0d5d8f..525103291ce4bfbd1070a72e71005e52daf6b85d 100644 (file)
@@ -80,7 +80,7 @@
         <td>Number of failed health check tests before worker is disabled</td></tr>
     <tr><td>hcinterval</td>
         <td>30</td>
-        <td>Period of health checks in seconds (e.g. performed every 30 seconds)</td></tr>
+        <td>Period of health checks in seconds (e.g. performed every 30 seconds). Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.. </td></tr>
     <tr><td>hcuri</td>
         <td>&nbsp;</td>
         <td>Additional URI to be appended to the worker URL for the health check.</td></tr>
index 52e598c366dd0d9cb6e627ac2156f230e18041d0..ae30c04c9d5afc118bbf5b7ad3151b7ce9b4a90b 100644 (file)
@@ -78,7 +78,7 @@
         <td>Number of failed health check tests before worker is disabled</td></tr>
     <tr><td>hcinterval</td>
         <td>30</td>
-        <td>Period of health checks in seconds (e.g. performed every 30 seconds)</td></tr>
+        <td>Period of health checks in seconds (e.g. performed every 30 seconds). Uses the <a href="directive-dict.html#Syntax">time-interval</a> directive syntax.. </td></tr>
     <tr><td>hcuri</td>
         <td>&nbsp;</td>
         <td>Additional URI to be appended to the worker URL for the health check.</td></tr>
index 41afed05487cb174f99322eb95f2ec7686506cbb..111adfc81ef0e2a4670fd3e8134f9f41071b0f5d 100644 (file)
@@ -55,7 +55,9 @@ ProxyPass "/wss2/" "wss://echo.websocket.org/"
 <p>In fact the module can be used to upgrade to other protocols, you can set the <code>upgrade</code>
 parameter in the <directive type="ProxyPass" module="mod_proxy">ProxyPass</directive>
 directive to allow the module to accept other protocol.
-NONE means you bypass the check for the header but still upgrade to WebSocket.</p>
+NONE means you bypass the check for the header but still upgrade to WebSocket.
+ANY means that <code>Upgrade</code> will read in the request headers and use
+in the response <code>Upgrade</code></p>
 </summary>
 
 <seealso><module>mod_proxy</module></seealso>
index 2d2c62122b3133ba807413c286fa393a702c706a..70ab42e76e8520716e16df79756c0562c6ddc13c 100644 (file)
@@ -1037,6 +1037,13 @@ RewriteRule  "^/$"                 "/homepage.std.html"     [L]</pre>
          URL.  Available in 2.4.26 and later.</p>
       </dd>
 
+      <dt><code>LongURLOptimization</code></dt>
+      <dd>
+      <p>This option reduces memory usage of long, unoptimized rule sets 
+         that repeatedly expand long values in RewriteCond and RewriteRule
+         variables. Available in 2.5 and later.</p>
+      </dd>
+
       </dl>
 
 </div>
index c697b9f5eb4b871e3c2ebd59c9a6b65a27005cc7..8061b7bd246bc28491b7499d1df225475d43419f 100644 (file)
@@ -1108,6 +1108,14 @@ pour le moteur de r
       2.4.26 du serveur HTTP Apache.</p>
       </dd>
 
+      <dt><code>LongURLOptimization</code></dt>
+      <dd>
+      <p>Cette option permet de réduire la consommation de mémoire des jeux de
+      règles longs et non optimisés qui enregistrent de manière répétitive de
+      longues valeurs dans des variables au sein des directives RewriteCond et
+      RewriteRule. Disponible à partir de la version 2.5 du serveur HTTP Apache.</p>
+      </dd>
+
       </dl>
 
 </div>
index 7c5a2b5c9e4c9164b4b9190393aa2bb6230d82b6..d4e984e8df5cbfd7a0f2058cc2f7d0793f44e873 100644 (file)
@@ -291,6 +291,13 @@ LogLevel alert rewrite:trace3
          URL.  Available in 2.4.26 and later.</p>
       </dd>
 
+      <dt><code>LongURLOptimization</code></dt>
+      <dd>
+      <p>This option reduces memory usage of long, unoptimized rule sets 
+         that repeatedly expand long values in RewriteCond and RewriteRule
+         variables. Available in 2.5 and later.</p>
+      </dd>
+
       </dl>
 </usage>
 
index 06735d64cc7582811de8dffc52f360d792e98392..94c447705a77eb5cce86519bf5cf78429e23b42e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1780210 -->
+<!-- English Revision: 1798938 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
@@ -329,6 +329,14 @@ pour le moteur de réécriture</description>
       2.4.26 du serveur HTTP Apache.</p>
       </dd>
 
+      <dt><code>LongURLOptimization</code></dt>
+      <dd>
+      <p>Cette option permet de réduire la consommation de mémoire des jeux de
+      règles longs et non optimisés qui enregistrent de manière répétitive de
+      longues valeurs dans des variables au sein des directives RewriteCond et
+      RewriteRule. Disponible à partir de la version 2.5 du serveur HTTP Apache.</p>
+      </dd>
+
       </dl>
 </usage>
 
index 683cb7025397e1ac6766efde44acdbaa3ec9d010..b17e1d485c6c5a9cfec2a77e6f1dd99b20c43a32 100644 (file)
@@ -62,7 +62,7 @@ core or, if a dynamic module, be loaded before the calling module.
 <div class="directive-section"><h2><a name="WatchdogInterval" id="WatchdogInterval">WatchdogInterval</a> <a name="watchdoginterval" id="watchdoginterval">Directive</a></h2>
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Watchdog interval in seconds</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>WatchdogInterval <var>number-of-seconds</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>WatchdogInterval <var>time-interval</var>[s]</code></td></tr>
 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>WatchdogInterval 1</code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
index 0d75a2a15bf7a623e36e890e34bb009771c76e83..393f79de71c56ab3a8cc28b76795e532754a8c55 100644 (file)
@@ -48,7 +48,7 @@ core or, if a dynamic module, be loaded before the calling module.
 <directivesynopsis>
 <name>WatchdogInterval</name>
 <description>Watchdog interval in seconds</description>
-<syntax>WatchdogInterval <var>number-of-seconds</var></syntax>
+<syntax>WatchdogInterval <var>time-interval</var>[s]</syntax>
 <default>WatchdogInterval 1</default>
 <contextlist><context>server config</context></contextlist>
 
index 0e8ad87848e17e38d1115d2fad629dd293ca563d..c94ecab99e25b827468cdd318b60dc73ea1fc6cc 100644 (file)
@@ -867,7 +867,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -1203,7 +1203,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index f0af8501d4c9ff4fe36bc937ffd3e0bb8030e176..fdbbfa46ef41cbf78a3d277857ac9ea746932848 100644 (file)
@@ -601,7 +601,7 @@ extensions</td></tr>
 <tr class="odd"><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
 extensions</td></tr>
 <tr><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>num</var>[ms]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
+<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>time-interval</var>[s]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
 requests on a persistent connection</td></tr>
 <tr><td><a href="mod_request.html#keptbodysize">KeptBodySize <var>maximum size in bytes</var></a></td><td> 0 </td><td>d</td><td>B</td></tr><tr><td class="descr" colspan="4">Keep the request body instead of discarding it up to
 the specified maximum size, for potential use by filters such as
@@ -859,7 +859,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -1148,7 +1148,7 @@ per child process</td></tr>
 <tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
 <tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
 client connections</td></tr>
-<tr><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
+<tr><td><a href="core.html#timeout">TimeOut <var>time-interval</var>[s]</a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
 certain events before failing a request</td></tr>
 <tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the behavior on <code>TRACE</code> requests</td></tr>
 <tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
@@ -1188,7 +1188,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index be4f5f2b7de8fd21370e1b74cd9302cb2eb8a1b9..725700965cbb6a22f9cef3fc3e6035159a34d172 100644 (file)
@@ -71,8 +71,7 @@
 <tr><td><a href="core.html#acceptfilter" id="A" name="A">AcceptFilter <var>protocol</var> <var>accept_filter</var></a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Configura mejoras para un Protocolo de Escucha de Sockets</td></tr>
 <tr class="odd"><td><a href="core.html#acceptpathinfo">AcceptPathInfo On|Off|Default</a></td><td> Default </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Los recursos aceptan información sobre su ruta</td></tr>
 <tr><td><a href="core.html#accessfilename">AccessFileName <var>filename</var> [<var>filename</var>] ...</a></td><td> .htaccess </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Nombre del fichero distribuido de configuración</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular handler or
-content-type</td></tr>
+<tr class="odd"><td><a href="mod_actions.html#action">Action <var>action-type</var> <var>cgi-script</var> [virtual]</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activa un script CGI para un handler concreto o content-type</td></tr>
 <tr><td><a href="mod_autoindex.html#addalt">AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Alternate text to display for a file, instead of an
 icon selected by filename</td></tr>
 <tr class="odd"><td><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
@@ -118,22 +117,20 @@ responses from the server</td></tr>
 [<var>extension</var>] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps the given filename extensions onto the specified content
 type</td></tr>
 <tr class="odd"><td><a href="mod_alias.html#alias">Alias [<var>URL-path</var>]
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps URLs to filesystem locations</td></tr>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Mapea URLs a rutas del sistema de ficheros</td></tr>
 <tr><td><a href="mod_alias.html#aliasmatch">AliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps URLs to filesystem locations using regular
-expressions</td></tr>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Mapea URLs a ubicaciones del sistema de ficheros usando expresiones regulares</td></tr>
 <tr class="odd"><td><a href="mod_access_compat.html#allow"> Allow from all|<var>host</var>|env=[!]<var>env-variable</var>
-[<var>host</var>|env=[!]<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Controls which hosts can access an area of the
-server</td></tr>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Controla qué hosts pueden acceder a un área del servidor</td></tr>
 <tr><td><a href="mod_proxy_connect.html#allowconnect">AllowCONNECT <var>port</var>[-<var>port</var>]
 [<var>port</var>[-<var>port</var>]] ...</a></td><td> 443 563 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ports that are allowed to <code>CONNECT</code> through the
 proxy</td></tr>
 <tr class="odd"><td><a href="core.html#allowencodedslashes">AllowEncodedSlashes On|Off</a></td><td> Off </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determina si Determines whether encoded path separators in URLs are allowed to
 be passed through</td></tr>
 <tr><td><a href="mod_allowhandlers.html#allowhandlers">AllowHandlers [not] none|<em>handler-name</em>
-[none|<em>handler-name</em>]...</a></td><td> all </td><td>d</td><td>X</td></tr><tr><td class="descr" colspan="4">Restrict access to the listed handlers</td></tr>
+[none|<em>handler-name</em>]...</a></td><td> all </td><td>d</td><td>X</td></tr><tr><td class="descr" colspan="4">Restringe acceso a los handlers listados</td></tr>
 <tr class="odd"><td><a href="mod_allowmethods.html#allowmethods">AllowMethods reset|<em>HTTP-method</em>
-[<em>HTTP-method</em>]...</a></td><td> reset </td><td>d</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Restrict access to the listed HTTP methods</td></tr>
+[<em>HTTP-method</em>]...</a></td><td> reset </td><td>d</td><td>X</td></tr><tr class="odd"><td class="descr" colspan="4">Restringe acceso a los métodos HTTP indicados</td></tr>
 <tr><td><a href="core.html#allowoverride">AllowOverride All|None|<var>directive-type</var>
 [<var>directive-type</var>] ...</a></td><td> None (2.3.9 and lat +</td><td>d</td><td>C</td></tr><tr><td class="descr" colspan="4">Types of directives that are allowed in
 <code>.htaccess</code> files</td></tr>
@@ -428,8 +425,7 @@ which no other media type configuration could be found.
 <tr><td><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel <var>value</var></a></td><td> 9 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">How much memory should be used by zlib for compression</td></tr>
 <tr class="odd"><td><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize <var>value</var></a></td><td> 15 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Zlib compression window size</td></tr>
 <tr><td><a href="mod_access_compat.html#deny"> Deny from all|<var>host</var>|env=[!]<var>env-variable</var>
-[<var>host</var>|env=[!]<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Controls which hosts are denied access to the
-server</td></tr>
+[<var>host</var>|env=[!]<var>env-variable</var>] ...</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Controla a qué hosts se les deniega el acceso al servidor</td></tr>
 <tr class="odd"><td><a href="core.html#directory">&lt;Directory <var>directory-path</var>&gt;
 ... &lt;/Directory&gt;</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Enclose a group of directives that apply only to the
 named file-system directory, sub-directories, and their contents.</td></tr>
@@ -754,9 +750,9 @@ directly</td></tr>
 <tr><td><a href="core.html#options" id="O" name="O">Options
     [+|-]<var>option</var> [[+|-]<var>option</var>] ...</a></td><td> All </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures what features are available in a particular
 directory</td></tr>
-<tr class="odd"><td><a href="mod_access_compat.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Controls the default access state and the order in which
-<code class="directive">Allow</code> and <code class="directive">Deny</code> are
-evaluated.</td></tr>
+<tr class="odd"><td><a href="mod_access_compat.html#order"> Order <var>ordering</var></a></td><td> Deny,Allow </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Controla el estado por defecto del acceso y el orden en que se evalúan 
+  <code class="directive">Allow</code> y 
+<code class="directive">Deny</code>.</td></tr>
 <tr><td><a href="mod_sed.html#outputsed">OutputSed <var>sed-command</var></a></td><td></td><td>dh</td><td>X</td></tr><tr><td class="descr" colspan="4">Sed command for filtering response content</td></tr>
 <tr class="odd"><td><a href="mod_env.html#passenv" id="P" name="P">PassEnv <var>env-variable</var> [<var>env-variable</var>]
 ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Passes environment variables from the shell</td></tr>
@@ -862,7 +858,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -874,15 +870,12 @@ header for proxied requests</td></tr>
 of the index listing</td></tr>
 <tr><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP receive buffer size</td></tr>
 <tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] [<var>URL-path</var>]
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
-a different URL</td></tr>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Envía una redirección externa indicando al cliente que solicite una URL distinta</td></tr>
 <tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
-of the current URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
-a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
-a different URL</td></tr>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Envía una redirección externa basada en una coincidencia de expresión regular con la URL actual
+</td></tr>
+<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Envía una redirección externa permanente indicando al cliente que solicite una URL diferente</td></tr>
+<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Envía una redirección externa temporal indicando al cliente que solicite una URL diferente</td></tr>
 <tr class="odd"><td><a href="mod_reflector.html#reflectorheader">ReflectorHeader <var>inputheader</var> <var>[outputheader]</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Reflect an input header to the output headers</td></tr>
 <tr><td><a href="core.html#registerhttpmethod">RegisterHttpMethod <var>method</var> [<var>method</var> [...]]</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Register non-standard HTTP methods</td></tr>
 <tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for useragent IP addresses</td></tr>
@@ -950,18 +943,15 @@ by Apache httpd children</td></tr>
 by Apache httpd children</td></tr>
 <tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of processes that can be launched by
 processes launched by Apache httpd children</td></tr>
-<tr class="odd"><td><a href="mod_access_compat.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Interaction between host-level access control and
-user authentication</td></tr>
+<tr class="odd"><td><a href="mod_access_compat.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Interacción entre control de acceso a nivel-de-hostess y autenticación de usuario</td></tr>
 <tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> apache_runtime_stat +</td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the file used to store coordination data for
 the child processes</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular request
-method.</td></tr>
+<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activa un script CGI para peticiones con un método concreto.</td></tr>
 <tr><td><a href="mod_alias.html#scriptalias">ScriptAlias [<var>URL-path</var>]
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
-target as a CGI script</td></tr>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Mapea una URL a una ubicación del sistema de ficheros y designa el destino como un script CGI</td></tr>
 <tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
-and designates the target as a CGI script</td></tr>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Mapea una URL a una ubicación del sistema de ficheros usando 
+una expresión regular y designa el destino como un script CGI</td></tr>
 <tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
 scripts</td></tr>
 <tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
@@ -1192,7 +1182,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index 44ac581d346fe0c97f676753160d187265cd2e94..58c4835c849349f975226a120a878b06f539458b 100644 (file)
@@ -731,7 +731,7 @@ support
 <tr class="odd"><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>taille</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Taille du tampon de lecture anticipée envoyé aux extensions
 ISAPI</td></tr>
 <tr><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Active les connexions HTTP persistantes</td></tr>
-<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>nombre</var>[ms]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Durée pendant laquelle le serveur va attendre une requête
+<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>time-interval</var>[s]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Durée pendant laquelle le serveur va attendre une requête
 avant de fermer une connexion persistante</td></tr>
 <tr><td><a href="mod_request.html#keptbodysize">KeptBodySize <var>taille maximale en octets</var></a></td><td> 0 </td><td>d</td><td>B</td></tr><tr><td class="descr" colspan="4">Conserve le corps de la requête à concurrence de la taille
 maximale spécifiée, pour une utilisation éventuelle par des filtres
@@ -1069,7 +1069,7 @@ charge</td></tr>
 sortantes</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Affiche l'état du répartiteur de charge du mandataire dans
 mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>secondes</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Délai d'attente réseau pour les requêtes
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Délai d'attente réseau pour les requêtes
 mandatées</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information fournie dans l'en-tête de réponse HTTP
 <code>Via</code> pour les requêtes mandatées</td></tr>
@@ -1445,7 +1445,7 @@ processus enfant</td></tr>
 enfant</td></tr>
 <tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>taille</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">La taille en octets de la pile qu'utilisent les threads qui
 traitent les connexions clients</td></tr>
-<tr><td><a href="core.html#timeout">TimeOut <var>secondes</var></a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Temps pendant lequel le serveur va attendre certains
+<tr><td><a href="core.html#timeout">TimeOut <var>time-interval</var>[s]</a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Temps pendant lequel le serveur va attendre certains
 évènements avant de considérer qu'une requête a échoué</td></tr>
 <tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Détermine le comportement des requêtes
 <code>TRACE</code></td></tr>
@@ -1493,7 +1493,7 @@ un serveur virtuel donn
 un serveur virtuel donné</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Message d'avertissement personnalisable en provenance de
 l'interprétation du fichier de configuration</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Interprète les directives SSI dans les fichiers dont le bit
 d'exécution est positionné</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index 201e938ed8555ef736081f4b6277e15b7adedeeb..7e81146d709625340b4f17bf9c2aeea40dba3bb8 100644 (file)
@@ -1120,7 +1120,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">実行ビットが設定されたファイルの SSI ディレクティブを
 解析する</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index c350690831b2ee0d7b8fc370e66fbddf0c0673a2..f74e418586bafbbf4983816bdec2e395f9fbe7d6 100644 (file)
@@ -569,7 +569,7 @@ Name|Date|Size|Description</a></td><td> Ascending Name </td><td>svdh</td><td>B</
 <tr class="odd"><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ISAPI extensionÀÇ ¹Ì¸®Àбâ¹öÆÛ(read ahead buffer)
 Å©±â</td></tr>
 <tr><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>num</var>[ms]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
+<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>time-interval</var>[s]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
 requests on a persistent connection</td></tr>
 <tr><td><a href="mod_request.html#keptbodysize">KeptBodySize <var>maximum size in bytes</var></a></td><td> 0 </td><td>d</td><td>B</td></tr><tr><td class="descr" colspan="4">Keep the request body instead of discarding it up to
 the specified maximum size, for potential use by filters such as
@@ -825,7 +825,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -1106,7 +1106,7 @@ per child process</td></tr>
 <tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
 <tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
 client connections</td></tr>
-<tr><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
+<tr><td><a href="core.html#timeout">TimeOut <var>time-interval</var>[s]</a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
 certain events before failing a request</td></tr>
 <tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the behavior on <code>TRACE</code> requests</td></tr>
 <tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">·Î±×ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
@@ -1145,7 +1145,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index 9e7b463bcfcee6976f8c2b07b2365e25f66ed133..77e419adeb0eb82cd724dcbb967f20ef0dba43a7 100644 (file)
@@ -857,7 +857,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sk</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sk</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sk</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sk</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sk</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sk</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -1190,7 +1190,7 @@ for the virtualhost.</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>hesaplanan-dizin</em>|none</a></td><td> none </td><td>sk</td><td>E</td></tr><tr><td class="descr" colspan="4">Bir sanal konağın CGI dizinini devingen olarak yapılandırır.
 </td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>skdh</td><td>Ç</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>T</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>T</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>skdh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>T</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index 014dfb5244943a60b28d8fb0626bdcc57edf6528..1c96f9e1a2a936ed0b9a91b3321aadc55cefb513 100644 (file)
@@ -596,7 +596,7 @@ extensions</td></tr>
 <tr class="odd"><td><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer <var>size</var></a></td><td> 49152 </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size of the Read Ahead Buffer sent to ISAPI
 extensions</td></tr>
 <tr><td><a href="core.html#keepalive" id="K" name="K">KeepAlive On|Off</a></td><td> On </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Enables HTTP persistent connections</td></tr>
-<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>num</var>[ms]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
+<tr class="odd"><td><a href="core.html#keepalivetimeout">KeepAliveTimeout <var>time-interval</var>[s]</a></td><td> 5 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for subsequent
 requests on a persistent connection</td></tr>
 <tr><td><a href="mod_request.html#keptbodysize">KeptBodySize <var>maximum size in bytes</var></a></td><td> 0 </td><td>d</td><td>B</td></tr><tr><td class="descr" colspan="4">Keep the request body instead of discarding it up to
 the specified maximum size, for potential use by filters such as
@@ -854,7 +854,7 @@ header</td></tr>
 <tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
 <tr class="odd"><td><a href="mod_proxy.html#proxysourceaddress">ProxySourceAddress <var>address</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set local IP address for outgoing proxy connections</td></tr>
 <tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>time-interval</var>[s]</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
 <tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
 header for proxied requests</td></tr>
 <tr class="odd"><td><a href="mod_proxy_wstunnel.html#proxywebsocketasync">ProxyWebsocketAsync ON|OFF</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Instructs this module to try to create an asynchronous tunnel</td></tr>
@@ -1143,7 +1143,7 @@ per child process</td></tr>
 <tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
 <tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
 client connections</td></tr>
-<tr><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
+<tr><td><a href="core.html#timeout">TimeOut <var>time-interval</var>[s]</a></td><td> 60 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
 certain events before failing a request</td></tr>
 <tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the behavior on <code>TRACE</code> requests</td></tr>
 <tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Specify location of a log file</td></tr>
@@ -1183,7 +1183,7 @@ a given virtual host</td></tr>
 <tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
 a given virtual host</td></tr>
 <tr class="odd"><td><a href="core.html#warning" id="W" name="W">Warning <var>message</var></a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Warn from configuration parsing with a custom message</td></tr>
-<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>number-of-seconds</var></a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
+<tr><td><a href="mod_watchdog.html#watchdoginterval">WatchdogInterval <var>time-interval</var>[s]</a></td><td> 1 </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Watchdog interval in seconds</td></tr>
 <tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
 set</td></tr>
 <tr><td><a href="mod_xml2enc.html#xml2encalias">xml2EncAlias <var>charset alias [alias ...]</var></a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Recognise Aliases for encoding values</td></tr>
index b3b47316023f805901b29ab116d6ac3a190f3a06..01c3c7199fd225566ba7000f45237c92b2cce81b 100644 (file)
@@ -89,7 +89,7 @@ d'utilisation.</p>
 <h2><a name="flag_b" id="flag_b">B (échappement dans les références arrières)</a></h2>
 <p>Avec le drapeau [B], la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> échappe les caractères
 non-alphanumériques avant d'appliquer la transformation. A partir
-de la version 2.4.10, vous pouvez limiter l'échappement dans les
+de la version 2.4.26, vous pouvez limiter l'échappement dans les
 références arrières à une liste de caractères que vous pouvez spécifiez comme
 dans cet exemple : <code>[B=#?;]</code>. Notez que l'espace peut faire
 partie de la liste des caractères à échapper, mais qu'il ne doit pas
@@ -146,6 +146,10 @@ l'espace en +)</a></h2>
 espace en %20 au lieu de '+' dans les références arrières. Ceci s'avère
 utile lorsque la référence arrière est utilisée dans la partie chemin,
 et non dans les paramètres de la requête.</p>
+
+<p>Ce drapeau est disponible à partir de la version 2.4.26 du serveur HTTP
+Apache.</p>
+
 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section">
 <h2><a name="flag_c" id="flag_c">C|chain</a></h2>
index 7f518aee3d817fe68f0b55874dfda64232ba626f..3c7aceef3e1e7c31a20e7226d25a34456cd02291 100644 (file)
@@ -70,7 +70,7 @@ of how you might use them.</p>
 <p>The [B] flag instructs <directive
 module="mod_rewrite">RewriteRule</directive> to escape non-alphanumeric
 characters before applying the transformation.</p>
-<p>In 2.4.10 and later, you can limit the escaping to specific characters
+<p>In 2.4.26 and later, you can limit the escaping to specific characters
 in backreferences by listing them: <code>[B=#?;]</code>. Note: The space
 character can be used in the list of characters to escape, but it cannot be
 the last character in the list.</p>
@@ -116,6 +116,9 @@ strings in the encoded form.</p>
 module="mod_rewrite">RewriteRule</directive> to escape the space character
 in a backreference to %20 rather than '+'. Useful when the backreference
 will be used in the path component rather than the query string.</p>
+
+<p>This flag is available in version 2.4.26 and later.</p>
+
 </section>
 
 <section id="flag_c"><title>C|chain</title>
index bd51748a6617bbfe67c1836a0cce0be882e84526..782f0b31688460b7303e89c7a1c599002e04da9c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1762651 -->
+<!-- English Revision: 1799968 -->
 <!-- French translation : Lucien GENTIS -->
 <!-- Reviewed by : Vincent Deffontaines -->
 
@@ -74,7 +74,7 @@ d'utilisation.</p>
 <p>Avec le drapeau [B], la directive <directive
 module="mod_rewrite">RewriteRule</directive> échappe les caractères
 non-alphanumériques avant d'appliquer la transformation. A partir
-de la version 2.4.10, vous pouvez limiter l'échappement dans les
+de la version 2.4.26, vous pouvez limiter l'échappement dans les
 références arrières à une liste de caractères que vous pouvez spécifiez comme
 dans cet exemple : <code>[B=#?;]</code>. Notez que l'espace peut faire
 partie de la liste des caractères à échapper, mais qu'il ne doit pas
@@ -132,6 +132,10 @@ module="mod_rewrite">RewriteRule</directive> échappera le caractère
 espace en %20 au lieu de '+' dans les références arrières. Ceci s'avère
 utile lorsque la référence arrière est utilisée dans la partie chemin,
 et non dans les paramètres de la requête.</p>
+
+<p>Ce drapeau est disponible à partir de la version 2.4.26 du serveur HTTP
+Apache.</p>
+
 </section>
 
 <section id="flag_c"><title>C|chain</title>
index b9b98ac47a40666b1361179ab3b7f43b61dbe0a2..7cafa1e235102bf76245cee3236355114c0eed8c 100644 (file)
@@ -91,7 +91,7 @@ virtuel bas
     (la plus exacte) correspondance avec la paire adresse IP/port
     utilisée dans la requête. Si plusieurs serveurs virtuels possèdent
     cette même paire adresse IP/port, Apache va ensuite comparer les
-    valeurs des directives <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> et <code class="directive">module="core"&gt;ServerAlias</code> avec le nom de serveur
+    valeurs des directives <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> et <code class="directive"><a href="../mod/core.html#serveralias">ServerAlias</a></code> avec le nom de serveur
     présent dans la requête.</p>
 
     <p>Si vous ne définissez pas de directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code> pour un serveur virtuel à base
index 785372a8b2d7baed7e9593a4635762350754dd64..f0ea19586827416889439bb501f4fba15a432b9f 100644 (file)
@@ -89,7 +89,7 @@ virtuel basé sur le nom approprié</title>
     cette même paire adresse IP/port, Apache va ensuite comparer les
     valeurs des directives <directive module="core"
     >ServerName</directive> et <directive
-    >module="core">ServerAlias</directive> avec le nom de serveur
+    module="core">ServerAlias</directive> avec le nom de serveur
     présent dans la requête.</p>
 
     <p>Si vous ne définissez pas de directive <directive
index 0967996409d1c3587834e912e984683bf2f56b17..ca2484cf127df2ed1119229903b39c07783792c6 100644 (file)
  * 20161018.2 (2.5.0-dev)  add ap_set_conn_count()
  * 20161018.3 (2.5.0-dev)  add ap_exists_directive()
  * 20161018.4 (2.5.0-dev)  Add taint to request_rec and ap_request_tainted()
+ * 20161018.5 (2.5.0-dev)  Add ap_get_basic_auth_components() and deprecate
+ *                         ap_get_basic_auth_pw()
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
 #ifndef MODULE_MAGIC_NUMBER_MAJOR
 #define MODULE_MAGIC_NUMBER_MAJOR 20161018
 #endif
-#define MODULE_MAGIC_NUMBER_MINOR 4                 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 5                 /* 0...n */
 
 /**
  * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
index 63c3b0cc651a2d8d55eea671327f34f2ea3d4e24..9b8e754100aa2b6c457d9b2d1e6f6437e9c6e570 100644 (file)
@@ -576,7 +576,18 @@ AP_DECLARE(void) ap_note_digest_auth_failure(request_rec *r);
 AP_DECLARE_HOOK(int, note_auth_failure, (request_rec *r, const char *auth_type))
 
 /**
- * Get the password from the request headers
+ * Get the password from the request headers. This function has multiple side
+ * effects due to its prior use in the old authentication framework, including
+ * setting r->user (which is supposed to indicate that the user in question has
+ * been authenticated for the current request).
+ *
+ * Modules which call ap_get_basic_auth_pw() during the authentication phase
+ * MUST either immediately authenticate the user after the call, or else stop
+ * the request immediately with an error response, to avoid incorrectly
+ * authenticating the current request. (See CVE-2017-3167.) The replacement
+ * ap_get_basic_auth_components() API should be preferred.
+ *
+ * @deprecated @see ap_get_basic_auth_components
  * @param r The current request
  * @param pw The password as set in the headers
  * @return 0 (OK) if it set the 'pw' argument (and assured
@@ -589,6 +600,25 @@ AP_DECLARE_HOOK(int, note_auth_failure, (request_rec *r, const char *auth_type))
  */
 AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw);
 
+#define AP_GET_BASIC_AUTH_PW_NOTE "AP_GET_BASIC_AUTH_PW_NOTE"
+
+/**
+ * Get the username and/or password from the request's Basic authentication
+ * headers. Unlike ap_get_basic_auth_pw(), calling this function has no side
+ * effects on the passed request_rec.
+ *
+ * @param r The current request
+ * @param username If not NULL, set to the username sent by the client
+ * @param password If not NULL, set to the password sent by the client
+ * @return APR_SUCCESS if the credentials were successfully parsed and returned;
+ *         APR_EINVAL if there was no authentication header sent or if the
+ *         client was not using the Basic authentication scheme. username and
+ *         password are unchanged on failure.
+ */
+AP_DECLARE(apr_status_t) ap_get_basic_auth_components(const request_rec *r,
+                                                      const char **username,
+                                                      const char **password);
+
 /**
  * parse_uri: break apart the uri
  * @warning Side Effects:
index 1a33466aebd4d0c29b0a30282f4f5db966eab74a..4e42f8b347029f91f4ab7f6c034877a834a8fd5f 100644 (file)
@@ -1997,6 +1997,28 @@ AP_DECLARE(const char *) ap_stripprefix(const char *bigstring,
  */
 AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded);
 
+/**
+ * Decode a base64 encoded string into memory allocated from a pool, while
+ * ensuring that the input string is in fact valid base64.
+ *
+ * Unlike ap_pbase64decode(), this function allows encoded NULLs in the input to
+ * be retained by the caller, by inspecting the len argument after the call
+ * instead of using strlen(). A NULL terminator is still appended to the buffer
+ * to faciliate string use (it is not included in len).
+ *
+ * @param p The pool to allocate from
+ * @param encoded The encoded string
+ * @param decoded On success, set to the decoded buffer, which is allocated from
+ *                p
+ * @param len On success, set to the length of the decoded buffer (not including
+ *            the terminating NULL byte)
+ * @return APR_SUCCESS if the decoding was successful
+ */
+AP_DECLARE(apr_status_t) ap_pbase64decode_strict(apr_pool_t *p,
+                                                 const char *encoded,
+                                                 char **decoded,
+                                                 apr_size_t *len);
+
 /**
  * Encode a string into memory allocated from a pool in base 64 format
  * @param p The pool to allocate from
@@ -2130,7 +2152,7 @@ AP_DECLARE(char *) ap_append_pid(apr_pool_t *p, const char *string,
 /**
  * Parse a given timeout parameter string into an apr_interval_time_t value.
  * The unit of the time interval is given as postfix string to the numeric
- * string. Currently the following units are understood:
+ * string. Currently the following units are understood (case insensitive):
  *
  * ms    : milliseconds
  * s     : seconds
index b0a96823da78a5b58e966ea3c3d15c774aafba36..7179f1dc9701016fb386991fc9b8b4635d143c94 100644 (file)
@@ -952,13 +952,13 @@ static int get_digest_rec(request_rec *r, digest_header_rec *resp)
 
         /* find value */
 
+        vv = 0;
         if (auth_line[0] == '=') {
             auth_line++;
             while (apr_isspace(auth_line[0])) {
                 auth_line++;
             }
 
-            vv = 0;
             if (auth_line[0] == '\"') {         /* quoted string */
                 auth_line++;
                 while (auth_line[0] != '\"' && auth_line[0] != '\0') {
@@ -977,8 +977,8 @@ static int get_digest_rec(request_rec *r, digest_header_rec *resp)
                     value[vv++] = *auth_line++;
                 }
             }
-            value[vv] = '\0';
         }
+        value[vv] = '\0';
 
         while (auth_line[0] != ',' && auth_line[0] != '\0') {
             auth_line++;
index 9f10c0d7181487f4c4355f135093ab6101f65cb9..b6deaba30616f6596432703b8c05b07f21d41b11 100644 (file)
@@ -66,7 +66,6 @@ struct wd_server_conf_t
 
 static wd_server_conf_t *wd_server_conf = NULL;
 static apr_interval_time_t wd_interval = AP_WD_TM_INTERVAL;
-static int wd_interval_set = 0;
 static int mpm_is_forked = AP_MPMQ_NOT_SUPPORTED;
 static const char *wd_proc_mutex_type = "watchdog-callback";
 
@@ -450,6 +449,9 @@ static int wd_post_config_hook(apr_pool_t *pconf, apr_pool_t *plog,
         apr_pool_create(&wd_server_conf->pool, ppconf);
         apr_pool_userdata_set(wd_server_conf, pk, apr_pool_cleanup_null, ppconf);
     }
+    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(010033)
+                 "Watchdog: Running with WatchdogInterval %"
+                 APR_TIME_T_FMT "ms", apr_time_as_msec(wd_interval));
     wd_server_conf->s = s;
     if ((wl = ap_list_provider_names(pconf, AP_WATCHDOG_PGROUP,
                                             AP_WATCHDOG_PVERSION))) {
@@ -597,18 +599,20 @@ static void wd_child_init_hook(apr_pool_t *p, server_rec *s)
 static const char *wd_cmd_watchdog_int(cmd_parms *cmd, void *dummy,
                                        const char *arg)
 {
-    int i;
+    apr_status_t rv;
     const char *errs = ap_check_cmd_context(cmd, GLOBAL_ONLY);
 
     if (errs != NULL)
         return errs;
-    if (wd_interval_set)
-       return "Duplicate WatchdogInterval directives are not allowed";
-    if ((i = atoi(arg)) < 1)
-        return "Invalid WatchdogInterval value";
+    rv = ap_timeout_parameter_parse(arg, &wd_interval, "s");
+
+    if (rv != APR_SUCCESS)
+        return "Unparse-able WatchdogInterval setting";
+    if (wd_interval < AP_WD_TM_SLICE) {
+        return apr_psprintf(cmd->pool, "Invalid WatchdogInterval: minimal value %"
+                APR_TIME_T_FMT "ms", apr_time_as_msec(AP_WD_TM_SLICE));
+    }
 
-    wd_interval = apr_time_from_sec(i);
-    wd_interval_set = 1;
     return NULL;
 }
 
index db44e98d2d96ba235dfec961bfed5be1e51def6f..12801f94ceccb79cbe3dd0b9524e8f86a3f11715 100644 (file)
@@ -213,13 +213,6 @@ static int status_handler(request_rec *r)
         return DECLINED;
     }
 
-    /* A request that has passed through .htaccess has no business
-     * landing up here.
-     */
-    if (ap_request_tainted(r, AP_TAINT_HTACCESS)) {
-        return DECLINED;
-    }
-
 #ifdef HAVE_TIMES
     times_per_thread = getpid() != child_pid;
 #endif
index b5b082e36e75cb4213659a4755a713e6ab2c11e2..6d4b0fbb0e21b05a7fb4d7c3de8e197cb17fc042 100644 (file)
@@ -134,7 +134,7 @@ static apr_port_t http_port(const request_rec *r)
 
 static int ap_process_http_async_connection(conn_rec *c)
 {
-    request_rec *r;
+    request_rec *r = NULL;
     conn_state_t *cs = c->cs;
 
     AP_DEBUG_ASSERT(cs != NULL);
index 29cc8d697c28bad95a1895392da4e65cf520a9f0..dfe545d31b7bafef9a6c375f9efa31869c51d076 100644 (file)
@@ -871,11 +871,7 @@ static char *make_allow(request_rec *r)
 
         apr_hash_this(hi, &key, NULL, &val);
         if ((mask & (AP_METHOD_BIT << *(int *)val)) != 0) {
-            *(const char **)apr_array_push(allow) = key;
-
-            /* the M_GET method actually refers to two methods */
-            if (*(int *)val == M_GET)
-                *(const char **)apr_array_push(allow) = "HEAD";
+            APR_ARRAY_PUSH(allow, const char *) = key;
         }
     }
 
index f92119b633e474632efb6b48df1f99158d1b316b..28c53be132b455a5a31572d4a934705c68fbf7b9 100644 (file)
@@ -528,9 +528,9 @@ static int is_quoted_pair(const char *s)
     int res = -1;
     int c;
 
-    if (((s + 1) != NULL) && (*s == '\\')) {
+    if (*s == '\\') {
         c = (int) *(s + 1);
-        if (apr_isascii(c)) {
+        if (c && apr_isascii(c)) {
             res = 1;
         }
     }
index fac130b2195bedc5fa14550ef289638192ecca78..e8cefe37f05818a4cfae170f2cf9ef2c4d22d816 100644 (file)
@@ -80,12 +80,18 @@ AC_DEFUN([APACHE_CHECK_NGHTTP2],[
     if test -n "$PKGCONFIG"; then
       saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
       AC_MSG_CHECKING([for pkg-config along $PKG_CONFIG_PATH])
-      if test "x$ap_nghttp2_base" != "x" -a \
-              -f "${ap_nghttp2_base}/lib/pkgconfig/libnghttp2.pc"; then
-        dnl Ensure that the given path is used by pkg-config too, otherwise
-        dnl the system libnghttp2.pc might be picked up instead.
-        PKG_CONFIG_PATH="${ap_nghttp2_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}"
-        export PKG_CONFIG_PATH
+      if test "x$ap_nghttp2_base" != "x" ; then
+        if test -f "${ap_nghttp2_base}/lib/pkgconfig/libnghttp2.pc"; then
+          dnl Ensure that the given path is used by pkg-config too, otherwise
+          dnl the system libnghttp2.pc might be picked up instead.
+          PKG_CONFIG_PATH="${ap_nghttp2_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}"
+          export PKG_CONFIG_PATH
+        elif test -f "${ap_nghttp2_base}/lib64/pkgconfig/libnghttp2.pc"; then
+          dnl Ensure that the given path is used by pkg-config too, otherwise
+          dnl the system libnghttp2.pc might be picked up instead.
+          PKG_CONFIG_PATH="${ap_nghttp2_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}"
+          export PKG_CONFIG_PATH
+        fi
       fi
       AC_ARG_ENABLE(nghttp2-staticlib-deps,APACHE_HELP_STRING(--enable-nghttp2-staticlib-deps,[link mod_http2 with dependencies of libnghttp2's static libraries (as indicated by "pkg-config --static"). Must be specified in addition to --enable-http2.]), [
         if test "$enableval" = "yes"; then
index fcf6bad4d41fcbbe1638270723c32ece65c1929c..e2502c2f167cf69545c1647ce9a7ac723a55ecc5 100644 (file)
@@ -47,6 +47,7 @@ static struct h2_workers *workers;
 static h2_mpm_type_t mpm_type = H2_MPM_UNKNOWN;
 static module *mpm_module;
 static int async_mpm;
+static int mpm_supported = 1;
 static apr_socket_t *dummy_socket;
 
 static void check_modules(int force) 
@@ -76,11 +77,18 @@ static void check_modules(int force)
             else if (!strcmp("prefork.c", m->name)) {
                 mpm_type = H2_MPM_PREFORK;
                 mpm_module = m;
+                /* While http2 can work really well on prefork, it collides
+                 * today's use case for prefork: runnning single-thread app engines
+                 * like php. If we restrict h2_workers to 1 per process, php will
+                 * work fine, but browser will be limited to 1 active request at a
+                 * time. */
+                mpm_supported = 0;
                 break;
             }
             else if (!strcmp("simple_api.c", m->name)) {
                 mpm_type = H2_MPM_SIMPLE;
                 mpm_module = m;
+                mpm_supported = 0;
                 break;
             }
             else if (!strcmp("mpm_winnt.c", m->name)) {
@@ -107,7 +115,6 @@ apr_status_t h2_conn_child_init(apr_pool_t *pool, server_rec *s)
     int idle_secs = 0;
 
     check_modules(1);
-    
     ap_mpm_query(AP_MPMQ_MAX_THREADS, &max_threads_per_child);
     
     status = ap_mpm_query(AP_MPMQ_IS_ASYNC, &async_mpm);
@@ -157,6 +164,18 @@ h2_mpm_type_t h2_conn_mpm_type(void)
     return mpm_type;
 }
 
+const char *h2_conn_mpm_name(void)
+{
+    check_modules(0);
+    return mpm_module? mpm_module->name : "unknown";
+}
+
+int h2_mpm_supported(void)
+{
+    check_modules(0);
+    return mpm_supported;
+}
+
 static module *h2_conn_mpm_module(void)
 {
     check_modules(0);
index 79948644ae8c1738d93622cf4d40017fb6335590..7111a6cd69c2872a6438ba0da8a926f51c835c83 100644 (file)
@@ -64,7 +64,8 @@ typedef enum {
 
 /* Returns the type of MPM module detected */
 h2_mpm_type_t h2_conn_mpm_type(void);
-
+const char *h2_conn_mpm_name(void);
+int h2_mpm_supported(void);
 
 conn_rec *h2_slave_create(conn_rec *master, int slave_id, apr_pool_t *parent);
 void h2_slave_destroy(conn_rec *slave);
index 0520dc59145670a5ac5b7a1e0d4370b16e5a8be2..c360faf97284bf0b016888717694639633d3dfbd 100644 (file)
@@ -125,9 +125,9 @@ static void stream_cleanup(h2_mplx *m, h2_stream *stream)
     
     h2_stream_cleanup(stream);
 
-    h2_iq_remove(m->q, stream->id);
-    h2_fifo_remove(m->readyq, stream);
     h2_ihash_remove(m->streams, stream->id);
+    h2_iq_remove(m->q, stream->id);
+    h2_ififo_remove(m->readyq, stream->id);
     h2_ihash_add(m->shold, stream);
     
     if (!stream->task || stream->task->worker_done) {
@@ -218,7 +218,7 @@ h2_mplx *h2_mplx_create(conn_rec *c, apr_pool_t *parent,
         m->spurge = h2_ihash_create(m->pool, offsetof(h2_stream,id));
         m->q = h2_iq_create(m->pool, m->max_streams);
 
-        status = h2_fifo_set_create(&m->readyq, m->pool, m->max_streams);
+        status = h2_ififo_set_create(&m->readyq, m->pool, m->max_streams);
         if (status != APR_SUCCESS) {
             apr_pool_destroy(m->pool);
             return NULL;
@@ -292,12 +292,12 @@ static void task_destroy(h2_mplx *m, h2_task *task)
     
     slave = task->c;
 
-    if (m->s->keep_alive_max == 0 || slave->keepalives < m->s->keep_alive_max) {
-        reuse_slave = ((m->spare_slaves->nelts < (m->limit_active * 3 / 2))
-                       && !task->rst_error);
-    }
-    
     if (slave) {
+        if (m->s->keep_alive_max == 0 || slave->keepalives < m->s->keep_alive_max) {
+            reuse_slave = ((m->spare_slaves->nelts < (m->limit_active * 3 / 2))
+                           && !task->rst_error);
+        }
+
         if (reuse_slave && slave->keepalive == AP_CONN_KEEPALIVE) {
             h2_beam_log(task->output.beam, m->c, APLOG_DEBUG, 
                         APLOGNO(03385) "h2_task_destroy, reuse slave");    
@@ -307,7 +307,6 @@ static void task_destroy(h2_mplx *m, h2_task *task)
         else {
             h2_beam_log(task->output.beam, m->c, APLOG_TRACE1, 
                         "h2_task_destroy, destroy slave");    
-            slave->sbh = NULL;
             h2_slave_destroy(slave);
         }
     }
@@ -481,9 +480,6 @@ void h2_mplx_release_and_join(h2_mplx *m, apr_thread_cond_t *wait)
     
     H2_MPLX_LEAVE(m);
 
-    /* 5. unregister again, now that our workers are done */
-    h2_workers_unregister(m->workers, m);
-
     ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c,
                   "h2_mplx(%ld): released", m->id);
 }
@@ -630,7 +626,7 @@ apr_status_t h2_mplx_out_trywait(h2_mplx *m, apr_interval_time_t timeout,
 
 static void check_data_for(h2_mplx *m, h2_stream *stream, int lock)
 {
-    if (h2_fifo_push(m->readyq, stream) == APR_SUCCESS) {
+    if (h2_ififo_push(m->readyq, stream->id) == APR_SUCCESS) {
         apr_atomic_set32(&m->event_pending, 1);
         H2_MPLX_ENTER_MAYBE(m, lock);
         if (m->added_output) {
@@ -662,7 +658,7 @@ apr_status_t h2_mplx_reprioritize(h2_mplx *m, h2_stream_pri_cmp *cmp, void *ctx)
 
 static void register_if_needed(h2_mplx *m) 
 {
-    if (!m->is_registered && !h2_iq_empty(m->q)) {
+    if (!m->aborted && !m->is_registered && !h2_iq_empty(m->q)) {
         apr_status_t status = h2_workers_register(m->workers, m); 
         if (status == APR_SUCCESS) {
             m->is_registered = 1;
@@ -755,25 +751,27 @@ static h2_task *next_stream_task(h2_mplx *m)
     return NULL;
 }
 
-h2_task *h2_mplx_pop_task(h2_mplx *m, int *has_more)
+apr_status_t h2_mplx_pop_task(h2_mplx *m, h2_task **ptask)
 {
-    h2_task *task = NULL;
+    apr_status_t rv = APR_EOF;
     
-    H2_MPLX_ENTER_ALWAYS(m);
-
-    *has_more = 0;
-    if (!m->aborted) {
-        task = next_stream_task(m);
-        if (task != NULL && !h2_iq_empty(m->q)) {
-            *has_more = 1;
-        }
-        else {
-            m->is_registered = 0; /* h2_workers will discard this mplx */
-        }
+    *ptask = NULL;
+    if (APR_SUCCESS != (rv = apr_thread_mutex_lock(m->lock))) {
+        return rv;
+    }
+    
+    if (m->aborted) {
+        rv = APR_EOF;
+    }
+    else {
+        *ptask = next_stream_task(m);
+        rv = (*ptask != NULL && !h2_iq_empty(m->q))? APR_EAGAIN : APR_SUCCESS;
+    }
+    if (APR_EAGAIN != rv) {
+        m->is_registered = 0; /* h2_workers will discard this mplx */
     }
-
     H2_MPLX_LEAVE(m);
-    return task;
+    return rv;
 }
 
 static void task_done(h2_mplx *m, h2_task *task, h2_req_engine *ngn)
@@ -1058,19 +1056,23 @@ apr_status_t h2_mplx_idle(h2_mplx *m)
                           "h2_mplx(%ld): idle, no tasks ongoing, %d streams",
                           m->id, (int)h2_ihash_count(m->streams));
             h2_ihash_shift(m->streams, (void**)&stream, 1);
-            if (stream && stream->output) {
-                /* FIXME: this looks like a race between the session thinking
-                 * it is idle and the EOF on a stream not being sent.
-                 * Signal to caller to leave IDLE state.
-                 */
-                ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
-                              H2_STRM_MSG(stream, "output closed=%d, mplx idle"
-                              ", out has %ld bytes buffered"),
-                              h2_beam_is_closed(stream->output),
-                              (long)h2_beam_get_buffered(stream->output));
+            if (stream) {
                 h2_ihash_add(m->streams, stream);
-                check_data_for(m, stream, 0);
-                status = APR_EAGAIN;
+                if (stream->output && !stream->out_checked) {
+                    /* FIXME: this looks like a race between the session thinking
+                     * it is idle and the EOF on a stream not being sent.
+                     * Signal to caller to leave IDLE state.
+                     */
+                    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
+                                  H2_STRM_MSG(stream, "output closed=%d, mplx idle"
+                                              ", out has %ld bytes buffered"),
+                                  h2_beam_is_closed(stream->output),
+                                  (long)h2_beam_get_buffered(stream->output));
+                    h2_ihash_add(m->streams, stream);
+                    check_data_for(m, stream, 0);
+                    stream->out_checked = 1;
+                    status = APR_EAGAIN;
+                }
             }
         }
     }
@@ -1230,7 +1232,7 @@ apr_status_t h2_mplx_dispatch_master_events(h2_mplx *m,
                                             void *on_ctx)
 {
     h2_stream *stream;
-    int n;
+    int n, id;
     
     ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c, 
                   "h2_mplx(%ld): dispatch events", m->id);        
@@ -1240,11 +1242,14 @@ apr_status_t h2_mplx_dispatch_master_events(h2_mplx *m,
     h2_ihash_iter(m->streams, report_consumption_iter, m);    
     purge_streams(m, 1);
     
-    n = h2_fifo_count(m->readyq);
+    n = h2_ififo_count(m->readyq);
     while (n > 0 
-           && (h2_fifo_try_pull(m->readyq, (void**)&stream) == APR_SUCCESS)) {
+           && (h2_ififo_try_pull(m->readyq, &id) == APR_SUCCESS)) {
         --n;
-        on_resume(on_ctx, stream);
+        stream = h2_ihash_get(m->streams, id);
+        if (stream) {
+            on_resume(on_ctx, stream);
+        }
     }
     
     return APR_SUCCESS;
@@ -1265,7 +1270,7 @@ int h2_mplx_awaits_data(h2_mplx *m)
     if (h2_ihash_empty(m->streams)) {
         waiting = 0;
     }
-    else if (!m->tasks_active && !h2_fifo_count(m->readyq)
+    else if (!m->tasks_active && !h2_ififo_count(m->readyq)
              && h2_iq_empty(m->q)) {
         waiting = 0;
     }
index 61b1b99aba705f8844eea69af72d5ceb1dca10bc..04ba7a8d77f3c9c69203c16d98060a51d45f377d 100644 (file)
@@ -69,7 +69,7 @@ struct h2_mplx {
     struct h2_ihash_t *spurge;      /* all streams done, ready for destroy */
     
     struct h2_iqueue *q;            /* all stream ids that need to be started */
-    struct h2_fifo *readyq;         /* all streams ready for output */
+    struct h2_ififo *readyq;        /* all stream ids ready for output */
         
     struct h2_ihash_t *redo_tasks;  /* all tasks that need to be redone */
     
@@ -124,7 +124,7 @@ h2_mplx *h2_mplx_create(conn_rec *c, apr_pool_t *master,
  */ 
 void h2_mplx_release_and_join(h2_mplx *m, struct apr_thread_cond_t *wait);
 
-struct h2_task *h2_mplx_pop_task(h2_mplx *mplx, int *has_more);
+apr_status_t h2_mplx_pop_task(h2_mplx *m, struct h2_task **ptask);
 
 void h2_mplx_task_done(h2_mplx *m, struct h2_task *task, struct h2_task **ptask);
 
index 264513f0f3703ed786d35638911a3ffad5e85eb6..b3f72fc25ab03862dcf0d57c5e6e9c1579b4e21d 100644 (file)
@@ -326,6 +326,7 @@ static int on_frame_recv_cb(nghttp2_session *ng2s,
 {
     h2_session *session = (h2_session *)userp;
     h2_stream *stream;
+    apr_status_t rv = APR_SUCCESS;
     
     if (APLOGcdebug(session->c)) {
         char buffer[256];
@@ -346,7 +347,7 @@ static int on_frame_recv_cb(nghttp2_session *ng2s,
              * trailers */
             stream = get_stream(session, frame->hd.stream_id);
             if (stream) {
-                h2_stream_recv_frame(stream, NGHTTP2_HEADERS, frame->hd.flags);
+                rv = h2_stream_recv_frame(stream, NGHTTP2_HEADERS, frame->hd.flags);
             }
             break;
         case NGHTTP2_DATA:
@@ -356,7 +357,7 @@ static int on_frame_recv_cb(nghttp2_session *ng2s,
                               H2_STRM_LOG(APLOGNO(02923), stream, 
                               "DATA, len=%ld, flags=%d"), 
                               (long)frame->hd.length, frame->hd.flags);
-                h2_stream_recv_frame(stream, NGHTTP2_DATA, frame->hd.flags);
+                rv = h2_stream_recv_frame(stream, NGHTTP2_DATA, frame->hd.flags);
             }
             break;
         case NGHTTP2_PRIORITY:
@@ -411,7 +412,7 @@ static int on_frame_recv_cb(nghttp2_session *ng2s,
             }
             break;
     }
-    return 0;
+    return (APR_SUCCESS == rv)? 0 : NGHTTP2_ERR_PROTO;
 }
 
 static int h2_session_continue_data(h2_session *session) {
index 4cd2132207e10be8a4fb205c8eadf80e0028dbe8..925f3d6d81d540c642f9eb3065e0285f75a9564c 100644 (file)
@@ -444,7 +444,13 @@ apr_status_t h2_stream_recv_frame(h2_stream *stream, int ftype, int flags)
             else {
                 /* request HEADER */
                 ap_assert(stream->request == NULL);
-                ap_assert(stream->rtmp != NULL);
+                if (stream->rtmp == NULL) {
+                    /* This can only happen, if the stream has received no header
+                     * name/value pairs at all. The lastest nghttp2 version have become
+                     * pretty good at detecting this early. In any case, we have
+                     * to abort the connection here, since this is clearly a protocol error */
+                    return APR_EINVAL;
+                }
                 status = h2_request_end_headers(stream->rtmp, stream->pool, eos);
                 if (status != APR_SUCCESS) {
                     return status;
@@ -739,9 +745,13 @@ apr_status_t h2_stream_add_header(h2_stream *stream,
         status = h2_request_add_header(stream->rtmp, stream->pool,
                                        name, nlen, value, vlen);
     }
-    else  {
+    else if (H2_SS_OPEN == stream->state) {
         status = add_trailer(stream, name, nlen, value, vlen);
     }
+    else {
+        status = APR_EINVAL;
+    }
+    
     if (status != APR_SUCCESS) {
         ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c,
                       H2_STRM_MSG(stream, "header %s not accepted"), name);
index f328714951b3c4c0067ec9bd9513be4b353c426e..c3b4b844fd41381c24f94eda2e208561744e3a28 100644 (file)
@@ -89,6 +89,7 @@ struct h2_stream {
     unsigned int scheduled : 1; /* stream has been scheduled */
     unsigned int has_response : 1; /* response headers are known */
     unsigned int input_eof : 1; /* no more request data coming */
+    unsigned int out_checked : 1; /* output eof was double checked */
     unsigned int push_policy;   /* which push policy to use for this request */
     
     struct h2_task *task;       /* assigned task to fullfill request */
index 8a8d56e59efb0671c38f6e78ffbdf764a4a0467a..5b1247ec700888a35a5f7fafee59df3395f4a2d4 100644 (file)
@@ -55,6 +55,10 @@ static int h2_protocol_propose(conn_rec *c, request_rec *r,
     const char **protos = is_tls? h2_tls_protos : h2_clear_protos;
     
     (void)s;
+    if (!h2_mpm_supported()) {
+        return DECLINED;
+    }
+    
     if (strcmp(AP_PROTOCOL_HTTP1, ap_get_protocol(c))) {
         /* We do not know how to switch from anything else but http/1.1.
          */
@@ -127,6 +131,10 @@ static int h2_protocol_switch(conn_rec *c, request_rec *r, server_rec *s,
     const char **p = protos;
     
     (void)s;
+    if (!h2_mpm_supported()) {
+        return DECLINED;
+    }
+
     while (*p) {
         if (!strcmp(*p, protocol)) {
             found = 1;
index 01b506ac8544781dfb37d21d64d3091c14f9d193..e1879cb2006cc0f3e7a4bb250aa0bf0d66d321a0 100644 (file)
@@ -695,16 +695,47 @@ int h2_fifo_count(h2_fifo *fifo)
 
 static apr_status_t check_not_empty(h2_fifo *fifo, int block)
 {
-    if (fifo->count == 0) {
+    while (fifo->count == 0) {
         if (!block) {
             return APR_EAGAIN;
         }
-        while (fifo->count == 0) {
-            if (fifo->aborted) {
-                return APR_EOF;
+        if (fifo->aborted) {
+            return APR_EOF;
+        }
+        apr_thread_cond_wait(fifo->not_empty, fifo->lock);
+    }
+    return APR_SUCCESS;
+}
+
+static apr_status_t fifo_push_int(h2_fifo *fifo, void *elem, int block)
+{
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+
+    if (fifo->set && index_of(fifo, elem) >= 0) {
+        /* set mode, elem already member */
+        return APR_EEXIST;
+    }
+    else if (fifo->count == fifo->nelems) {
+        if (block) {
+            while (fifo->count == fifo->nelems) {
+                if (fifo->aborted) {
+                    return APR_EOF;
+                }
+                apr_thread_cond_wait(fifo->not_full, fifo->lock);
             }
-            apr_thread_cond_wait(fifo->not_empty, fifo->lock);
         }
+        else {
+            return APR_EAGAIN;
+        }
+    }
+    
+    ap_assert(fifo->count < fifo->nelems);
+    fifo->elems[nth_index(fifo, fifo->count)] = elem;
+    ++fifo->count;
+    if (fifo->count == 1) {
+        apr_thread_cond_broadcast(fifo->not_empty);
     }
     return APR_SUCCESS;
 }
@@ -718,33 +749,7 @@ static apr_status_t fifo_push(h2_fifo *fifo, void *elem, int block)
     }
 
     if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
-        if (fifo->set && index_of(fifo, elem) >= 0) {
-            /* set mode, elem already member */
-            apr_thread_mutex_unlock(fifo->lock);
-            return APR_EEXIST;
-        }
-        else if (fifo->count == fifo->nelems) {
-            if (block) {
-                while (fifo->count == fifo->nelems) {
-                    if (fifo->aborted) {
-                        apr_thread_mutex_unlock(fifo->lock);
-                        return APR_EOF;
-                    }
-                    apr_thread_cond_wait(fifo->not_full, fifo->lock);
-                }
-            }
-            else {
-                apr_thread_mutex_unlock(fifo->lock);
-                return APR_EAGAIN;
-            }
-        }
-        
-        ap_assert(fifo->count < fifo->nelems);
-        fifo->elems[nth_index(fifo, fifo->count)] = elem;
-        ++fifo->count;
-        if (fifo->count == 1) {
-            apr_thread_cond_broadcast(fifo->not_empty);
-        }
+        rv = fifo_push_int(fifo, elem, block);
         apr_thread_mutex_unlock(fifo->lock);
     }
     return rv;
@@ -760,12 +765,15 @@ apr_status_t h2_fifo_try_push(h2_fifo *fifo, void *elem)
     return fifo_push(fifo, elem, 0);
 }
 
-static void *pull_head(h2_fifo *fifo)
+static apr_status_t pull_head(h2_fifo *fifo, void **pelem, int block)
 {
-    void *elem;
+    apr_status_t rv;
     
-    ap_assert(fifo->count > 0);
-    elem = fifo->elems[fifo->head];
+    if ((rv = check_not_empty(fifo, block)) != APR_SUCCESS) {
+        *pelem = NULL;
+        return rv;
+    }
+    *pelem = fifo->elems[fifo->head];
     --fifo->count;
     if (fifo->count > 0) {
         fifo->head = nth_index(fifo, 1);
@@ -773,7 +781,7 @@ static void *pull_head(h2_fifo *fifo)
             apr_thread_cond_broadcast(fifo->not_full);
         }
     }
-    return elem;
+    return APR_SUCCESS;
 }
 
 static apr_status_t fifo_pull(h2_fifo *fifo, void **pelem, int block)
@@ -785,15 +793,7 @@ static apr_status_t fifo_pull(h2_fifo *fifo, void **pelem, int block)
     }
     
     if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
-        if ((rv = check_not_empty(fifo, block)) != APR_SUCCESS) {
-            apr_thread_mutex_unlock(fifo->lock);
-            *pelem = NULL;
-            return rv;
-        }
-
-        ap_assert(fifo->count > 0);
-        *pelem = pull_head(fifo);
-
+        rv = pull_head(fifo, pelem, block);
         apr_thread_mutex_unlock(fifo->lock);
     }
     return rv;
@@ -818,25 +818,17 @@ static apr_status_t fifo_peek(h2_fifo *fifo, h2_fifo_peek_fn *fn, void *ctx, int
         return APR_EOF;
     }
     
-    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
-        if ((rv = check_not_empty(fifo, block)) != APR_SUCCESS) {
-            apr_thread_mutex_unlock(fifo->lock);
-            return rv;
+    if (APR_SUCCESS == (rv = apr_thread_mutex_lock(fifo->lock))) {
+        if (APR_SUCCESS == (rv = pull_head(fifo, &elem, block))) {
+            switch (fn(elem, ctx)) {
+                case H2_FIFO_OP_PULL:
+                    break;
+                case H2_FIFO_OP_REPUSH:
+                    rv = fifo_push_int(fifo, elem, block);
+                    break;
+            }
         }
-
-        ap_assert(fifo->count > 0);
-        elem = pull_head(fifo);
-        
         apr_thread_mutex_unlock(fifo->lock);
-
-        switch (fn(elem, ctx)) {
-            case H2_FIFO_OP_PULL:
-                break;
-            case H2_FIFO_OP_REPUSH:
-                return h2_fifo_push(fifo, elem);
-                break;
-        }
-        
     }
     return rv;
 }
@@ -889,6 +881,313 @@ apr_status_t h2_fifo_remove(h2_fifo *fifo, void *elem)
     return rv;
 }
 
+/*******************************************************************************
+ * FIFO int queue
+ ******************************************************************************/
+
+struct h2_ififo {
+    int *elems;
+    int nelems;
+    int set;
+    int head;
+    int count;
+    int aborted;
+    apr_thread_mutex_t *lock;
+    apr_thread_cond_t  *not_empty;
+    apr_thread_cond_t  *not_full;
+};
+
+static int inth_index(h2_ififo *fifo, int n) 
+{
+    return (fifo->head + n) % fifo->nelems;
+}
+
+static apr_status_t ififo_destroy(void *data) 
+{
+    h2_ififo *fifo = data;
+
+    apr_thread_cond_destroy(fifo->not_empty);
+    apr_thread_cond_destroy(fifo->not_full);
+    apr_thread_mutex_destroy(fifo->lock);
+
+    return APR_SUCCESS;
+}
+
+static int iindex_of(h2_ififo *fifo, int id)
+{
+    int i;
+    
+    for (i = 0; i < fifo->count; ++i) {
+        if (id == fifo->elems[inth_index(fifo, i)]) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+static apr_status_t icreate_int(h2_ififo **pfifo, apr_pool_t *pool, 
+                                int capacity, int as_set)
+{
+    apr_status_t rv;
+    h2_ififo *fifo;
+    
+    fifo = apr_pcalloc(pool, sizeof(*fifo));
+    if (fifo == NULL) {
+        return APR_ENOMEM;
+    }
+
+    rv = apr_thread_mutex_create(&fifo->lock,
+                                 APR_THREAD_MUTEX_UNNESTED, pool);
+    if (rv != APR_SUCCESS) {
+        return rv;
+    }
+
+    rv = apr_thread_cond_create(&fifo->not_empty, pool);
+    if (rv != APR_SUCCESS) {
+        return rv;
+    }
+
+    rv = apr_thread_cond_create(&fifo->not_full, pool);
+    if (rv != APR_SUCCESS) {
+        return rv;
+    }
+
+    fifo->elems = apr_pcalloc(pool, capacity * sizeof(int));
+    if (fifo->elems == NULL) {
+        return APR_ENOMEM;
+    }
+    fifo->nelems = capacity;
+    fifo->set = as_set;
+    
+    *pfifo = fifo;
+    apr_pool_cleanup_register(pool, fifo, ififo_destroy, apr_pool_cleanup_null);
+
+    return APR_SUCCESS;
+}
+
+apr_status_t h2_ififo_create(h2_ififo **pfifo, apr_pool_t *pool, int capacity)
+{
+    return icreate_int(pfifo, pool, capacity, 0);
+}
+
+apr_status_t h2_ififo_set_create(h2_ififo **pfifo, apr_pool_t *pool, int capacity)
+{
+    return icreate_int(pfifo, pool, capacity, 1);
+}
+
+apr_status_t h2_ififo_term(h2_ififo *fifo)
+{
+    apr_status_t rv;
+    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
+        fifo->aborted = 1;
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
+
+apr_status_t h2_ififo_interrupt(h2_ififo *fifo)
+{
+    apr_status_t rv;
+    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
+        apr_thread_cond_broadcast(fifo->not_empty);
+        apr_thread_cond_broadcast(fifo->not_full);
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
+
+int h2_ififo_count(h2_ififo *fifo)
+{
+    return fifo->count;
+}
+
+static apr_status_t icheck_not_empty(h2_ififo *fifo, int block)
+{
+    while (fifo->count == 0) {
+        if (!block) {
+            return APR_EAGAIN;
+        }
+        if (fifo->aborted) {
+            return APR_EOF;
+        }
+        apr_thread_cond_wait(fifo->not_empty, fifo->lock);
+    }
+    return APR_SUCCESS;
+}
+
+static apr_status_t ififo_push_int(h2_ififo *fifo, int id, int block)
+{
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+
+    if (fifo->set && iindex_of(fifo, id) >= 0) {
+        /* set mode, elem already member */
+        return APR_EEXIST;
+    }
+    else if (fifo->count == fifo->nelems) {
+        if (block) {
+            while (fifo->count == fifo->nelems) {
+                if (fifo->aborted) {
+                    return APR_EOF;
+                }
+                apr_thread_cond_wait(fifo->not_full, fifo->lock);
+            }
+        }
+        else {
+            return APR_EAGAIN;
+        }
+    }
+    
+    ap_assert(fifo->count < fifo->nelems);
+    fifo->elems[inth_index(fifo, fifo->count)] = id;
+    ++fifo->count;
+    if (fifo->count == 1) {
+        apr_thread_cond_broadcast(fifo->not_empty);
+    }
+    return APR_SUCCESS;
+}
+
+static apr_status_t ififo_push(h2_ififo *fifo, int id, int block)
+{
+    apr_status_t rv;
+    
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+
+    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
+        rv = ififo_push_int(fifo, id, block);
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
+
+apr_status_t h2_ififo_push(h2_ififo *fifo, int id)
+{
+    return ififo_push(fifo, id, 1);
+}
+
+apr_status_t h2_ififo_try_push(h2_ififo *fifo, int id)
+{
+    return ififo_push(fifo, id, 0);
+}
+
+static apr_status_t ipull_head(h2_ififo *fifo, int *pi, int block)
+{
+    apr_status_t rv;
+    
+    if ((rv = icheck_not_empty(fifo, block)) != APR_SUCCESS) {
+        *pi = 0;
+        return rv;
+    }
+    *pi = fifo->elems[fifo->head];
+    --fifo->count;
+    if (fifo->count > 0) {
+        fifo->head = inth_index(fifo, 1);
+        if (fifo->count+1 == fifo->nelems) {
+            apr_thread_cond_broadcast(fifo->not_full);
+        }
+    }
+    return APR_SUCCESS;
+}
+
+static apr_status_t ififo_pull(h2_ififo *fifo, int *pi, int block)
+{
+    apr_status_t rv;
+    
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+    
+    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
+        rv = ipull_head(fifo, pi, block);
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
+
+apr_status_t h2_ififo_pull(h2_ififo *fifo, int *pi)
+{
+    return ififo_pull(fifo, pi, 1);
+}
+
+apr_status_t h2_ififo_try_pull(h2_ififo *fifo, int *pi)
+{
+    return ififo_pull(fifo, pi, 0);
+}
+
+static apr_status_t ififo_peek(h2_ififo *fifo, h2_ififo_peek_fn *fn, void *ctx, int block)
+{
+    apr_status_t rv;
+    int id;
+    
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+    
+    if (APR_SUCCESS == (rv = apr_thread_mutex_lock(fifo->lock))) {
+        if (APR_SUCCESS == (rv = ipull_head(fifo, &id, block))) {
+            switch (fn(id, ctx)) {
+                case H2_FIFO_OP_PULL:
+                    break;
+                case H2_FIFO_OP_REPUSH:
+                    rv = ififo_push_int(fifo, id, block);
+                    break;
+            }
+        }
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
+
+apr_status_t h2_ififo_peek(h2_ififo *fifo, h2_ififo_peek_fn *fn, void *ctx)
+{
+    return ififo_peek(fifo, fn, ctx, 1);
+}
+
+apr_status_t h2_ififo_try_peek(h2_ififo *fifo, h2_ififo_peek_fn *fn, void *ctx)
+{
+    return ififo_peek(fifo, fn, ctx, 0);
+}
+
+apr_status_t h2_ififo_remove(h2_ififo *fifo, int id)
+{
+    apr_status_t rv;
+    
+    if (fifo->aborted) {
+        return APR_EOF;
+    }
+
+    if ((rv = apr_thread_mutex_lock(fifo->lock)) == APR_SUCCESS) {
+        int i, rc;
+        int e;
+        
+        rc = 0;
+        for (i = 0; i < fifo->count; ++i) {
+            e = fifo->elems[inth_index(fifo, i)];
+            if (e == id) {
+                ++rc;
+            }
+            else if (rc) {
+                fifo->elems[inth_index(fifo, i-rc)] = e;
+            }
+        }
+        if (rc) {
+            fifo->count -= rc;
+            if (fifo->count + rc == fifo->nelems) {
+                apr_thread_cond_broadcast(fifo->not_full);
+            }
+            rv = APR_SUCCESS;
+        }
+        else {
+            rv = APR_EAGAIN;
+        }
+        
+        apr_thread_mutex_unlock(fifo->lock);
+    }
+    return rv;
+}
 
 /*******************************************************************************
  * h2_util for apt_table_t
index 35163716ade6df9f42d926f98ec4c50f97f113ef..b2c25f69ccf889ac762520d18ffdddd9b6ab4fd3 100644 (file)
@@ -185,7 +185,7 @@ size_t h2_iq_mshift(h2_iqueue *q, int *pint, size_t max);
 int h2_iq_contains(h2_iqueue *q, int sid);
 
 /*******************************************************************************
- * FIFO queue
+ * FIFO queue (void* elements)
  ******************************************************************************/
 
 /**
@@ -255,6 +255,72 @@ apr_status_t h2_fifo_try_peek(h2_fifo *fifo, h2_fifo_peek_fn *fn, void *ctx);
  */
 apr_status_t h2_fifo_remove(h2_fifo *fifo, void *elem);
 
+/*******************************************************************************
+ * iFIFO queue (int elements)
+ ******************************************************************************/
+
+/**
+ * A thread-safe FIFO queue with some extra bells and whistles, if you
+ * do not need anything special, better use 'apr_queue'.
+ */
+typedef struct h2_ififo h2_ififo;
+
+/**
+ * Create a FIFO queue that can hold up to capacity int. ints can
+ * appear several times.
+ */
+apr_status_t h2_ififo_create(h2_ififo **pfifo, apr_pool_t *pool, int capacity);
+
+/**
+ * Create a FIFO set that can hold up to capacity integers. Ints only
+ * appear once. Pushing an int already present does not change the
+ * queue and is successful.
+ */
+apr_status_t h2_ififo_set_create(h2_ififo **pfifo, apr_pool_t *pool, int capacity);
+
+apr_status_t h2_ififo_term(h2_ififo *fifo);
+apr_status_t h2_ififo_interrupt(h2_ififo *fifo);
+
+int h2_ififo_count(h2_ififo *fifo);
+
+/**
+ * Push an int into the queue. Blocks if there is no capacity left.
+ * 
+ * @param fifo the FIFO queue
+ * @param id  the int to push
+ * @return APR_SUCCESS on push, APR_EAGAIN on try_push on a full queue,
+ *         APR_EEXIST when in set mode and elem already there.
+ */
+apr_status_t h2_ififo_push(h2_ififo *fifo, int id);
+apr_status_t h2_ififo_try_push(h2_ififo *fifo, int id);
+
+apr_status_t h2_ififo_pull(h2_ififo *fifo, int *pi);
+apr_status_t h2_ififo_try_pull(h2_ififo *fifo, int *pi);
+
+typedef h2_fifo_op_t h2_ififo_peek_fn(int head, void *ctx);
+
+/**
+ * Call given function on the head of the queue, once it exists, and
+ * perform the returned operation on it. The queue will hold its lock during
+ * this time, so no other operations on the queue are possible.
+ * @param fifo the queue to peek at
+ * @param fn   the function to call on the head, once available
+ * @param ctx  context to pass in call to function
+ */
+apr_status_t h2_ififo_peek(h2_ififo *fifo, h2_ififo_peek_fn *fn, void *ctx);
+
+/**
+ * Non-blocking version of h2_fifo_peek.
+ */
+apr_status_t h2_ififo_try_peek(h2_ififo *fifo, h2_ififo_peek_fn *fn, void *ctx);
+
+/**
+ * Remove the integer from the queue, will remove multiple appearances.
+ * @param id  the integer to remove
+ * @return APR_SUCCESS iff > 0 ints were removed, APR_EAGAIN otherwise.
+ */
+apr_status_t h2_ififo_remove(h2_ififo *fifo, int id);
+
 /*******************************************************************************
  * common helpers
  ******************************************************************************/
index 9c052e320096330024f5e2c8ca0dc91796f8237d..da284faf4ed1a369b385d508ed8f27d42ab71a76 100644 (file)
@@ -26,7 +26,7 @@
  * @macro
  * Version number of the http2 module as c string
  */
-#define MOD_HTTP2_VERSION "1.10.6-DEV"
+#define MOD_HTTP2_VERSION "1.10.7"
 
 /**
  * @macro
@@ -34,7 +34,7 @@
  * release. This is a 24 bit number with 8 bits for major number, 8 bits
  * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
  */
-#define MOD_HTTP2_VERSION_NUM 0x010a06
+#define MOD_HTTP2_VERSION_NUM 0x010a07
 
 
 #endif /* mod_h2_h2_version_h */
index 0bbb65223f7b1f0f1ec968db9981a64f74d8bdab..5abddd4a1d58f794ae40cb13e84f2b48898ff013 100644 (file)
@@ -150,15 +150,16 @@ static void cleanup_zombies(h2_workers *workers)
 
 static apr_status_t slot_pull_task(h2_slot *slot, h2_mplx *m)
 {
-    int has_more;
-    slot->task = h2_mplx_pop_task(m, &has_more);
+    apr_status_t rv;
+    
+    rv = h2_mplx_pop_task(m, &slot->task);
     if (slot->task) {
         /* Ok, we got something to give back to the worker for execution. 
          * If we still have idle workers, we let the worker be sticky, 
          * e.g. making it poll the task's h2_mplx instance for more work 
          * before asking back here. */
         slot->sticks = slot->workers->max_workers;
-        return has_more? APR_EAGAIN : APR_SUCCESS;            
+        return rv;            
     }
     slot->sticks = 0;
     return APR_EOF;
index ea399c91a28d5a273330d5a36d939415e9ad57ad..420e74c33636447f52ef578ec555efdf6f9e12e6 100644 (file)
@@ -65,6 +65,7 @@ typedef struct {
 } features;
 
 static features myfeats;
+static int mpm_warned;
 
 /* The module initialization. Called once as apache hook, before any multi
  * processing (threaded or not) happens. It is typically at least called twice, 
@@ -141,6 +142,17 @@ static int h2_post_config(apr_pool_t *p, apr_pool_t *plog,
             break;
     }
     
+    if (!h2_mpm_supported() && !mpm_warned) {
+        mpm_warned = 1;
+        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(10034)
+                     "The mpm module (%s) is not supported by mod_http2. The mpm determines "
+                     "how things are processed in your server. HTTP/2 has more demands in "
+                     "this regard and the currently selected mpm will just not do. "
+                     "This is an advisory warning. Your server will continue to work, but "
+                     "the HTTP/2 protocol will be inactive.", 
+                     h2_conn_mpm_name());
+    }
+    
     status = h2_h2_init(p, s);
     if (status == APR_SUCCESS) {
         status = h2_switch_init(p, s);
index e6aae86e1955d132ad532f677896a95e6fd69439..3dd68a0816c324fd31baf699976427e2591e6512 100644 (file)
@@ -1,7 +1,6 @@
 -*- mode:org -*-
 * Requirements:
-** lua 5.1, 5.2 ( http://www.lua.org/ ) or LuaJIT 2.x ( http://www.luajit.org/ )
-** Does NOT work with Lua 5.3 yet
+** lua 5.1, 5.2, 5.3 ( http://www.lua.org/ ) or LuaJIT 2.x ( http://www.luajit.org/ )
 ** Apache HTTPD 2.4 ( http://httpd.apache.org/ ) or higher
 
 * Documentation
@@ -24,6 +23,9 @@
 ** TODO: document or remove block sections
 ** TODO: test per-dir behavior of block sections
 ** TODO: Suppress internal details (fs path to scripts, etc) in error responses
+** TODO: Check whether we can tighten the mode flag in lua_load(),
+         luaL_loadfile() an dluaL_loadbuffer() from NULL (="bt")
+         to e.g. "t".
     
 * License
   Apache License, Version 2.0,
index 1c20bee63f8bf330b71e6423d9832c7a493abab5..73d4f8aabe08c3e363fcf46b85e7d1ef02e61e9a 100644 (file)
@@ -12,47 +12,19 @@ AC_DEFUN([CHECK_LUA_PATH], [dnl
     AC_MSG_CHECKING([for lua.h in $1/$2])
     if test -f $1/$2/lua.h; then
         AC_MSG_RESULT([yes])
-
         save_CFLAGS=$CFLAGS
         save_LDFLAGS=$LDFLAGS
-        save_LIBS=$LIBS
-
         CFLAGS="$CFLAGS"
         LDFLAGS="-L$1/$3 $LDFLAGS $lib_m"
-
         AC_CHECK_LIB($4, luaL_newstate, [
-            dnl mod_lua relies on some compatibility APIs to function.
-            AC_MSG_CHECKING([for luaL_register in -l$4])
-            CFLAGS="$CFLAGS -I$1/$2"
-            LIBS="-l$4"
-            AC_LINK_IFELSE([
-                AC_LANG_PROGRAM([[
-                    #define LUA_COMPAT_ALL
-                    #define LUA_COMPAT_5_2
-                    #define LUA_COMPAT_5_1
-                    #define LUA_COMPAT_MODULE
-
-                    #include <lua.h>
-                    #include <lauxlib.h>
-                ]], [[
-                    /* This isn't a valid call, but we're testing linkability */
-                    luaL_register(NULL, NULL, NULL);
-                ]])
-            ], [
-                AC_MSG_RESULT([yes])
-                LUA_LIBS="-L$1/$3 -l$4 $lib_m"
-                if test "x$ap_platform_runtime_link_flag" != "x"; then
-                   APR_ADDTO(LUA_LIBS, [$ap_platform_runtime_link_flag$1/$3])
-                fi
-                LUA_CFLAGS="-I$1/$2"
-            ], [
-                AC_MSG_RESULT([no])
-            ])
+            LUA_LIBS="-L$1/$3 -l$4 $lib_m"
+            if test "x$ap_platform_runtime_link_flag" != "x"; then
+               APR_ADDTO(LUA_LIBS, [$ap_platform_runtime_link_flag$1/$3])
+            fi
+            LUA_CFLAGS="-I$1/$2"
         ])
-
         CFLAGS=$save_CFLAGS
         LDFLAGS=$save_LDFLAGS
-        LIBS=$save_LIBS
 
         if test -n "${LUA_LIBS}"; then
             break
index fd3ba20e7a7c4a2a167fd79d4b3b5affa3c057c3..8e34cf30828b595147200dca0c3538ac6d805c55 100644 (file)
@@ -82,7 +82,11 @@ static const luaL_Reg lua_table_methods[] = {
 int ap_lua_init(lua_State *L, apr_pool_t *p)
 {
     luaL_newmetatable(L, "Apr.Table");
+#if LUA_VERSION_NUM < 502
     luaL_register(L, "apr_table", lua_table_methods);
+#else
+    luaL_newlib(L, lua_table_methods);
+#endif
     lua_pushstring(L, "__index");
     lua_pushstring(L, "get");
     lua_gettable(L, 2);
index bc09bdcffb444f10b7e9b83c49177a5763bddde1..14674a901d9368aa5b9eda083aa86c699c899cd9 100644 (file)
@@ -265,13 +265,13 @@ void ap_lua_load_config_lmodule(lua_State *L)
     lua_pushvalue(L, -1);
 
     lua_setfield(L, -2, "__index");
-    luaL_register(L, NULL, cfg_methods);        /* [metatable] */
+    luaL_setfuncs_compat(L, cfg_methods);       /* [metatable] */
 
 
     luaL_newmetatable(L, "Apache2.CommandParameters");
     lua_pushvalue(L, -1);
 
     lua_setfield(L, -2, "__index");
-    luaL_register(L, NULL, cmd_methods);        /* [metatable] */
+    luaL_setfuncs_compat(L, cmd_methods);       /* [metatable] */
 
 }
index 4cb4fd00674333eef8a9cda54a776a6dde2acca5..f9f9ae640a3ee4f368691f52e844b54e5d0f6247 100644 (file)
@@ -345,7 +345,7 @@ static int req_parsebody(lua_State *L)
     char *multipart;
     const char *contentType;
     request_rec *r = ap_lua_check_request_rec(L, 1);
-    max_post_size = (apr_size_t) luaL_optint(L, 2, MAX_STRING_LEN);
+    max_post_size = (apr_size_t) luaL_optinteger(L, 2, MAX_STRING_LEN);
     multipart = apr_pcalloc(r->pool, 256);
     contentType = apr_table_get(r->headers_in, "Content-Type");
     lua_newtable(L);
@@ -418,7 +418,7 @@ static int lua_ap_requestbody(lua_State *L)
     
     r = ap_lua_check_request_rec(L, 1);
     filename = luaL_optstring(L, 2, 0);
-    maxSize = luaL_optint(L, 3, 0);
+    maxSize = (apr_off_t)luaL_optinteger(L, 3, 0);
 
     if (r) {
         apr_off_t size;
@@ -1708,7 +1708,7 @@ static int lua_ap_make_etag(lua_State *L)
     luaL_checktype(L, 1, LUA_TUSERDATA);
     r = ap_lua_check_request_rec(L, 1);
     luaL_checktype(L, 2, LUA_TBOOLEAN);
-    force_weak = luaL_optint(L, 2, 0);
+    force_weak = (int)luaL_optinteger(L, 2, 0);
     returnValue = ap_make_etag(r, force_weak);
     lua_pushstring(L, returnValue);
     return 1;
@@ -2040,7 +2040,7 @@ static int lua_set_cookie(lua_State *L)
         /* expiry */
         lua_pushstring(L, "expires");
         lua_gettable(L, -2);
-        expires = luaL_optint(L, -1, 0);
+        expires = (int)luaL_optinteger(L, -1, 0);
         lua_pop(L, 1);
         
         /* secure */
@@ -2955,27 +2955,27 @@ void ap_lua_load_request_lmodule(lua_State *L, apr_pool_t *p)
     lua_pushlightuserdata(L, dispatch);
     lua_setfield(L, LUA_REGISTRYINDEX, "Apache2.Request.dispatch");
 
-    luaL_newmetatable(L, "Apache2.Request");    /* [metatable] */
+    luaL_newmetatable(L, "Apache2.Request");     /* [metatable] */
     lua_pushvalue(L, -1);
 
     lua_setfield(L, -2, "__index");
-    luaL_register(L, NULL, request_methods);    /* [metatable] */
+    luaL_setfuncs_compat(L, request_methods);    /* [metatable] */
 
     lua_pop(L, 2);
 
-    luaL_newmetatable(L, "Apache2.Connection"); /* [metatable] */
+    luaL_newmetatable(L, "Apache2.Connection");  /* [metatable] */
     lua_pushvalue(L, -1);
 
     lua_setfield(L, -2, "__index");
-    luaL_register(L, NULL, connection_methods); /* [metatable] */
+    luaL_setfuncs_compat(L, connection_methods); /* [metatable] */
 
     lua_pop(L, 2);
 
-    luaL_newmetatable(L, "Apache2.Server");     /* [metatable] */
+    luaL_newmetatable(L, "Apache2.Server");      /* [metatable] */
     lua_pushvalue(L, -1);
 
     lua_setfield(L, -2, "__index");
-    luaL_register(L, NULL, server_methods);     /* [metatable] */
+    luaL_setfuncs_compat(L, server_methods);     /* [metatable] */
 
     lua_pop(L, 2);
 
index 46e71f365225eae2f96cbfe23e91ac6b3ed4227a..6d791995953ab038d7c923763e4345c8b9fbff50 100644 (file)
@@ -1080,13 +1080,9 @@ static const char *register_named_block_function_hook(const char *name,
         else {
             luaL_Buffer b;
             luaL_buffinit(lvm, &b);
-#if LUA_VERSION_NUM >= 503
-            lua_dump(lvm, ldump_writer, &b, 0);
-#else
             lua_dump(lvm, ldump_writer, &b);
-#endif
             luaL_pushresult(&b);
-            spec->bytecode_len = lua_strlen(lvm, -1);
+            spec->bytecode_len = lua_rawlen(lvm, -1);
             spec->bytecode = apr_pstrmemdup(cmd->pool, lua_tostring(lvm, -1),
                                             spec->bytecode_len);
             lua_close(lvm);
index cd2025b1b760329d10e8d08079c58718bab4fb50..0e49cdc0d4b38eb8a47bedcfe8ef1d52bd422b16 100644 (file)
 #include "apr_hooks.h"
 #include "apr_reslist.h"
 
-/* Allow for Lua 5.2 backwards compatibility */
-#define LUA_COMPAT_ALL
-/* Allow for Lua 5.3 backwards compatibility */
-#define LUA_COMPAT_5_2
-#define LUA_COMPAT_5_1
-#define LUA_COMPAT_MODULE
-
 #include "lua.h"
 #include "lauxlib.h"
 #include "lualib.h"
 
 #if LUA_VERSION_NUM > 501
 /* Load mode for lua_load() */
-#define lua_load(a,b,c,d) lua_load(a,b,c,d,NULL)
-#define lua_resume(a,b)   lua_resume(a, NULL, b)
+#define lua_load(a,b,c,d)  lua_load(a,b,c,d,NULL)
+#define lua_resume(a,b)    lua_resume(a, NULL, b)
+#define luaL_setfuncs_compat(a,b) luaL_setfuncs(a,b,0)
 #else
-#define lua_rawlen(L,i)   lua_objlen(L, (i))
+#define lua_rawlen(L,i)    lua_objlen(L, (i))
+#define luaL_setfuncs_compat(a,b) luaL_register(a,NULL,b)
+#endif
+#if LUA_VERSION_NUM > 502
+#define lua_dump(a,b,c) lua_dump(a,b,c,0)
 #endif
 
 /* Create a set of AP_LUA_DECLARE(type), AP_LUA_DECLARE_NONSTD(type) and
index baa28149ddb665b10400cd73620ab2ec380a29bf..5ff205be612fec225812670a175c830848641629 100644 (file)
@@ -1332,14 +1332,19 @@ static int mime_match(accept_rec *accept_r, var_rec *avail)
     const char *avail_type = avail->mime_type;
     int len = strlen(accept_type);
 
-    if (accept_type[0] == '*') {        /* Anything matches star/star */
+    if ((len == 1 && accept_type[0] == '*')
+            || (len == 3 && !strncmp(accept_type, "*/*", 3))) {
+        /* Anything matches star or star/star */
         if (avail->mime_stars < 1) {
             avail->mime_stars = 1;
         }
         return 1;
     }
-    else if ((accept_type[len - 1] == '*') &&
-             !strncmp(accept_type, avail_type, len - 2)) {
+    else if (len > 2 && accept_type[len - 2] == '/'
+                     && accept_type[len - 1] == '*'
+                     && !strncmp(accept_type, avail_type, len - 2)
+                     && avail_type[len - 2] == '/') {
+        /* Any subtype matches for type/star */
         if (avail->mime_stars < 2) {
             avail->mime_stars = 2;
         }
index 67d692a71b36eb1ea35c9ba617679109bcefcf8b..9647c6f55b7779e6419b5fdb9452092c13f2666a 100644 (file)
@@ -203,6 +203,7 @@ static const char* really_last_key = "rewrite_really_last";
 #define OPTION_IGNORE_INHERIT       (1<<8)
 #define OPTION_IGNORE_CONTEXT_INFO  (1<<9)
 #define OPTION_LEGACY_PREFIX_DOCROOT (1<<10)
+#define OPTION_LONGOPT              (1<<11)
 
 #ifndef RAND_MAX
 #define RAND_MAX 32767
@@ -397,6 +398,7 @@ typedef struct {
     char        *perdir;
     backrefinfo briRR;
     backrefinfo briRC;
+    apr_pool_t *temp_pool;
 } rewrite_ctx;
 
 /*
@@ -2286,14 +2288,13 @@ static APR_INLINE char *find_char_in_curlies(char *s, int c)
  * are interpreted by a later expansion, producing results that
  * were not intended by the administrator.
  */
-static char *do_expand(char *input, rewrite_ctx *ctx, rewriterule_entry *entry)
+static char *do_expand(char *input, rewrite_ctx *ctx, rewriterule_entry *entry, apr_pool_t *pool)
 {
     result_list *result, *current;
     result_list sresult[SMALL_EXPANSION];
     unsigned spc = 0;
     apr_size_t span, inputlen, outlen;
     char *p, *c;
-    apr_pool_t *pool = ctx->r->pool;
 
     span = strcspn(input, "\\$%");
     inputlen = strlen(input);
@@ -2398,10 +2399,10 @@ static char *do_expand(char *input, rewrite_ctx *ctx, rewriterule_entry *entry)
                     }
 
                     /* reuse of key variable as result */
-                    key = lookup_map(ctx->r, map, do_expand(key, ctx, entry));
+                    key = lookup_map(ctx->r, map, do_expand(key, ctx, entry, pool));
 
                     if (!key && dflt && *dflt) {
-                        key = do_expand(dflt, ctx, entry);
+                        key = do_expand(dflt, ctx, entry, pool);
                     }
 
                     if (key) {
@@ -2499,7 +2500,7 @@ static void do_expand_env(data_item *env, rewrite_ctx *ctx)
     char *name, *val;
 
     while (env) {
-        name = do_expand(env->data, ctx, NULL);
+        name = do_expand(env->data, ctx, NULL, ctx->r->pool);
         if (*name == '!') {
             name++;
             apr_table_unset(ctx->r->subprocess_env, name);
@@ -2626,7 +2627,7 @@ static void add_cookie(request_rec *r, char *s)
 static void do_expand_cookie(data_item *cookie, rewrite_ctx *ctx)
 {
     while (cookie) {
-        add_cookie(ctx->r, do_expand(cookie->data, ctx, NULL));
+        add_cookie(ctx->r, do_expand(cookie->data, ctx, NULL, ctx->r->pool));
         cookie = cookie->next;
     }
 
@@ -3037,6 +3038,9 @@ static const char *cmd_rewriteoptions(cmd_parms *cmd,
         else if (!strcasecmp(w, "legacyprefixdocroot")) {
             options |= OPTION_LEGACY_PREFIX_DOCROOT;
         }
+        else if (!strcasecmp(w, "LongURLOptimization")) {
+            options |= OPTION_LONGOPT;
+        }
         else {
             return apr_pstrcat(cmd->pool, "RewriteOptions: unknown option '",
                                w, "'", NULL);
@@ -3867,7 +3871,7 @@ static APR_INLINE int compare_lexicography(char *a, char *b)
 /*
  * Apply a single rewriteCond
  */
-static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
+static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx, apr_pool_t *pool)
 {
     char *input = NULL;
     apr_finfo_t sb;
@@ -3877,7 +3881,7 @@ static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
     int basis;
 
     if (p->ptype != CONDPAT_AP_EXPR)
-        input = do_expand(p->input, ctx, NULL);
+        input = do_expand(p->input, ctx, NULL, pool);
 
     switch (p->ptype) {
     case CONDPAT_FILE_EXISTS:
@@ -4041,7 +4045,7 @@ static APR_INLINE void force_type_handler(rewriterule_entry *p,
     char *expanded;
 
     if (p->forced_mimetype) {
-        expanded = do_expand(p->forced_mimetype, ctx, p);
+        expanded = do_expand(p->forced_mimetype, ctx, p, ctx->r->pool);
 
         if (*expanded) {
             ap_str_tolower(expanded);
@@ -4055,7 +4059,7 @@ static APR_INLINE void force_type_handler(rewriterule_entry *p,
     }
 
     if (p->forced_handler) {
-        expanded = do_expand(p->forced_handler, ctx, p);
+        expanded = do_expand(p->forced_handler, ctx, p, ctx->r->pool);
 
         if (*expanded) {
             ap_str_tolower(expanded);
@@ -4152,7 +4156,7 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
     for (i = 0; i < rewriteconds->nelts; ++i) {
         rewritecond_entry *c = &conds[i];
 
-        rc = apply_rewrite_cond(c, ctx);
+        rc = apply_rewrite_cond(c, ctx,  ctx->temp_pool ? ctx->temp_pool : r->pool);
         /*
          * Reset vary_this if the novary flag is set for this condition.
          */
@@ -4174,6 +4178,9 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
             }
         }
         else if (!rc) {
+            if (ctx->temp_pool) { 
+                apr_pool_clear(ctx->temp_pool);
+            }
             return 0;
         }
 
@@ -4191,7 +4198,7 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
 
     /* expand the result */
     if (!(p->flags & RULEFLAG_NOSUB)) {
-        newuri = do_expand(p->output, ctx, p);
+        newuri = do_expand(p->output, ctx, p, ctx->r->pool);
         rewritelog((r, 2, ctx->perdir, "rewrite '%s' -> '%s'", ctx->uri,
                     newuri));
     }
@@ -4329,11 +4336,21 @@ static int apply_rewrite_list(request_rec *r, apr_array_header_t *rewriterules,
     int s;
     rewrite_ctx *ctx;
     int round = 1;
+    rewrite_perdir_conf *dconf = (rewrite_perdir_conf *)
+                                 ap_get_module_config(r->per_dir_config,
+                                                      &rewrite_module);
 
     ctx = apr_palloc(r->pool, sizeof(*ctx));
     ctx->perdir = perdir;
     ctx->r = r;
 
+    if (dconf->options & OPTION_LONGOPT) { 
+        apr_pool_create(&(ctx->temp_pool), r->pool);
+    }
+    else { 
+        ctx->temp_pool = NULL;
+    }
+
     /*
      *  Iterate over all existing rules
      */
index b8281e0b542bab5885c9f4b037264021ecfc47ee..b9cf3475281ee7a2f264dbb43e1eca9a28976dcb 100644 (file)
@@ -116,13 +116,15 @@ static const char *set_worker_param(apr_pool_t *p,
          * The default value is 60 seconds, meaning that if
          * in error state, it will be retried after that timeout.
          */
-        ival = atoi(val);
-        if (ival < 0)
-            return "Retry must be a positive value";
-        worker->s->retry = apr_time_from_sec(ival);
+        if (ap_timeout_parameter_parse(val, &timeout, "s") != APR_SUCCESS)
+            return "Retry value has wrong format";
+        if (timeout < 1000)
+            return "Retry must be at least one millisecond";
+        worker->s->retry = timeout;
         worker->s->retry_set = 1;
     }
     else if (!strcasecmp(key, "ttl")) {
+        /* XXX Second granularity is OK */
         /* Time in seconds that will destroy all the connections
          * that exceed the smax
          */
@@ -173,10 +175,11 @@ static const char *set_worker_param(apr_pool_t *p,
         /* Connection timeout in seconds.
          * Defaults to server timeout.
          */
-        ival = atoi(val);
-        if (ival < 1)
-            return "Timeout must be at least one second";
-        worker->s->timeout = apr_time_from_sec(ival);
+        if (ap_timeout_parameter_parse(val, &timeout, "s") != APR_SUCCESS)
+            return "Timeout value has wrong format";
+        if (timeout < 1000)
+            return "Timeout must be at least one millisecond";
+        worker->s->timeout = timeout;
         worker->s->timeout_set = 1;
     }
     else if (!strcasecmp(key, "iobuffersize")) {
@@ -269,14 +272,15 @@ static const char *set_worker_param(apr_pool_t *p,
             return "flushpackets must be on|off|auto";
     }
     else if (!strcasecmp(key, "flushwait")) {
-        ival = atoi(val);
-        if (ival > 1000 || ival < 0) {
-            return "flushwait must be <= 1000, or 0 for system default of 10 millseconds.";
+        if (ap_timeout_parameter_parse(val, &timeout, "ms") != APR_SUCCESS)
+            return "flushwait has wrong format";
+        if (timeout > 1000000 || timeout < 0) {
+            return "flushwait must be <= 1s, or 0 for system default of 10 millseconds.";
         }
-        if (ival == 0)
+        if (timeout == 0)
             worker->s->flush_wait = PROXY_FLUSH_WAIT;
         else
-            worker->s->flush_wait = ival * 1000;    /* change to microseconds */
+            worker->s->flush_wait = timeout;
     }
     else if (!strcasecmp(key, "ping")) {
         /* Ping/Pong timeout in given unit (default is second).
@@ -341,6 +345,7 @@ static const char *set_balancer_param(proxy_server_conf *conf,
 {
 
     int ival;
+    apr_interval_time_t timeout;
     if (!strcasecmp(key, "stickysession")) {
         char *path;
         /* Balancer sticky session name.
@@ -391,10 +396,11 @@ static const char *set_balancer_param(proxy_server_conf *conf,
          * wait for a free worker.
          * Default is not to wait.
          */
-        ival = atoi(val);
-        if (ival < 1)
-            return "timeout must be at least one second";
-        balancer->s->timeout = apr_time_from_sec(ival);
+        if (ap_timeout_parameter_parse(val, &timeout, "s") != APR_SUCCESS)
+            return "Timeout value has wrong format";
+        if (timeout < 10000)
+            return "Timeout must be at least ten milliseconds";
+        balancer->s->timeout = timeout;
     }
     else if (!strcasecmp(key, "maxattempts")) {
         /* Maximum number of failover attempts before
@@ -932,14 +938,6 @@ static int proxy_fixup(request_rec *r)
     if (!r->proxyreq || !r->filename || strncmp(r->filename, "proxy:", 6) != 0)
         return DECLINED;
 
-    /* A request that has passed through .htaccess has no business
-     * serving contents from so far outside its directory.
-     * Since we're going to decline it, don't waste time here.
-     */
-    if (ap_request_tainted(r, AP_TAINT_HTACCESS)) {
-        return DECLINED;
-    }
-
     /* XXX: Shouldn't we try this before we run the proxy_walk? */
     url = &r->filename[6];
 
@@ -1033,13 +1031,6 @@ static int proxy_handler(request_rec *r)
         return DECLINED;
     }
 
-    /* A request that has passed through .htaccess has no business
-     * serving contents from so far outside its directory.
-     */
-    if (ap_request_tainted(r, AP_TAINT_HTACCESS)) {
-        return DECLINED;
-    }
-
     if (!r->proxyreq) {
         /* We may have forced the proxy handler via config or .htaccess */
         if (r->handler &&
index 0ea7b3fc3d31856c236ce5bac339ec8e63c03f0c..4edda9fe1f4ca1fa678874dfe2ec7d23a31361eb 100644 (file)
@@ -469,8 +469,6 @@ struct proxy_worker {
 
 /* default to health check every 30 seconds */
 #define HCHECK_WATHCHDOG_DEFAULT_INTERVAL (30)
-/* The watchdog runs every 2 seconds, which is also the minimal check */
-#define HCHECK_WATHCHDOG_INTERVAL (2)
 
 /*
  * Time to wait (in microseconds) to find out if more data is currently
index 12913533bd6101dcdddf9149cf3e52504b9d9035..69086e94564d315e0f9b4c13a6c41576320ac11c 100644 (file)
@@ -22,6 +22,7 @@
 #include "apr_version.h"
 #include "ap_hooks.h"
 #include "apr_date.h"
+#include "mod_watchdog.h"
 
 static const char *balancer_mutex_type = "proxy-balancer-shm";
 ap_slotmem_provider_t *storage = NULL;
@@ -1140,10 +1141,12 @@ static int balancer_handler(request_rec *r)
              }
         }
         if ((val = apr_table_get(params, "w_hi"))) {
-            int ival = atoi(val);
-            if (ival >= HCHECK_WATHCHDOG_INTERVAL) {
-                wsel->s->interval = apr_time_from_sec(ival);
-             }
+            apr_interval_time_t hci;
+            if (ap_timeout_parameter_parse(val, &hci, "ms") == APR_SUCCESS) {
+                if (hci >= AP_WD_TM_SLICE) {
+                    wsel->s->interval = hci;
+                }
+            }
         }
         if ((val = apr_table_get(params, "w_hp"))) {
             int ival = atoi(val);
@@ -1612,7 +1615,7 @@ static int balancer_handler(request_rec *r)
                 ap_rputs(apr_strfsize(worker->s->read, fbuf), r);
                 if (set_worker_hc_param_f) {
                     ap_rprintf(r, "</td><td>%s</td>", ap_proxy_show_hcmethod(worker->s->method));
-                    ap_rprintf(r, "<td>%d</td>", (int)apr_time_sec(worker->s->interval));
+                    ap_rprintf(r, "<td>%dms</td>", (int)apr_time_msec(worker->s->interval));
                     ap_rprintf(r, "<td>%d (%d)</td>", worker->s->passes,worker->s->pcount);
                     ap_rprintf(r, "<td>%d (%d)</td>", worker->s->fails, worker->s->fcount);
                     ap_rprintf(r, "<td>%s</td>", worker->s->hcuri);
@@ -1681,8 +1684,8 @@ static int balancer_handler(request_rec *r)
                 ap_rputs("<tr><td>Expr</td><td><select name='w_he'>\n", r);
                 hc_select_exprs_f(r, wsel->s->hcexpr);
                 ap_rputs("</select>\n</td></tr>\n", r);
-                ap_rprintf(r, "<tr><td>Interval (secs)</td><td><input name='w_hi' id='w_hi' type='text'"
-                           "value='%d'></td></tr>\n", (int)apr_time_sec(wsel->s->interval));
+                ap_rprintf(r, "<tr><td>Interval (ms)</td><td><input name='w_hi' id='w_hi' type='text'"
+                           "value='%d'></td></tr>\n", (int)apr_time_msec(wsel->s->interval));
                 ap_rprintf(r, "<tr><td>Passes trigger</td><td><input name='w_hp' id='w_hp' type='text'"
                            "value='%d'></td></tr>\n", wsel->s->passes);
                 ap_rprintf(r, "<tr><td>Fails trigger)</td><td><input name='w_hf' id='w_hf' type='text'"
index d40ab20530685bbf55d235631d2bb5a4ccd1f663..41292e8726756d94fe4974b1f4abe66e67a59f87 100644 (file)
@@ -321,7 +321,6 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
     apr_status_t rv;
     apr_size_t avail_len, len, required_len;
     int next_elem, starting_elem;
-    int fpm = 0;
     fcgi_req_config_t *rconf = ap_get_module_config(r->request_config, &proxy_fcgi_module);
     fcgi_dirconf_t *dconf = ap_get_module_config(r->per_dir_config, &proxy_fcgi_module);
 
@@ -354,8 +353,6 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
                     *qs = '\0';
                 }
             }
-        } else {
-            fpm = 1;
         }
 
         if (newfname) {
@@ -364,38 +361,9 @@ static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r,
         }
     }
 
-#if 0
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
-                  "r->filename: %s", (r->filename ? r->filename : "nil"));
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
-                  "r->uri: %s", (r->uri ? r->uri : "nil"));
-    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
-                  "r->path_info: %s", (r->path_info ? r->path_info : "nil"));
-#endif
-
     ap_add_common_vars(r);
     ap_add_cgi_vars(r);
 
-    if (fpm || apr_table_get(r->notes, "virtual_script")) {
-        /*
-         * Adjust SCRIPT_NAME, PATH_INFO and PATH_TRANSLATED for PHP-FPM
-         * TODO: Right now, PATH_INFO and PATH_TRANSLATED look OK...
-         */
-        const char *pend;
-        const char *script_name = apr_table_get(r->subprocess_env, "SCRIPT_NAME");
-        pend = script_name + strlen(script_name);
-        if (r->path_info && *r->path_info) {
-            pend = script_name + ap_find_path_info(script_name, r->path_info) - 1;
-        }
-        while (pend != script_name && *pend != '/') {
-            pend--;
-        }
-        apr_table_setn(r->subprocess_env, "SCRIPT_NAME", pend);
-        ap_log_rerror(APLOG_MARK, APLOG_TRACE4, 0, r,
-                      "fpm:virtual_script: Modified SCRIPT_NAME to: %s",
-                      pend);
-    }
-
     /* XXX are there any FastCGI specific env vars we need to send? */
 
     /* Give admins final option to fine-tune env vars */
@@ -1121,7 +1089,7 @@ static const char *cmd_servertype(cmd_parms *cmd, void *in_dconf,
     if (!strcasecmp(val, "GENERIC")) {
        dconf->backend_type = BACKEND_GENERIC;
     }
-    else if (!strcasecmp(val, "FPM")) { 
+    else if (!strcasecmp(val, "FPM")) {
        dconf->backend_type = BACKEND_FPM;
     }
     else {
index 4ad2b62d0e08184f9c81fa911f3706fe23b06228..279c3ac526957244983bcaa14ad5df3fd9b00a9f 100644 (file)
@@ -155,14 +155,18 @@ static const char *set_worker_hc_param(apr_pool_t *p,
         return "Unknown method";
     }
     else if (!strcasecmp(key, "hcinterval")) {
-        ival = atoi(val);
-        if (ival < HCHECK_WATHCHDOG_INTERVAL)
-            return apr_psprintf(p, "Interval must be a positive value greater than %d seconds",
-                                HCHECK_WATHCHDOG_INTERVAL);
+        apr_interval_time_t hci;
+        apr_status_t rv;
+        rv = ap_timeout_parameter_parse(val, &hci, "s");
+        if (rv != APR_SUCCESS)
+            return "Unparse-able hcinterval setting";
+        if (hci < AP_WD_TM_SLICE)
+            return apr_psprintf(p, "Interval must be a positive value greater than %"
+                                APR_TIME_T_FMT "ms", apr_time_as_msec(AP_WD_TM_SLICE));
         if (worker) {
-            worker->s->interval = apr_time_from_sec(ival);
+            worker->s->interval = hci;
         } else {
-            temp->interval = apr_time_from_sec(ival);
+            temp->interval = hci;
         }
     }
     else if (!strcasecmp(key, "hcpasses")) {
@@ -1022,7 +1026,7 @@ static int hc_post_config(apr_pool_t *p, apr_pool_t *plog,
             continue;
         }
         rv = hc_watchdog_register_callback(watchdog,
-                apr_time_from_sec(HCHECK_WATHCHDOG_INTERVAL),
+                apr_time_from_sec(AP_WD_TM_SLICE),
                 ctx,
                 hc_watchdog_callback);
         if (rv) {
index 42147b9477c55944090d45632ee2e78e751acf79..5819ad65b987dcb324c939e4daca28c4c8f4226b 100644 (file)
@@ -328,7 +328,11 @@ static int proxy_wstunnel_request(apr_pool_t *p, request_rec *r,
     }
 
     if (ap_cstr_casecmp(upgrade_method, "NONE") == 0) {
-       buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
+        buf = apr_pstrdup(p, "Upgrade: WebSocket" CRLF "Connection: Upgrade" CRLF CRLF);
+    } else if (ap_cstr_casecmp(upgrade_method, "ANY") == 0) {
+        const char *upgrade;
+        upgrade = apr_table_get(r->headers_in, "Upgrade");
+        buf = apr_pstrcat(p, "Upgrade: ", upgrade, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
     } else {
         buf = apr_pstrcat(p, "Upgrade: ", upgrade_method, CRLF "Connection: Upgrade" CRLF CRLF, NULL);
     }
@@ -473,7 +477,8 @@ static int proxy_wstunnel_handler(request_rec *r, proxy_worker *worker,
     if (ap_cstr_casecmp(upgrade_method, "NONE") != 0) {
         const char *upgrade;
         upgrade = apr_table_get(r->headers_in, "Upgrade");
-        if (!upgrade || ap_cstr_casecmp(upgrade, upgrade_method) != 0) {
+        if (!upgrade || (ap_cstr_casecmp(upgrade, upgrade_method) != 0 &&
+            ap_cstr_casecmp(upgrade_method, "ANY") !=0)) {
             ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02900)
                           "declining URL %s  (not %s, Upgrade: header is %s)", 
                           url, upgrade_method, upgrade ? upgrade : "missing");
index 770fd4e3b6abd8a55767209d2e6919d14bac2854..d75a1ccba886be01d91bc8e997d82fa70d09f683 100644 (file)
@@ -967,20 +967,21 @@ static apr_status_t ssl_filter_write(ap_filter_t *f,
  * establish an outgoing SSL connection. */
 #define MODSSL_ERROR_BAD_GATEWAY (APR_OS_START_USERERR + 1)
 
-static void ssl_io_filter_disable(SSLConnRec *sslconn, ap_filter_t *f)
+static void ssl_io_filter_disable(SSLConnRec *sslconn,
+                                  bio_filter_in_ctx_t *inctx)
 {
-    bio_filter_in_ctx_t *inctx = f->ctx;
     SSL_free(inctx->ssl);
     sslconn->ssl = NULL;
     inctx->ssl = NULL;
     inctx->filter_ctx->pssl = NULL;
 }
 
-static apr_status_t ssl_io_filter_error(ap_filter_t *f,
+static apr_status_t ssl_io_filter_error(bio_filter_in_ctx_t *inctx,
                                         apr_bucket_brigade *bb,
                                         apr_status_t status,
                                         int is_init)
 {
+    ap_filter_t *f = inctx->f;
     SSLConnRec *sslconn = myConnConfig(f->c);
     apr_bucket *bucket;
     int send_eos = 1;
@@ -993,7 +994,7 @@ static apr_status_t ssl_io_filter_error(ap_filter_t *f,
                          "trying to send HTML error page");
             ssl_log_ssl_error(SSLLOG_MARK, APLOG_INFO, sslconn->server);
 
-            ssl_io_filter_disable(sslconn, f);
+            ssl_io_filter_disable(sslconn, inctx);
             f->c->keepalive = AP_CONN_CLOSE;
             if (is_init) {
                 sslconn->non_ssl_request = NON_SSL_SEND_REQLINE;
@@ -1553,7 +1554,7 @@ static apr_status_t ssl_io_filter_input(ap_filter_t *f,
      * rather than have SSLEngine On configured.
      */
     if ((status = ssl_io_filter_handshake(inctx->filter_ctx)) != APR_SUCCESS) {
-        return ssl_io_filter_error(f, bb, status, is_init);
+        return ssl_io_filter_error(inctx, bb, status, is_init);
     }
 
     if (is_init) {
@@ -1607,7 +1608,7 @@ static apr_status_t ssl_io_filter_input(ap_filter_t *f,
 
     /* Handle custom errors. */
     if (status != APR_SUCCESS) {
-        return ssl_io_filter_error(f, bb, status, 0);
+        return ssl_io_filter_error(inctx, bb, status, 0);
     }
 
     /* Create a transient bucket out of the decrypted data. */
@@ -1796,7 +1797,7 @@ static apr_status_t ssl_io_filter_output(ap_filter_t *f,
     inctx->block = APR_BLOCK_READ;
 
     if ((status = ssl_io_filter_handshake(filter_ctx)) != APR_SUCCESS) {
-        return ssl_io_filter_error(f, bb, status, 0);
+        return ssl_io_filter_error(inctx, bb, status, 0);
     }
 
     while (!APR_BRIGADE_EMPTY(bb) && status == APR_SUCCESS) {
index c3e2cfa657cd61d81118de5dbf8a397e2c70c742..aecf5d324c3f15b8f56a6d2d5f34afc5b6ad40bf 100644 (file)
@@ -511,6 +511,7 @@ static BOOL stapling_renew_response(server_rec *s, modssl_ctx_t *mctx, SSL *ssl,
                      "stapling_renew_response: responder error");
         if (mctx->stapling_fake_trylater) {
             *prsp = OCSP_response_create(OCSP_RESPONSE_STATUS_TRYLATER, NULL);
+            *pok = FALSE;
         }
         else {
             goto done;
@@ -803,11 +804,11 @@ static int stapling_cb(SSL *ssl, void *arg)
                                          conn->pool);
             stapling_refresh_mutex_off(s);
 
-            if (rv == TRUE) {
+            if ((rv == TRUE) && (ok == TRUE) && rsp) {
                 ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(03040)
                              "stapling_cb: success renewing response");
             }
-            else {
+            else if (rv == FALSE) {
                 ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, APLOGNO(01955)
                              "stapling_cb: fatal error renewing response");
                 return SSL_TLSEXT_ERR_ALERT_FATAL;
index 4bdcb8fdedb4a1ad11aac6b566cee55b15db421c..cf2c28f5f03a866e380ac25fbd6768e4ab3a0aa9 100644 (file)
@@ -2779,6 +2779,7 @@ static const char *start_cond_section(cmd_parms *cmd, void *mconfig, const char
     const char *endp = ap_strrchr_c(arg, '>');
     int result, not = (arg[0] == '!');
     test_cond_section_fn testfn = (test_cond_section_fn)cmd->info;
+    const char *arg1;
 
     if (endp == NULL) {
         return unclosed_directive(cmd);
@@ -2790,11 +2791,13 @@ static const char *start_cond_section(cmd_parms *cmd, void *mconfig, const char
         arg++;
     }
 
-    if (!arg[0]) {
+    arg1 = ap_getword_conf(cmd->temp_pool, &arg);
+
+    if (!arg1[0]) {
         return missing_container_arg(cmd);
     }
 
-    result = testfn(cmd, arg);
+    result = testfn(cmd, arg1);
 
     if ((!not && result) || (not && !result)) {
         ap_directive_t *parent = NULL;
@@ -4457,19 +4460,19 @@ AP_INIT_RAW_ARGS("<LimitExcept", ap_limit_section, (void*)1,
                  OR_LIMIT | OR_AUTHCFG,
   "Container for authentication directives to be applied when any HTTP "
   "method other than those specified is used to access the resource"),
-AP_INIT_TAKE1("<IfModule", start_cond_section, (void *)test_ifmod_section,
+AP_INIT_RAW_ARGS("<IfModule", start_cond_section, (void *)test_ifmod_section,
               EXEC_ON_READ | OR_ALL,
   "Container for directives based on existence of specified modules"),
-AP_INIT_TAKE1("<IfDefine", start_cond_section, (void *)test_ifdefine_section,
+AP_INIT_RAW_ARGS("<IfDefine", start_cond_section, (void *)test_ifdefine_section,
               EXEC_ON_READ | OR_ALL,
   "Container for directives based on existence of command line defines"),
-AP_INIT_TAKE1("<IfFile", start_cond_section, (void *)test_iffile_section,
+AP_INIT_RAW_ARGS("<IfFile", start_cond_section, (void *)test_iffile_section,
               EXEC_ON_READ | OR_ALL,
   "Container for directives based on existence of files on disk"),
-AP_INIT_TAKE1("<IfDirective", start_cond_section, (void *)test_ifdirective_section,
+AP_INIT_RAW_ARGS("<IfDirective", start_cond_section, (void *)test_ifdirective_section,
               EXEC_ON_READ | OR_ALL,
   "Container for directives based on existence of named directive"),
-AP_INIT_TAKE1("<IfSection", start_cond_section, (void *)test_ifsection_section,
+AP_INIT_RAW_ARGS("<IfSection", start_cond_section, (void *)test_ifsection_section,
               EXEC_ON_READ | OR_ALL,
   "Container for directives based on existence of named section"),
 AP_INIT_RAW_ARGS("<DirectoryMatch", dirsection, (void*)1, RSRC_CONF,
index 559f41c0cc7521a16103e5f17ad92e7acdee8d3d..2faf12d406f84ba37a579e2fef35b3f38834699b 100644 (file)
@@ -62,19 +62,6 @@ typedef VOID (WINAPI *LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD,
 
 #endif /* __MINGW32__ */
 
-/*
- * The Windows MPM uses a queue of completion contexts that it passes
- * between the accept threads and the worker threads. Declare the
- * functions to access the queue and the structures passed on the
- * queue in the header file to enable modules to access them
- * if necessary. The queue resides in the MPM.
- */
-#ifdef CONTAINING_RECORD
-#undef CONTAINING_RECORD
-#endif
-#define CONTAINING_RECORD(address, type, field) ((type *)( \
-                                                  (char *)(address) - \
-                                                  (char *)(&((type *)0)->field)))
 #if APR_HAVE_IPV6
 #define PADDED_ADDR_SIZE (sizeof(SOCKADDR_IN6)+16)
 #else
@@ -83,8 +70,33 @@ typedef VOID (WINAPI *LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD,
 
 APLOG_USE_MODULE(mpm_winnt);
 
-/* Queue for managing the passing of winnt_conn_ctx_t between
- * the accept and worker threads.
+/*
+ * Pool for managing the passing of winnt_conn_ctx_t between the accept
+ * and worker threads (see ctxpool_head below). Note that the actual order
+ * of how the contexts are processed is a LIFO stack, not a FIFO queue,
+ * as LIFO order may significantly reduce the memory usage.
+ *
+ * Every completion context in the pool has an associated allocator, and
+ * every allocator has its ap_max_mem_free memory limit which is not given
+ * back to the OS. Once the pool grows, it cannot shrink back, and every
+ * allocator in each of the pooled completion contexts keeps up to its
+ * max_free amount of memory. The pool can only grow when a server has
+ * to serve multiple concurrent connections at once.
+ *
+ * Consider a server that doesn't see many concurrent connections most
+ * of the time, but has occasional spikes when it has to deal with
+ * concurrency. During such spikes, the size of the pool grows. The
+ * difference between LIFO and FIFO shows up after such spikes, when the
+ * server is back to light load.
+ *
+ * With FIFO order, every completion context in the pool will be used in
+ * a round-robin manner, thus using *every* available allocator one by one
+ * and claiming up to (N * ap_max_mem_free memory) from the OS.  With LIFO
+ * order, only the completion contexts that are close to the top of the
+ * stack will be used and reused for subsequent connections.  Hence, only
+ * a small part of the allocators will be used, and this can prevent all
+ * other allocators from unnecessarily acquiring memory from the OS (and
+ * keeping it).
  */
 typedef struct winnt_conn_ctx_t_s {
     struct winnt_conn_ctx_t_s *next;
@@ -106,31 +118,27 @@ typedef struct winnt_conn_ctx_t_s {
 
 typedef enum {
     IOCP_CONNECTION_ACCEPTED = 1,
-    IOCP_WAIT_FOR_RECEIVE = 2,
-    IOCP_WAIT_FOR_TRANSMITFILE = 3,
-    IOCP_SHUTDOWN = 4
+    IOCP_SHUTDOWN = 2
 } io_state_e;
 
 static apr_pool_t *pchild;
-static int shutdown_in_progress = 0;
+static HANDLE listener_shutdown_event;
 static int workers_may_exit = 0;
-static unsigned int g_blocked_threads = 0;
 static HANDLE max_requests_per_child_event;
 
 static apr_thread_mutex_t  *child_lock;
-static apr_thread_mutex_t  *qlock;
-static winnt_conn_ctx_t *qhead = NULL;
-static winnt_conn_ctx_t *qtail = NULL;
+static apr_thread_mutex_t  *ctxpool_lock;
+static winnt_conn_ctx_t *ctxpool_head = NULL;
 static apr_uint32_t num_completion_contexts = 0;
 static apr_uint32_t max_num_completion_contexts = 0;
 static HANDLE ThreadDispatchIOCP = NULL;
-static HANDLE qwait_event = NULL;
+static HANDLE ctxpool_wait_event = NULL;
 
 static void mpm_recycle_completion_context(winnt_conn_ctx_t *context)
 {
     /* Recycle the completion context.
      * - clear the ptrans pool
-     * - put the context on the queue to be consumed by the accept thread
+     * - put the context on the ctxpool to be consumed by the accept thread
      * Note:
      * context->accept_socket may be in a disconnected but reusable
      * state so -don't- close it.
@@ -147,44 +155,41 @@ static void mpm_recycle_completion_context(winnt_conn_ctx_t *context)
         context->overlapped.hEvent = saved_event;
         ResetEvent(context->overlapped.hEvent);
 
-        apr_thread_mutex_lock(qlock);
-        if (qtail) {
-            qtail->next = context;
-        } else {
-            qhead = context;
-            SetEvent(qwait_event);
+        apr_thread_mutex_lock(ctxpool_lock);
+        if (!ctxpool_head) {
+            SetEvent(ctxpool_wait_event);
         }
-        qtail = context;
-        apr_thread_mutex_unlock(qlock);
+        context->next = ctxpool_head;
+        ctxpool_head = context;
+        apr_thread_mutex_unlock(ctxpool_lock);
     }
 }
 
-static winnt_conn_ctx_t *mpm_get_completion_context(int *timeout)
+static apr_status_t mpm_get_completion_context(winnt_conn_ctx_t **context_p)
 {
-    apr_status_t rv;
+    apr_status_t status;
     winnt_conn_ctx_t *context = NULL;
 
-    *timeout = 0;
+    *context_p = NULL;
     while (1) {
-        /* Grab a context off the queue */
-        apr_thread_mutex_lock(qlock);
-        if (qhead) {
-            context = qhead;
-            qhead = qhead->next;
-            if (!qhead)
-                qtail = NULL;
+        /* Do we have an available context in the pool? */
+        apr_thread_mutex_lock(ctxpool_lock);
+        if (ctxpool_head) {
+            context = ctxpool_head;
+            ctxpool_head = ctxpool_head->next;
         } else {
-            ResetEvent(qwait_event);
+            ResetEvent(ctxpool_wait_event);
         }
-        apr_thread_mutex_unlock(qlock);
+        apr_thread_mutex_unlock(ctxpool_lock);
 
         if (!context) {
-            /* We failed to grab a context off the queue, consider allocating
-             * a new one out of the child pool. There may be up to
-             * (ap_threads_per_child + num_listeners) contexts in the system
-             * at once.
+            /* We failed to grab a context from the pool, consider allocating
+             * a new one. There may be up to (ap_threads_per_child + num_listeners)
+             * contexts in the system at once.
              */
             if (num_completion_contexts >= max_num_completion_contexts) {
+                DWORD rv;
+                HANDLE events[2];
                 /* All workers are busy, need to wait for one */
                 static int reported = 0;
                 if (!reported) {
@@ -197,28 +202,34 @@ static winnt_conn_ctx_t *mpm_get_completion_context(int *timeout)
 
                 /* Wait for a worker to free a context. Once per second, give
                  * the caller a chance to check for shutdown. If the wait
-                 * succeeds, get the context off the queue. It must be
+                 * succeeds, get the context off the context pool. It must be
                  * available, since there's only one consumer.
                  */
-                rv = WaitForSingleObject(qwait_event, 1000);
-                if (rv == WAIT_OBJECT_0)
+                events[0] = ctxpool_wait_event;
+                events[1] = listener_shutdown_event;
+                rv = WaitForMultipleObjects(2, events, FALSE, 1000);
+                if (rv == WAIT_OBJECT_0) {
+                    continue;
+                }
+                else if (rv == WAIT_OBJECT_0 + 1) {
+                    /* Got the exit event */
+                    return APR_SUCCESS;
+                }
+                else if (rv == WAIT_TIMEOUT) {
+                    /* Workers are busy, write a diagnostic message and retry */
+                    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(00327)
+                                 "mpm_get_completion_context: Failed to get a "
+                                 "free context within 1 second");
                     continue;
+                }
                 else {
-                    if (rv == WAIT_TIMEOUT) {
-                        /* somewhat-normal condition where threads are busy */
-                        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(00327)
-                                     "mpm_get_completion_context: Failed to get a "
-                                     "free context within 1 second");
-                        *timeout = 1;
-                    }
-                    else {
-                        /* should be the unexpected, generic WAIT_FAILED */
-                        ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_os_error(),
-                                     ap_server_conf, APLOGNO(00328)
-                                     "mpm_get_completion_context: "
-                                     "WaitForSingleObject failed to get free context");
-                    }
-                    return NULL;
+                    /* should be the unexpected, generic WAIT_FAILED */
+                    status = APR_FROM_OS_ERROR(rv);
+                    ap_log_error(APLOG_MARK, APLOG_WARNING, status,
+                                 ap_server_conf, APLOGNO(00328)
+                                 "mpm_get_completion_context: "
+                                 "WaitForSingleObject failed to get free context");
+                    return status;
                 }
             } else {
                 /* Allocate another context.
@@ -237,28 +248,29 @@ static winnt_conn_ctx_t *mpm_get_completion_context(int *timeout)
                                                          FALSE, NULL);
                 if (context->overlapped.hEvent == NULL) {
                     /* Hopefully this is a temporary condition ... */
-                    ap_log_error(APLOG_MARK, APLOG_WARNING, apr_get_os_error(),
+                    status = apr_get_os_error();
+                    ap_log_error(APLOG_MARK, APLOG_WARNING, status,
                                  ap_server_conf, APLOGNO(00329)
                                  "mpm_get_completion_context: "
                                  "CreateEvent failed.");
 
                     apr_thread_mutex_unlock(child_lock);
-                    return NULL;
+                    return status;
                 }
 
                 /* Create the transaction pool */
                 apr_allocator_create(&allocator);
                 apr_allocator_max_free_set(allocator, ap_max_mem_free);
-                rv = apr_pool_create_ex(&context->ptrans, pchild, NULL,
-                                        allocator);
-                if (rv != APR_SUCCESS) {
-                    ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf, APLOGNO(00330)
+                status = apr_pool_create_ex(&context->ptrans, pchild, NULL,
+                                            allocator);
+                if (status != APR_SUCCESS) {
+                    ap_log_error(APLOG_MARK, APLOG_WARNING, status, ap_server_conf, APLOGNO(00330)
                                  "mpm_get_completion_context: Failed "
                                  "to create the transaction pool.");
                     CloseHandle(context->overlapped.hEvent);
 
                     apr_thread_mutex_unlock(child_lock);
-                    return NULL;
+                    return status;
                 }
                 apr_allocator_owner_set(allocator, context->ptrans);
                 apr_pool_tag(context->ptrans, "transaction");
@@ -271,14 +283,66 @@ static winnt_conn_ctx_t *mpm_get_completion_context(int *timeout)
                 break;
             }
         } else {
-            /* Got a context from the queue */
+            /* Got a context from the context pool */
             break;
         }
     }
 
-    return context;
+    *context_p = context;
+    return APR_SUCCESS;
+}
+
+typedef enum {
+    ACCEPT_FILTER_NONE = 0,
+    ACCEPT_FILTER_CONNECT = 1
+} accept_filter_e;
+
+static const char * accept_filter_to_string(accept_filter_e accf)
+{
+    switch (accf) {
+    case ACCEPT_FILTER_NONE:
+        return "none";
+    case ACCEPT_FILTER_CONNECT:
+        return "connect";
+    default:
+        return "";
+    }
 }
 
+static accept_filter_e get_accept_filter(const char *protocol)
+{
+    core_server_config *core_sconf;
+    const char *name;
+
+    core_sconf = ap_get_core_module_config(ap_server_conf->module_config);
+    name = apr_table_get(core_sconf->accf_map, protocol);
+    if (!name) {
+        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf,
+                     APLOGNO(02531) "winnt_accept: Listen protocol '%s' has "
+                     "no known accept filter. Using 'none' instead",
+                     protocol);
+        return ACCEPT_FILTER_NONE;
+    }
+    else if (strcmp(name, "data") == 0) {
+        ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
+                     APLOGNO(03458) "winnt_accept: 'data' accept filter is no "
+                     "longer supported. Using 'connect' instead");
+        return ACCEPT_FILTER_CONNECT;
+    }
+    else if (strcmp(name, "connect") == 0) {
+        return ACCEPT_FILTER_CONNECT;
+    }
+    else if (strcmp(name, "none") == 0) {
+        return ACCEPT_FILTER_NONE;
+    }
+    else {
+        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf, APLOGNO(00331)
+                     "winnt_accept: unrecognized AcceptFilter '%s', "
+                     "only 'data', 'connect' or 'none' are valid. "
+                     "Using 'none' instead", name);
+        return ACCEPT_FILTER_NONE;
+    }
+}
 
 /* Windows NT/2000 specific code...
  * Accept processing for on Windows NT uses a producer/consumer queue
@@ -307,10 +371,8 @@ static unsigned int __stdcall winnt_accept(void *lr_)
     LPFN_GETACCEPTEXSOCKADDRS lpfnGetAcceptExSockaddrs = NULL;
     GUID GuidAcceptEx = WSAID_ACCEPTEX;
     GUID GuidGetAcceptExSockaddrs = WSAID_GETACCEPTEXSOCKADDRS;
-    core_server_config *core_sconf;
-    const char *accf_name;
-    int rv;
-    int accf;
+    apr_status_t rv;
+    accept_filter_e accf;
     int err_count = 0;
     HANDLE events[3];
 #if APR_HAVE_IPV6
@@ -319,37 +381,6 @@ static unsigned int __stdcall winnt_accept(void *lr_)
 #endif
     u_long zero = 0;
 
-    core_sconf = ap_get_core_module_config(ap_server_conf->module_config);
-    accf_name = apr_table_get(core_sconf->accf_map, lr->protocol);
-
-    if (!accf_name) {
-        accf = 0;
-        accf_name = "none";
-        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf,
-                     APLOGNO(02531) "winnt_accept: Listen protocol '%s' has "
-                     "no known accept filter. Using 'none' instead",
-                     lr->protocol);
-    }
-    else if (strcmp(accf_name, "data") == 0) {
-        accf = 1;
-        accf_name = "connect";
-        ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
-                     APLOGNO(03458) "winnt_accept: 'data' accept filter is no "
-                     "longer supported. Using 'connect' instead");
-    }
-    else if (strcmp(accf_name, "connect") == 0)
-        accf = 1;
-    else if (strcmp(accf_name, "none") == 0)
-        accf = 0;
-    else {
-        accf = 0;
-        accf_name = "none";
-        ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf, APLOGNO(00331)
-                     "winnt_accept: unrecognized AcceptFilter '%s', "
-                     "only 'data', 'connect' or 'none' are valid. "
-                     "Using 'none' instead", accf_name);
-    }
-
     apr_os_sock_get(&nlsd, lr->sd);
 
 #if APR_HAVE_IPV6
@@ -362,7 +393,8 @@ static unsigned int __stdcall winnt_accept(void *lr_)
    }
 #endif
 
-    if (accf > 0) /* 'connect' */
+    accf = get_accept_filter(lr->protocol);
+    if (accf == ACCEPT_FILTER_CONNECT)
     {
         if (WSAIoctl(nlsd, SIO_GET_EXTENSION_FUNCTION_POINTER,
                      &GuidAcceptEx, sizeof GuidAcceptEx, 
@@ -383,15 +415,15 @@ static unsigned int __stdcall winnt_accept(void *lr_)
             return 1;
         }
         /* first, high priority event is an already accepted connection */
-        events[1] = exit_event;
+        events[1] = listener_shutdown_event;
         events[2] = max_requests_per_child_event;
     }
-    else /* accf == 0, 'none' */
+    else /* accf == ACCEPT_FILTER_NONE */
     {
 reinit: /* target of connect upon too many AcceptEx failures */
 
         /* last, low priority event is a not yet accepted connection */
-        events[0] = exit_event;
+        events[0] = listener_shutdown_event;
         events[1] = max_requests_per_child_event;
         events[2] = CreateEvent(NULL, FALSE, FALSE, NULL);
 
@@ -410,30 +442,23 @@ reinit: /* target of connect upon too many AcceptEx failures */
 
     ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(00334)
                  "Child: Accept thread listening on %pI using AcceptFilter %s",
-                 lr->bind_addr, accf_name);
+                 lr->bind_addr, accept_filter_to_string(accf));
 
-    while (!shutdown_in_progress) {
+    while (1) {
         if (!context) {
-            int timeout;
-
-            context = mpm_get_completion_context(&timeout);
-            if (!context) {
-                if (!timeout) {
-                    /* Hopefully a temporary condition in the provider? */
-                    ++err_count;
-                    if (err_count > MAX_ACCEPTEX_ERR_COUNT) {
-                        ap_log_error(APLOG_MARK, APLOG_CRIT, 0, ap_server_conf, APLOGNO(00335)
-                                     "winnt_accept: Too many failures grabbing a "
-                                     "connection ctx.  Aborting.");
-                        break;
-                    }
-                }
-                Sleep(100);
-                continue;
+            rv = mpm_get_completion_context(&context);
+            if (rv) {
+                /* We have an irrecoverable error, tell the child to die */
+                SetEvent(exit_event);
+                break;
+            }
+            else if (rv == APR_SUCCESS && !context) {
+                /* Normal exit */
+                break;
             }
         }
 
-        if (accf > 0) /* 'connect' */
+        if (accf == ACCEPT_FILTER_CONNECT)
         {
             char *buf;
 
@@ -506,7 +531,7 @@ reinit: /* target of connect upon too many AcceptEx failures */
                                      "winnt_mpm: falling back to "
                                      "'AcceptFilter none'.");
                         err_count = 0;
-                        accf = 0;
+                        accf = ACCEPT_FILTER_NONE;
                     }
                     continue;
                 }
@@ -523,7 +548,7 @@ reinit: /* target of connect upon too many AcceptEx failures */
                                      "winnt_mpm: falling back to "
                                      "'AcceptFilter none'.");
                         err_count = 0;
-                        accf = 0;
+                        accf = ACCEPT_FILTER_NONE;
                         goto reinit;
                     }
                     continue;
@@ -549,7 +574,7 @@ reinit: /* target of connect upon too many AcceptEx failures */
                     }
                 }
                 else {
-                    /* exit_event triggered or event handle was closed */
+                    /* listener_shutdown_event triggered or event handle was closed */
                     closesocket(context->accept_socket);
                     context->accept_socket = INVALID_SOCKET;
                     break;
@@ -582,7 +607,7 @@ reinit: /* target of connect upon too many AcceptEx failures */
                                      &context->sa_server, &context->sa_server_len,
                                      &context->sa_client, &context->sa_client_len);
         }
-        else /* (accf = 0)  e.g. 'none' */
+        else /* accf == ACCEPT_FILTER_NONE */
         {
             /* There is no socket reuse without AcceptEx() */
             if (context->accept_socket != INVALID_SOCKET)
@@ -602,7 +627,7 @@ reinit: /* target of connect upon too many AcceptEx failures */
 
             if (rv != WAIT_OBJECT_0 + 2) {
                 /* not FD_ACCEPT;
-                 * exit_event triggered or event handle was closed
+                 * listener_shutdown_event triggered or event handle was closed
                  */
                 break;
             }
@@ -642,10 +667,15 @@ reinit: /* target of connect upon too many AcceptEx failures */
                         ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf, APLOGNO(00345)
                                      "Child: Encountered too many accept() "
                                      "resource faults, aborting.");
+                        /* We have an irrecoverable error, tell the child to die */
+                        SetEvent(exit_event);
                         break;
                     }
                     continue;
                 }
+
+                /* We have an irrecoverable error, tell the child to die */
+                SetEvent(exit_event);
                 break;
             }
             /* Per MSDN, cancel the inherited association of this socket
@@ -697,14 +727,9 @@ reinit: /* target of connect upon too many AcceptEx failures */
                                    &context->overlapped);
         context = NULL;
     }
-    if (!accf)
+    if (accf == ACCEPT_FILTER_NONE)
         CloseHandle(events[2]);
 
-    if (!shutdown_in_progress) {
-        /* Yow, hit an irrecoverable error! Tell the child to die. */
-        SetEvent(exit_event);
-    }
-
     ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ap_server_conf, APLOGNO(00348)
                  "Child: Accept thread exiting.");
     return 0;
@@ -724,10 +749,8 @@ static winnt_conn_ctx_t *winnt_get_connection(winnt_conn_ctx_t *context)
 
     mpm_recycle_completion_context(context);
 
-    apr_atomic_inc32(&g_blocked_threads);
     while (1) {
         if (workers_may_exit) {
-            apr_atomic_dec32(&g_blocked_threads);
             return NULL;
         }
         rc = GetQueuedCompletionStatus(ThreadDispatchIOCP, &BytesRead,
@@ -735,7 +758,7 @@ static winnt_conn_ctx_t *winnt_get_connection(winnt_conn_ctx_t *context)
         if (!rc) {
             rc = apr_get_os_error();
             ap_log_error(APLOG_MARK, APLOG_DEBUG, rc, ap_server_conf, APLOGNO(00349)
-                         "Child: GetQueuedComplationStatus returned %d",
+                         "Child: GetQueuedCompletionStatus returned %d",
                          rc);
             continue;
         }
@@ -745,15 +768,12 @@ static winnt_conn_ctx_t *winnt_get_connection(winnt_conn_ctx_t *context)
             context = CONTAINING_RECORD(pol, winnt_conn_ctx_t, overlapped);
             break;
         case IOCP_SHUTDOWN:
-            apr_atomic_dec32(&g_blocked_threads);
             return NULL;
         default:
-            apr_atomic_dec32(&g_blocked_threads);
             return NULL;
         }
         break;
     }
-    apr_atomic_dec32(&g_blocked_threads);
 
     return context;
 }
@@ -827,18 +847,6 @@ static DWORD __stdcall worker_main(void *thread_num_val)
 }
 
 
-static void cleanup_thread(HANDLE *handles, int *thread_cnt,
-                           int thread_to_clean)
-{
-    int i;
-
-    CloseHandle(handles[thread_to_clean]);
-    for (i = thread_to_clean; i < ((*thread_cnt) - 1); i++)
-        handles[i] = handles[i + 1];
-    (*thread_cnt)--;
-}
-
-
 /*
  * child_main()
  * Entry point for the main control thread for the child process.
@@ -890,7 +898,6 @@ void child_main(apr_pool_t *pconf, DWORD parent_pid)
     HANDLE *child_handles;
     int listener_started = 0;
     int threads_created = 0;
-    int watch_thread;
     int time_remains;
     int cld;
     DWORD tid;
@@ -904,6 +911,13 @@ void child_main(apr_pool_t *pconf, DWORD parent_pid)
     ap_run_child_init(pchild, ap_server_conf);
     ht = apr_hash_make(pchild);
 
+    listener_shutdown_event = CreateEvent(NULL, TRUE, FALSE, NULL);
+    if (!listener_shutdown_event) {
+        ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(), ap_server_conf, APLOGNO(10035)
+                     "Child: Failed to create a listener_shutdown event.");
+        exit(APEXIT_CHILDINIT);
+    }
+
     /* Initialize the child_events */
     max_requests_per_child_event = CreateEvent(NULL, TRUE, FALSE, NULL);
     if (!max_requests_per_child_event) {
@@ -950,15 +964,14 @@ void child_main(apr_pool_t *pconf, DWORD parent_pid)
     /*
      * Create the worker thread dispatch IOCompletionPort
      */
-    /* Create the worker thread dispatch IOCP */
     ThreadDispatchIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
                                                 NULL, 0, 0);
-    apr_thread_mutex_create(&qlock, APR_THREAD_MUTEX_DEFAULT, pchild);
-    qwait_event = CreateEvent(NULL, TRUE, FALSE, NULL);
-    if (!qwait_event) {
+    apr_thread_mutex_create(&ctxpool_lock, APR_THREAD_MUTEX_DEFAULT, pchild);
+    ctxpool_wait_event = CreateEvent(NULL, TRUE, FALSE, NULL);
+    if (!ctxpool_wait_event) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, apr_get_os_error(),
                      ap_server_conf, APLOGNO(00353)
-                     "Child: Failed to create a qwait event.");
+                     "Child: Failed to create a ctxpool_wait event.");
         exit(APEXIT_CHILDINIT);
     }
 
@@ -1136,10 +1149,10 @@ void child_main(apr_pool_t *pconf, DWORD parent_pid)
     }
 
     /* Shutdown listener threads and pending AcceptEx sockets
-     * but allow the worker threads to continue consuming from
-     * the queue of accepted connections.
+     * but allow the worker threads to continue consuming the
+     * already accepted connections.
      */
-    shutdown_in_progress = 1;
+    SetEvent(listener_shutdown_event);
 
     Sleep(1000);
 
@@ -1159,115 +1172,90 @@ void child_main(apr_pool_t *pconf, DWORD parent_pid)
                      "Child: Failure releasing the start mutex");
     }
 
-    /* Shutdown the worker threads
-     * Post worker threads blocked on the ThreadDispatch IOCompletion port
+    /* Shutdown the worker threads by posting a number of IOCP_SHUTDOWN
+     * completion packets equal to the amount of created threads
      */
-    while (g_blocked_threads > 0) {
-        ap_log_error(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS, ap_server_conf, APLOGNO(00361)
-                     "Child: %d threads blocked on the completion port",
-                     g_blocked_threads);
-        for (i=g_blocked_threads; i > 0; i--) {
-            PostQueuedCompletionStatus(ThreadDispatchIOCP, 0,
-                                       IOCP_SHUTDOWN, NULL);
-        }
-        Sleep(1000);
+    for (i = 0; i < threads_created; i++) {
+        PostQueuedCompletionStatus(ThreadDispatchIOCP, 0, IOCP_SHUTDOWN, NULL);
     }
-    /* Empty the accept queue of completion contexts */
-    apr_thread_mutex_lock(qlock);
-    while (qhead) {
-        CloseHandle(qhead->overlapped.hEvent);
-        closesocket(qhead->accept_socket);
-        qhead = qhead->next;
+
+    /* Empty the pool of completion contexts */
+    apr_thread_mutex_lock(ctxpool_lock);
+    while (ctxpool_head) {
+        CloseHandle(ctxpool_head->overlapped.hEvent);
+        closesocket(ctxpool_head->accept_socket);
+        ctxpool_head = ctxpool_head->next;
     }
-    apr_thread_mutex_unlock(qlock);
+    apr_thread_mutex_unlock(ctxpool_lock);
 
     /* Give busy threads a chance to service their connections
      * (no more than the global server timeout period which
      * we track in msec remaining).
      */
-    watch_thread = 0;
     time_remains = (int)(ap_server_conf->timeout / APR_TIME_C(1000));
 
     while (threads_created)
     {
-        int nFailsafe = MAXIMUM_WAIT_OBJECTS;
+        HANDLE handle = child_handles[threads_created - 1];
         DWORD dwRet;
 
-        /* Every time we roll over to wait on the first group
-         * of MAXIMUM_WAIT_OBJECTS threads, take a breather,
-         * and infrequently update the error log.
-         */
-        if (watch_thread >= threads_created) {
-            if ((time_remains -= 100) < 0)
-                break;
-
-            /* Every 30 seconds give an update */
-            if ((time_remains % 30000) == 0) {
-                ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS,
-                             ap_server_conf, APLOGNO(00362)
-                             "Child: Waiting %d more seconds "
-                             "for %d worker threads to finish.",
-                             time_remains / 1000, threads_created);
-            }
-            /* We'll poll from the top, 10 times per second */
-            Sleep(100);
-            watch_thread = 0;
-        }
-
-        /* Fairness, on each iteration we will pick up with the thread
-         * after the one we just removed, even if it's a single thread.
-         * We don't block here.
-         */
-        dwRet = WaitForMultipleObjects(min(threads_created - watch_thread,
-                                           MAXIMUM_WAIT_OBJECTS),
-                                       child_handles + watch_thread, 0, 0);
-
-        if (dwRet == WAIT_FAILED) {
+        if (time_remains < 0)
             break;
+        /* Every 30 seconds give an update */
+        if ((time_remains % 30000) == 0) {
+            ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS,
+                         ap_server_conf, APLOGNO(00362)
+                         "Child: Waiting %d more seconds "
+                         "for %d worker threads to finish.",
+                         time_remains / 1000, threads_created);
         }
+
+        dwRet = WaitForSingleObject(handle, 100);
+        time_remains -= 100;
         if (dwRet == WAIT_TIMEOUT) {
-            /* none ready */
-            watch_thread += MAXIMUM_WAIT_OBJECTS;
-            continue;
+            /* Keep waiting */
         }
-        else if (dwRet >= WAIT_ABANDONED_0) {
-            /* We just got the ownership of the object, which
-             * should happen at most MAXIMUM_WAIT_OBJECTS times.
-             * It does NOT mean that the object is signaled.
-             */
-            if ((nFailsafe--) < 1)
-                break;
+        else if (dwRet == WAIT_OBJECT_0) {
+            CloseHandle(handle);
+            threads_created--;
         }
         else {
-            watch_thread += (dwRet - WAIT_OBJECT_0);
-            if (watch_thread >= threads_created)
-                break;
-            cleanup_thread(child_handles, &threads_created, watch_thread);
+            break;
         }
     }
 
-    /* Kill remaining threads off the hard way */
     if (threads_created) {
         ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf, APLOGNO(00363)
-                     "Child: Terminating %d threads that failed to exit.",
+                     "Child: Waiting for %d threads timed out, terminating process.",
                      threads_created);
-    }
-    for (i = 0; i < threads_created; i++) {
-        int *idx;
-        TerminateThread(child_handles[i], 1);
-        CloseHandle(child_handles[i]);
-        /* Reset the scoreboard entry for the thread we just whacked */
-        idx = apr_hash_get(ht, &child_handles[i], sizeof(HANDLE));
-        if (idx) {
-            ap_update_child_status_from_indexes(0, *idx, SERVER_DEAD, NULL);
+        for (i = 0; i < threads_created; i++) {
+            /* Reset the scoreboard entries for the threads. */
+            int *idx = apr_hash_get(ht, &child_handles[i], sizeof(HANDLE));
+            if (idx) {
+                ap_update_child_status_from_indexes(0, *idx, SERVER_DEAD, NULL);
+            }
         }
+        /* We can't wait for any longer, but still have some threads remaining.
+         *
+         * The only thing we can do is terminate the process and let the OS
+         * perform the required cleanup. Terminate with exit code 0, as we do
+         * not want the parent process to restart the child. Note that we use
+         * TerminateProcess() instead of ExitProcess(), as the latter function
+         * causes all DLLs to be unloaded, and it can potentially deadlock if
+         * a DLL unload handler tries to acquire the same lock that is being
+         * held by one of the remaining worker threads.
+         *
+         * See https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658
+         */
+        TerminateProcess(GetCurrentProcess(), 0);
     }
     ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS, ap_server_conf, APLOGNO(00364)
                  "Child: All worker threads have exited.");
 
     apr_thread_mutex_destroy(child_lock);
-    apr_thread_mutex_destroy(qlock);
-    CloseHandle(qwait_event);
+    apr_thread_mutex_destroy(ctxpool_lock);
+    CloseHandle(ctxpool_wait_event);
+    CloseHandle(ThreadDispatchIOCP);
 
     apr_pool_destroy(pchild);
     CloseHandle(exit_event);
index 121aca1fa865760eadecfab297172cdc6ed871c8..e0d797b9e31895d4c458e2a818db123685a810a8 100644 (file)
@@ -231,7 +231,8 @@ static int ReportStatusToSCMgr(int currentState, int waitHint,
             ctx->ssStatus.dwWaitHint = 0;
             ctx->ssStatus.dwCheckPoint = 0;
             ctx->ssStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP
-                                             | SERVICE_ACCEPT_SHUTDOWN;
+                                             | SERVICE_ACCEPT_SHUTDOWN
+                                             | SERVICE_ACCEPT_PRESHUTDOWN;
         }
         else if (currentState == SERVICE_STOPPED) {
             ctx->ssStatus.dwWaitHint = 0;
@@ -345,7 +346,8 @@ static DWORD WINAPI service_nt_ctrl(DWORD dwCtrlCode, DWORD dwEventType,
 
     /* SHUTDOWN is offered before STOP, accept the first opportunity */
     if ((dwCtrlCode == SERVICE_CONTROL_STOP)
-         || (dwCtrlCode == SERVICE_CONTROL_SHUTDOWN))
+         || (dwCtrlCode == SERVICE_CONTROL_SHUTDOWN)
+         || (dwCtrlCode == SERVICE_CONTROL_PRESHUTDOWN))
     {
         ap_signal_parent(SIGNAL_PARENT_SHUTDOWN);
         ReportStatusToSCMgr(SERVICE_STOP_PENDING, 30000, ctx);
index 88e855bbd8403a7515e5c3467f3ba6bc29e4eb65..6894e23d8b521fd0c2da270600182f6ee55654c7 100644 (file)
@@ -1086,8 +1086,12 @@ AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb
                     return;
                 }
 
-                /* last character of field-name */
-                tmp_field = value - (value > last_field ? 1 : 0);
+                if (value == last_field) {
+                    r->status = HTTP_BAD_REQUEST;
+                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(03453)
+                                  "Request header field name was empty");
+                    return;
+                }
 
                 *value++ = '\0'; /* NUL-terminate at colon */
 
@@ -1110,13 +1114,6 @@ AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb
                                   " bad whitespace");
                     return;
                 }
-
-                if (tmp_field == last_field) {
-                    r->status = HTTP_BAD_REQUEST;
-                    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(03453)
-                                  "Request header field name was empty");
-                    return;
-                }
             }
             else /* Using strict RFC7230 parsing */
             {
@@ -1627,6 +1624,7 @@ AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw)
 
     t = ap_pbase64decode(r->pool, auth_line);
     r->user = ap_getword_nulls (r->pool, &t, ':');
+    apr_table_setn(r->notes, AP_GET_BASIC_AUTH_PW_NOTE, "1");
     r->ap_auth_type = "Basic";
 
     *pw = t;
@@ -1634,6 +1632,53 @@ AP_DECLARE(int) ap_get_basic_auth_pw(request_rec *r, const char **pw)
     return OK;
 }
 
+AP_DECLARE(apr_status_t) ap_get_basic_auth_components(const request_rec *r,
+                                                      const char **username,
+                                                      const char **password)
+{
+    const char *auth_header;
+    const char *credentials;
+    const char *decoded;
+    const char *user;
+
+    auth_header = (PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authorization"
+                                                  : "Authorization";
+    credentials = apr_table_get(r->headers_in, auth_header);
+
+    if (!credentials) {
+        /* No auth header. */
+        return APR_EINVAL;
+    }
+
+    if (ap_cstr_casecmp(ap_getword(r->pool, &credentials, ' '), "Basic")) {
+        /* These aren't Basic credentials. */
+        return APR_EINVAL;
+    }
+
+    while (*credentials == ' ' || *credentials == '\t') {
+        credentials++;
+    }
+
+    /* XXX Our base64 decoding functions don't actually error out if the string
+     * we give it isn't base64; they'll just silently stop and hand us whatever
+     * they've parsed up to that point.
+     *
+     * Since this function is supposed to be a drop-in replacement for the
+     * deprecated ap_get_basic_auth_pw(), don't fix this for 2.4.x.
+     */
+    decoded = ap_pbase64decode(r->pool, credentials);
+    user = ap_getword_nulls(r->pool, &decoded, ':');
+
+    if (username) {
+        *username = user;
+    }
+    if (password) {
+        *password = decoded;
+    }
+
+    return APR_SUCCESS;
+}
+
 struct content_length_ctx {
     int data_sent;  /* true if the C-L filter has already sent at
                      * least one bucket on to the next output filter
index 016504d1cdcb026ffecfcf5ad296dfcbdf36bbda..55c32b276b092d7a956fd2547f1b58ed1ab14e9b 100644 (file)
@@ -124,6 +124,8 @@ static int decl_die(int status, const char *phase, request_rec *r)
 AP_DECLARE(int) ap_some_authn_required(request_rec *r)
 {
     int access_status;
+    char *olduser = r->user;
+    int rv = FALSE;
 
     switch (ap_satisfies(r)) {
     case SATISFY_ALL:
@@ -134,7 +136,7 @@ AP_DECLARE(int) ap_some_authn_required(request_rec *r)
 
         access_status = ap_run_access_checker_ex(r);
         if (access_status == DECLINED) {
-            return TRUE;
+            rv = TRUE;
         }
 
         break;
@@ -145,13 +147,14 @@ AP_DECLARE(int) ap_some_authn_required(request_rec *r)
 
         access_status = ap_run_access_checker_ex(r);
         if (access_status == DECLINED) {
-            return TRUE;
+            rv = TRUE;
         }
 
         break;
     }
 
-    return FALSE;
+    r->user = olduser;
+    return rv;
 }
 
 /* This is the master logic for processing requests.  Do NOT duplicate
@@ -263,6 +266,14 @@ AP_DECLARE(int) ap_process_request_internal(request_rec *r)
         r->ap_auth_type = r->main->ap_auth_type;
     }
     else {
+        /* A module using a confusing API (ap_get_basic_auth_pw) caused
+        ** r->user to be filled out prior to check_authn hook. We treat
+        ** it is inadvertent.
+        */
+        if (r->user && apr_table_get(r->notes, AP_GET_BASIC_AUTH_PW_NOTE)) { 
+            r->user = NULL;
+        }
+
         switch (ap_satisfies(r)) {
         case SATISFY_ALL:
         case SATISFY_NOSPEC:
index 24062ca111d4718b78140666c64c0cd2c3d01bb6..d302764e341325d4f583cec1da6f5cbcf85a06ef 100644 (file)
@@ -1680,10 +1680,8 @@ AP_DECLARE(int) ap_find_token(apr_pool_t *p, const char *line, const char *tok)
 
     s = (const unsigned char *)line;
     for (;;) {
-        /* find start of token, skip all stop characters, note NUL
-         * isn't a token stop, so we don't need to test for it
-         */
-        while (TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
+        /* find start of token, skip all stop characters */
+        while (*s && TEST_CHAR(*s, T_HTTP_TOKEN_STOP)) {
             ++s;
         }
         if (!*s) {
@@ -2388,6 +2386,76 @@ AP_DECLARE(char *) ap_pbase64decode(apr_pool_t *p, const char *bufcoded)
     return decoded;
 }
 
+/* a stringent version of ap_pbase64decode() */
+AP_DECLARE(apr_status_t) ap_pbase64decode_strict(apr_pool_t *p,
+                                                 const char *encoded,
+                                                 char **decoded,
+                                                 apr_size_t *len)
+{
+    apr_size_t end_index;
+    int last_group_len;
+    const char *end;
+
+    /* Sanity check.
+     * TODO: this would be a lot more efficient if we had access to the lookup
+     * table used by APR. If that gets pulled in at any point, make use of it.
+     */
+    end_index = strspn(encoded, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                                "abcdefghijklmnopqrstuvwxyz"
+                                "0123456789+/");
+
+    last_group_len = end_index % 4;
+    end = encoded + end_index;
+
+    /* The only non-alphabet character allowed is the padding character '=' at
+     * the end of the string. There are two allowable padding cases for the last
+     * group of four: "xY==" or "xyZ=". We require the final (non-padding)
+     * character to have been zero-padded during encoding, which limits the
+     * character choices.
+     */
+    if (last_group_len == 1) {
+        /* This isn't ever valid. */
+        return APR_EINVAL;
+    }
+    else if (last_group_len == 2) {
+        /* ...xY== */
+        if (*end != '=' || end[1] != '=') {
+            return APR_EINVAL;
+        }
+        else if (!ap_strchr("AQgw", end[-1])) {
+            /* Correctly zero-padded input data will result in a final character
+             * that is one of the four above. */
+            return APR_EINVAL;
+        }
+
+        end += 2;
+    }
+    else if (last_group_len == 3) {
+        /* ...xyZ= */
+        if (*end != '=') {
+            return APR_EINVAL;
+        }
+        else if (!ap_strchr("AEIMQUYcgkosw048", end[-1])) {
+            /* Correctly zero-padded input data will result in a final character
+             * that is one of the sixteen above. */
+            return APR_EINVAL;
+        }
+
+        end++;
+    }
+
+    /* At this point, if the encoded buffer is correct, we should be at the end
+     * of the string. */
+    if (*end) {
+        return APR_EINVAL;
+    }
+
+    *decoded = apr_palloc(p, apr_base64_decode_len(encoded));
+    *len = apr_base64_decode(*decoded, encoded);
+
+    return APR_SUCCESS;
+}
+
 AP_DECLARE(char *) ap_pbase64encode(apr_pool_t *p, char *string)
 {
     char *encoded;
@@ -2491,7 +2559,7 @@ AP_DECLARE(char *) ap_append_pid(apr_pool_t *p, const char *string,
 /**
  * Parse a given timeout parameter string into an apr_interval_time_t value.
  * The unit of the time interval is given as postfix string to the numeric
- * string. Currently the following units are understood:
+ * string. Currently the following units are understood (case insensitive):
  *
  * ms    : milliseconds
  * s     : seconds
@@ -2529,20 +2597,25 @@ AP_DECLARE(apr_status_t) ap_timeout_parameter_parse(
     switch (*time_str) {
         /* Time is in seconds */
     case 's':
+    case 'S':
         *timeout = (apr_interval_time_t) apr_time_from_sec(tout);
         break;
     case 'h':
+    case 'H':
         /* Time is in hours */
         *timeout = (apr_interval_time_t) apr_time_from_sec(tout * 3600);
         break;
     case 'm':
+    case 'M':
         switch (*(++time_str)) {
         /* Time is in milliseconds */
         case 's':
+        case 'S':
             *timeout = (apr_interval_time_t) tout * 1000;
             break;
         /* Time is in minutes */
         case 'i':
+        case 'I':
             *timeout = (apr_interval_time_t) apr_time_from_sec(tout * 60);
             break;
         default:
@@ -2685,9 +2758,7 @@ AP_DECLARE(int) ap_parse_form_data(request_rec *r, ap_filter_t *f,
     ap_form_type_t state = FORM_NAME, percent = FORM_NORMAL;
     ap_form_pair_t *pair = NULL;
     apr_array_header_t *pairs = apr_array_make(r->pool, 4, sizeof(ap_form_pair_t));
-
-    char hi = 0;
-    char low = 0;
+    char escaped_char[2] = { 0 };
 
     *ptr = pairs;
 
@@ -2754,30 +2825,13 @@ AP_DECLARE(int) ap_parse_form_data(request_rec *r, ap_filter_t *f,
                     continue;
                 }
                 if (FORM_PERCENTA == percent) {
-                    if (c >= 'a') {
-                        hi = c - 'a' + 10;
-                    }
-                    else if (c >= 'A') {
-                        hi = c - 'A' + 10;
-                    }
-                    else if (c >= '0') {
-                        hi = c - '0';
-                    }
-                    hi = hi << 4;
+                    escaped_char[0] = c;
                     percent = FORM_PERCENTB;
                     continue;
                 }
                 if (FORM_PERCENTB == percent) {
-                    if (c >= 'a') {
-                        low = c - 'a' + 10;
-                    }
-                    else if (c >= 'A') {
-                        low = c - 'A' + 10;
-                    }
-                    else if (c >= '0') {
-                        low = c - '0';
-                    }
-                    c = low | hi;
+                    escaped_char[1] = c;
+                    c = x2c(escaped_char);
                     percent = FORM_NORMAL;
                 }
                 switch (state) {
index 09df8656d8bf04993bdb2725c7664fe924fb69d6..58769a9c89f47b2dad9137cdd844e91f127f8809 100644 (file)
@@ -2465,14 +2465,14 @@ int main(int argc, const char * const argv[])
             case 'B':
                 myhost = apr_pstrdup(cntxt, opt_arg);
                 break;
-#ifdef USE_SSL
-            case 'Z':
-                ssl_cipher = strdup(opt_arg);
-                break;
             case 'm':
                 method = CUSTOM_METHOD;
                 method_str[CUSTOM_METHOD] = strdup(opt_arg);
                 break;
+#ifdef USE_SSL
+            case 'Z':
+                ssl_cipher = strdup(opt_arg);
+                break;
             case 'f':
 #if OPENSSL_VERSION_NUMBER < 0x10100000L
                 if (strncasecmp(opt_arg, "ALL", 3) == 0) {
index 972fa82d209061992a7359b9538dbbf48fabb3ea..018c0ea20023563dd17f8a04f36a28491535890a 100644 (file)
@@ -282,7 +282,7 @@ int main(int argc, const char * const argv[])
 
     /* The temporary file has all the data, just copy it to the new location.
      */
-    if (apr_file_copy(dirname, argv[1], APR_FILE_SOURCE_PERMS, cntxt) !=
+    if (apr_file_copy(dirname, argv[1], APR_OS_DEFAULT, cntxt) !=
                 APR_SUCCESS) {
         apr_file_printf(errfile, "%s: unable to update file %s\n",
                         argv[0], argv[1]);
index e627f8b9bff10af7a615eba7a61d389efd1feb1d..65a0b9c3bba90028e631c1cd27f8307cfabf448f 100644 (file)
@@ -503,7 +503,7 @@ int main(int argc, const char * const argv[])
 
     /* The temporary file has all the data, just copy it to the new location.
      */
-    if (apr_file_copy(dirname, pwfilename, APR_FILE_SOURCE_PERMS, pool) !=
+    if (apr_file_copy(dirname, pwfilename, APR_OS_DEFAULT, pool) !=
         APR_SUCCESS) {
         apr_file_printf(errfile, "%s: unable to update file %s" NL,
                         argv[0], pwfilename);
diff --git a/test/unit/authn.c b/test/unit/authn.c
new file mode 100644 (file)
index 0000000..67ef04a
--- /dev/null
@@ -0,0 +1,156 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "check.h"
+#include "../httpdunit.h"
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_protocol.h"
+
+/*
+ * Test Fixture -- runs once per test
+ */
+
+static apr_pool_t  *g_pool;
+static request_rec *g_request;
+
+static void authn_setup(void)
+{
+    if (apr_pool_create(&g_pool, NULL) != APR_SUCCESS) {
+        exit(1);
+    }
+
+    /* Stub out just enough of a request_req to get the tests working.
+     * Unfortunately this couples us to implementation details in the code being
+     * tested, but the logic to get a "real" request_rec requires spinning up
+     * half of the world. */
+    g_request = apr_pcalloc(g_pool, sizeof(*g_request));
+    if (!g_request) {
+        exit(1);
+    }
+
+    g_request->pool = g_pool;
+    g_request->headers_in = apr_table_make(g_pool, 1);
+
+    if (!g_request->headers_in) {
+        exit(1);
+    }
+}
+
+static void authn_teardown(void)
+{
+    apr_pool_destroy(g_pool);
+}
+
+/*
+ * ap_get_basic_auth_components()
+ */
+
+static const char * const basic_auth_cases[][3] = {
+    /*
+     * case[0] - Authorization header value
+     * case[1] - expected username
+     * case[2] - expected password
+     */
+    { "Basic Ym9iOm15cGFzcw==",    "bob", "mypass" },
+    { "Basic    Ym9iOm15cGFzcw==", "bob", "mypass" },
+    { "Basic Ym9iOg==",            "bob", "" },
+    { "Basic Om15cGFzcw==",        "",    "mypass" },
+    { "Basic Og==",                "",    "" },
+
+    /*
+     * Dubious compatibility cases
+     */
+
+    /* HT is disallowed per 7235, but ap_get_basic_auth_pw() allowed it */
+    { "Basic \tYm9iOm15cGFzcw==",  "bob", "mypass" },
+    /* username without colon separator, technically disallowed per 2617 */
+    { "Basic Ym9i",                "bob", "" },
+    /* no data at all, technically disallowed per 2617/7235 */
+    { "Basic ",                    "",    "" },
+    { "Basic",                     "",    "" },
+    /* completely invalid junk, disallowed per 2617/7235 */
+    { "Basic ?*J#kd92%$@",         "",    "" },
+};
+static const size_t basic_auth_cases_len = sizeof(basic_auth_cases) /
+                                           sizeof(basic_auth_cases[0]);
+
+HTTPD_START_LOOP_TEST(test_get_basic_auth_components_correctly_decodes_credentials, basic_auth_cases_len)
+{
+    const char *header_val    = basic_auth_cases[_i][0];
+    const char *expected_user = basic_auth_cases[_i][1];
+    const char *expected_pass = basic_auth_cases[_i][2];
+
+    apr_status_t status;
+    const char *username;
+    const char *password;
+
+    apr_table_setn(g_request->headers_in, "Authorization", header_val);
+
+    status = ap_get_basic_auth_components(g_request, &username, &password);
+
+    ck_assert_int_eq(status, APR_SUCCESS);
+    ck_assert_str_eq(username, expected_user);
+    ck_assert_str_eq(password, expected_pass);
+}
+END_TEST
+
+START_TEST(test_get_basic_auth_components_fails_without_Authorization_header)
+{
+    apr_status_t status;
+
+    status = ap_get_basic_auth_components(g_request, NULL, NULL);
+    ck_assert_int_eq(status, APR_EINVAL);
+}
+END_TEST
+
+START_TEST(test_get_basic_auth_components_fails_with_non_Basic_credentials)
+{
+    apr_status_t status;
+
+    apr_table_setn(g_request->headers_in, "Authorization",
+                   "Digest Ym9iOm15cGFzcw==");
+
+    status = ap_get_basic_auth_components(g_request, NULL, NULL);
+    ck_assert_int_eq(status, APR_EINVAL);
+}
+END_TEST
+
+START_TEST(test_get_basic_auth_components_uses_Proxy_Authorization_for_proxied_requests)
+{
+    apr_status_t status;
+    const char *username;
+    const char *password;
+
+    g_request->proxyreq = PROXYREQ_PROXY;
+    apr_table_setn(g_request->headers_in, "Proxy-Authorization",
+                   "Basic Ym9iOm15cGFzcw==");
+
+    status = ap_get_basic_auth_components(g_request, &username, &password);
+
+    ck_assert_int_eq(status, APR_SUCCESS);
+    ck_assert_str_eq(username, "bob");
+    ck_assert_str_eq(password, "mypass");
+}
+END_TEST
+
+/*
+ * Test Case Boilerplate
+ */
+HTTPD_BEGIN_TEST_CASE_WITH_FIXTURE(authn, authn_setup, authn_teardown)
+#include "test/unit/authn.tests"
+HTTPD_END_TEST_CASE
diff --git a/test/unit/base64.c b/test/unit/base64.c
new file mode 100644 (file)
index 0000000..3e5b4f5
--- /dev/null
@@ -0,0 +1,175 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "../httpdunit.h"
+
+#include "httpd.h"
+
+/*
+ * Test Fixture -- runs once per test
+ */
+
+static apr_pool_t *g_pool;
+
+static void base64_setup(void)
+{
+    if (apr_pool_create(&g_pool, NULL) != APR_SUCCESS) {
+        exit(1);
+    }
+}
+
+static void base64_teardown(void)
+{
+    apr_pool_destroy(g_pool);
+}
+
+/*
+ * Tests
+ */
+
+/*
+ * case[0]: encoded value
+ * case[1]: expected decoded value
+ */
+static const char * const base64_cases[][2] = {
+    /* Test case 1 derived from RFC 3548 sec. 7. */
+    { "FPucA9l+", "\x14\xfb\x9c\x03\xd9\x7e" },
+    { "aGVsbG8=", "hello" },
+    { "dGVzdA==", "test" },
+    { "",          "" },
+};
+static const size_t base64_cases_len = sizeof(base64_cases) /
+                                       sizeof(base64_cases[0]);
+
+HTTPD_START_LOOP_TEST(strict_decoding_works, base64_cases_len)
+{
+    const char *encoded  = base64_cases[_i][0];
+    const char *expected = base64_cases[_i][1];
+    char *decoded;
+    apr_size_t len;
+    apr_status_t status;
+
+    status = ap_pbase64decode_strict(g_pool, encoded, &decoded, &len);
+
+    ck_assert_int_eq(status, APR_SUCCESS);
+    ck_assert_uint_eq(len, strlen(expected));
+    ck_assert(!memcmp(decoded, expected, len));
+}
+END_TEST
+
+START_TEST(strict_decoding_works_with_embedded_nulls)
+{
+    static unsigned char expected[] = { 'n', '\0', 'u', '\0', 'l', '\0', 'l' };
+    char *decoded;
+    apr_size_t len;
+    apr_status_t status;
+
+    status = ap_pbase64decode_strict(g_pool, "bgB1AGwAbA==", &decoded, &len);
+
+    ck_assert_int_eq(status, APR_SUCCESS);
+    ck_assert_uint_eq(len, sizeof(expected));
+    ck_assert(!memcmp(decoded, expected, len));
+}
+END_TEST
+
+START_TEST(strict_decoding_produces_null_terminated_buffer)
+{
+    char *decoded;
+    apr_size_t len;
+
+    ap_pbase64decode_strict(g_pool, "aaaabbbbccccdddd", &decoded, &len);
+
+    ck_assert(decoded[len] == '\0');
+}
+END_TEST
+
+START_TEST(strict_decoding_allows_all_base64_characters)
+{
+    char *decoded;
+    apr_size_t len;
+    apr_status_t status;
+
+    status = ap_pbase64decode_strict(g_pool,
+                                     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                                     "abcdefghijklmnopqrstuvwxyz"
+                                     "0123456789+/",
+                                     &decoded, &len);;
+
+    ck_assert_int_eq(status, APR_SUCCESS);
+}
+END_TEST
+
+static const char * const invalid_chars[] = {
+    "bad?",
+    "not-good",
+    "also_bad",
+    "a\x01sd",
+};
+static const size_t invalid_chars_len = sizeof(invalid_chars) /
+                                        sizeof(invalid_chars[0]);
+
+HTTPD_START_LOOP_TEST(strict_decoding_rejects_non_base64_characters, invalid_chars_len)
+{
+    char *decoded = NULL;
+    apr_size_t len = (apr_size_t) -1;
+    apr_status_t status;
+
+    status = ap_pbase64decode_strict(g_pool, invalid_chars[_i], &decoded, &len);
+
+    ck_assert_int_eq(status, APR_EINVAL);
+    ck_assert(decoded == NULL);
+    ck_assert_uint_eq(len, (apr_size_t) -1);
+}
+END_TEST
+
+static const char * const invalid_padding[] = {
+    "AAAA=",    /* no padding needed here */
+    "AA=",      /* not enough padding */
+    "AA===",    /* too much padding */
+    "A===",     /* only one or two padding characters allowed */
+    "A==",
+    "==",
+    "AAA=AAA=", /* mid-string padding prohibited */
+    "AAA",      /* missing padding entirely */
+    "AA",       /* missing padding entirely */
+    "A",        /* just completely wrong */
+    "AAb=",     /* one-padded strings must end in one of AEIMQUYcgkosw048 */
+    "Ab==",     /* two-padded strings must end in one of AQgw */
+};
+static const size_t invalid_padding_len = sizeof(invalid_padding) /
+                                          sizeof(invalid_padding[0]);
+
+HTTPD_START_LOOP_TEST(strict_decoding_rejects_incorrect_padding, invalid_padding_len)
+{
+    char *decoded = NULL;
+    apr_size_t len = (apr_size_t) -1;
+    apr_status_t status;
+
+    status = ap_pbase64decode_strict(g_pool, invalid_padding[_i], &decoded,
+                                     &len);
+
+    ck_assert_int_eq(status, APR_EINVAL);
+    ck_assert(decoded == NULL);
+    ck_assert_uint_eq(len, (apr_size_t) -1);
+}
+END_TEST
+
+/*
+ * Test Case Boilerplate
+ */
+HTTPD_BEGIN_TEST_CASE_WITH_FIXTURE(base64, base64_setup, base64_teardown)
+#include "test/unit/base64.tests"
+HTTPD_END_TEST_CASE