| <?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: 1933068:1934878 (outdated) --> |
| |
| <!-- |
| 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. |
| --> |
| |
| <manualpage metafile="remapping.xml.meta"> |
| <parentdocument href="./">Rewrite</parentdocument> |
| |
| <title>Redirección y Remapeo con mod_rewrite</title> |
| |
| <summary> |
| |
| <p>Este documento complementa la <module>mod_rewrite</module> |
| <a href="../mod/mod_rewrite.html">documentación de referencia</a>. Describe |
| cómo puede usar <module>mod_rewrite</module> para redirigir y remapear |
| solicitudes. Esto incluye muchos ejemplos de usos comunes de <module>mod_rewrite</module>, |
| incluyendo descripciones detalladas de cómo funciona cada uno.</p> |
| |
| <note type="warning">Tenga en cuenta que muchos de estos ejemplos no funcionarán sin cambios en su |
| configuración particular del servidor, por lo que es importante que los |
| entienda, en lugar de simplemente copiar y pegar los ejemplos en su |
| configuración.</note> |
| |
| </summary> |
| <seealso><a href="../mod/mod_rewrite.html">Documentación del módulo</a></seealso> |
| <seealso><a href="intro.html">Introducción a mod_rewrite</a></seealso> |
| <!--<seealso><a href="remapping.html">Redirección y remapeo</a></seealso>--> |
| <seealso><a href="access.html">Control de acceso</a></seealso> |
| <seealso><a href="vhosts.html">Hosts virtuales</a></seealso> |
| <seealso><a href="proxy.html">Proxy</a></seealso> |
| <seealso><a href="rewritemap.html">Uso de RewriteMap</a></seealso> |
| <seealso><a href="advanced.html">Técnicas avanzadas</a></seealso> |
| <seealso><a href="avoid.html">Cuándo no usar mod_rewrite</a></seealso> |
| |
| <section id="old-to-new"> |
| |
| <title>De Antiguo a Nuevo (interno)</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Supongamos que hemos renombrado recientemente la página |
| <code>foo.html</code> a <code>bar.html</code> y ahora queremos |
| proporcionar la antigua URL por compatibilidad hacia atrás. Sin embargo, |
| queremos que los usuarios de la antigua URL ni siquiera se den cuenta de que |
| la página fue renombrada - es decir, no queremos que la dirección |
| cambie en su navegador.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Reescribimos la antigua URL a la nueva internamente mediante la |
| siguiente regla:</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>/bar</strong>.html" [PT] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="old-to-new-extern"> |
| |
| <title>Reescritura de Antiguo a Nuevo (externo)</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Supongamos de nuevo que hemos renombrado recientemente la página |
| <code>foo.html</code> a <code>bar.html</code> y ahora queremos |
| proporcionar la antigua URL por compatibilidad hacia atrás. Pero esta |
| vez queremos que los usuarios de la antigua URL reciban una indicación de |
| la nueva, es decir, que el campo de Ubicación de su navegador también |
| cambie.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Forzamos una redirección HTTP a la nueva URL que lleva a un |
| cambio del navegador y por lo tanto de la vista del usuario:</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^<strong>/foo</strong>\.html$" "<strong>bar</strong>.html" [<strong>R</strong>] |
| </highlight> |
| </dd> |
| |
| <dt>Discusión</dt> |
| |
| <dd> |
| <p>En este ejemplo, a diferencia del ejemplo <a |
| href="#old-to-new-intern">interno</a> anterior, podemos simplemente |
| usar la directiva Redirect. <module>mod_rewrite</module> se usó en ese ejemplo |
| anterior para ocultar la redirección del cliente:</p> |
| |
| <highlight language="config"> |
| Redirect "/foo.html" "/bar.html" |
| </highlight> |
| |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="movehomedirs"> |
| |
| <title>Recurso Movido a Otro Servidor</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Si un recurso se ha movido a otro servidor, puede desear que |
| las URLs continúen funcionando por un tiempo en el antiguo servidor mientras |
| la gente actualiza sus marcadores.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Puede usar <module>mod_rewrite</module> para redirigir estas URLs |
| al nuevo servidor, pero también podría considerar usar la directiva Redirect |
| o RedirectMatch.</p> |
| |
| <highlight language="config"> |
| #With mod_rewrite |
| RewriteEngine on |
| RewriteRule "^/docs/(.+)" "http://new.example.com/docs/$1" [R,L] |
| </highlight> |
| |
| <highlight language="config"> |
| #With RedirectMatch |
| RedirectMatch "^/docs/(.*)" "http://new.example.com/docs/$1" |
| </highlight> |
| |
| <highlight language="config"> |
| #With Redirect |
| Redirect "/docs/" "http://new.example.com/docs/" |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="static-to-dynamic"> |
| |
| <title>De Estático a Dinámico</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>¿Cómo podemos transformar una página estática |
| <code>foo.html</code> en una variante dinámica |
| <code>foo.cgi</code> de manera transparente, es decir, sin que |
| el navegador/usuario lo note.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Simplemente reescribimos la URL al script CGI y forzamos el |
| manejador a ser <strong>cgi-script</strong> para que se |
| ejecute como un programa CGI. |
| De esta manera, una solicitud a <code>/~quux/foo.html</code> |
| internamente lleva a la invocación de |
| <code>/~quux/foo.cgi</code>.</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteBase "/~quux/" |
| RewriteRule "^foo\.html$" "foo.cgi" [H=<strong>cgi-script</strong>] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="backward-compatibility"> |
| |
| <title>Compatibilidad hacia atrás para cambio de extensión de archivo</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>¿Cómo podemos hacer URLs retrocompatibles (aún |
| existentes virtualmente) después de migrar <code>document.YYYY</code> |
| a <code>document.XXXX</code>, por ejemplo, después de traducir un |
| grupo de archivos <code>.html</code> a <code>.php</code>?</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>La URL se reescribe de la antigua extensión a la nueva |
| solo si el archivo destino con la nueva extensión existe |
| y el archivo original con la antigua extensión no existe. |
| De lo contrario, la URL se deja sin cambios.</p> |
| |
| <highlight language="config"> |
| # backward compatibility ruleset for |
| # rewriting document.html to document.php |
| # when and only when document.php exists |
| <Directory "/var/www/htdocs"> |
| RewriteEngine on |
| RewriteBase "/var/www/htdocs" |
| |
| RewriteCond "$1.php" -f |
| RewriteCond "$1.html" !-f |
| RewriteRule "^(.*).html$" "$1.php" |
| </Directory> |
| </highlight> |
| </dd> |
| |
| <dt>Discusión</dt> |
| <dd> |
| <p>Este ejemplo usa una característica a menudo pasada por alto de <module>mod_rewrite</module>, |
| aprovechando el orden de ejecución del conjunto de reglas. En |
| particular, <module>mod_rewrite</module> evalúa el lado izquierdo de la |
| RewriteRule antes de evaluar las directivas RewriteCond. |
| En consecuencia, $1 ya está definido para el momento en que las directivas |
| RewriteCond se evalúan. Esto nos permite probar la existencia |
| del archivo original (<code>document.html</code>) y destino |
| (<code>document.php</code>) usando el mismo nombre de archivo base.</p> |
| |
| <p>Este conjunto de reglas está diseñado para usarse en un contexto per-directorio (en un |
| bloque <Directory> o en un archivo .htaccess), de modo que las |
| verificaciones <code>-f</code> busquen en la ruta de directorio correcta. |
| Puede necesitar establecer una directiva <directive |
| module="mod_rewrite">RewriteBase</directive> para especificar la |
| base de directorio en la que está trabajando.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="canonicalhost"> |
| |
| <title>Nombres de Host Canónicos</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd>El objetivo de esta regla es forzar el uso de un nombre de |
| host particular, en preferencia a otros nombres de host que pueden usarse para |
| alcanzar el mismo sitio. Por ejemplo, si desea forzar el uso |
| de <strong>www.example.com</strong> en lugar de |
| <strong>example.com</strong>, podría usar una variante de la |
| siguiente receta.</dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| |
| <p>La mejor manera de resolver esto no involucra <module>mod_rewrite</module> en absoluto, |
| sino que usa la directiva <directive module="mod_alias">Redirect</directive> |
| colocada en un host virtual para el o los nombres de host no canónicos.</p> |
| |
| <highlight language="config"> |
| <VirtualHost *:80> |
| ServerName undesired.example.com |
| ServerAlias example.com notthis.example.com |
| |
| Redirect "/" "http://www.example.com/" |
| </VirtualHost> |
| |
| <VirtualHost *:80> |
| ServerName www.example.com |
| </VirtualHost> |
| </highlight> |
| |
| <p>Alternativamente puede lograr esto usando la |
| directiva <directive module="core" type="section">If</directive>: |
| (<strong>2.4 y posterior</strong>)</p> |
| |
| <highlight language="config"> |
| <If "%{HTTP_HOST} != 'www.example.com'"> |
| Redirect "/" "http://www.example.com/" |
| </If> |
| </highlight> |
| |
| <p>O, por ejemplo, para redirigir una porción de su sitio a HTTPS, podría |
| hacer lo siguiente:</p> |
| |
| <highlight language="config"> |
| <If "%{SERVER_PROTOCOL} != 'HTTPS'"> |
| Redirect "/admin/" "https://www.example.com/admin/" |
| </If> |
| </highlight> |
| |
| <p>Si, por cualquier razón, aún desea usar <module>mod_rewrite</module> |
| - si, por ejemplo, necesita que esto funcione con un conjunto más grande de RewriteRules - |
| podría usar una de las recetas siguientes.</p> |
| |
| <p>Para sitios ejecutándose en un puerto distinto al 80:</p> |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteCond "%{SERVER_PORT}" "!^80$" |
| RewriteRule "^/?(.*)" "http://www.example.com:%{SERVER_PORT}/$1" [L,R,NE] |
| </highlight> |
| |
| <p>Y para un sitio ejecutándose en el puerto 80</p> |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\.example\.com" [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteRule "^/?(.*)" "http://www.example.com/$1" [L,R,NE] |
| </highlight> |
| |
| <p> |
| Si quisiera hacer esto genéricamente para todos los nombres de dominio - es |
| decir, si quiere redirigir <strong>example.com</strong> a |
| <strong>www.example.com</strong> para todos los valores posibles de |
| <strong>example.com</strong>, podría usar la siguiente |
| receta:</p> |
| |
| <highlight language="config"> |
| RewriteCond "%{HTTP_HOST}" "!^www\." [NC] |
| RewriteCond "%{HTTP_HOST}" "!^$" |
| RewriteRule "^/?(.*)" "http://www.%{HTTP_HOST}/$1" [L,R,NE] |
| </highlight> |
| |
| <p>Estos conjuntos de reglas funcionarán tanto en su archivo de configuración principal |
| del servidor, como en un archivo <code>.htaccess</code> colocado en el <directive |
| module="core">DocumentRoot</directive> del servidor.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="multipledirs"> |
| |
| <title>Búsqueda de páginas en más de un directorio</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Un recurso particular podría existir en uno de varios lugares, y |
| queremos buscar en esos lugares el recurso cuando se |
| solicita. Quizás hemos reorganizado recientemente nuestra estructura de |
| directorios, dividiendo el contenido en varias ubicaciones.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>El siguiente conjunto de reglas busca en dos directorios para encontrar el |
| recurso, y, si no lo encuentra en ninguno de los dos, intentará |
| simplemente servirlo desde la ubicación solicitada.</p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| |
| # first try to find it in dir1/... |
| # ...and if found stop and be happy: |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir1</strong>/%{REQUEST_URI}" -f |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir1</strong>/$1" [L] |
| |
| # second try to find it in dir2/... |
| # ...and if found stop and be happy: |
| RewriteCond "%{DOCUMENT_ROOT}/<strong>dir2</strong>/%{REQUEST_URI}" -f |
| RewriteRule "^(.+)" "%{DOCUMENT_ROOT}/<strong>dir2</strong>/$1" [L] |
| |
| # else go on for other Alias or ScriptAlias directives, |
| # etc. |
| RewriteRule "^" "-" [PT] |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="archive-access-multiplexer"> |
| |
| <title>Redirección a Servidores Distribuidos Geográficamente</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Tenemos numerosos espejos de nuestro sitio web, y queremos redirigir |
| a la gente al que está ubicado en el país donde se |
| encuentran.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Mirando el nombre de host del cliente solicitante, determinamos |
| de qué país provienen. Si no podemos hacer una búsqueda de su |
| dirección IP, recurrimos a un servidor predeterminado.</p> |
| <p>Usaremos una directiva <directive module="mod_rewrite">RewriteMap</directive> |
| para construir una lista de servidores que deseamos usar.</p> |
| |
| <highlight language="config"> |
| HostnameLookups on |
| RewriteEngine on |
| RewriteMap multiplex "txt:/path/to/map.mirrors" |
| RewriteCond "%{REMOTE_HOST}" "([a-z]+)$" [NC] |
| RewriteRule "^/(.*)$" "${multiplex:<strong>%1</strong>|http://www.example.com/}$1" [R,L] |
| </highlight> |
| |
| <example> |
| ## map.mirrors -- Mapa de Multiplexación<br /> |
| <br /> |
| de http://www.example.de/<br /> |
| uk http://www.example.uk/<br /> |
| com http://www.example.com/<br /> |
| ##EOF## |
| </example> |
| </dd> |
| |
| <dt>Discusión</dt> |
| <dd> |
| <note type="warning">Este conjunto de reglas depende de que |
| <directive module="core">HostNameLookups</directive> |
| esté configurado como <code>on</code>, lo que puede ser |
| un impacto significativo en el rendimiento.</note> |
| |
| <p>La directiva <directive module="mod_rewrite">RewriteCond</directive> |
| captura la última parte del nombre de host del |
| cliente solicitante - el código de país - y la siguiente RewriteRule |
| usa ese valor para buscar el host espejo apropiado en el archivo |
| de mapa.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="canonicalurl"> |
| |
| <title>URLs Canónicas</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>En algunos servidores web hay más de una URL para un |
| recurso. Generalmente hay URLs canónicas (que son las que realmente |
| se usan y distribuyen) y aquellas que son solo |
| atajos, internas, etc. Independientemente de qué URL |
| proporcionó el usuario con la solicitud, finalmente debería ver la |
| canónica en la barra de direcciones de su navegador.</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Hacemos una redirección HTTP externa para todas las |
| URLs no canónicas para corregirlas en la vista de ubicación del navegador y |
| para todas las solicitudes posteriores. En el conjunto de reglas de ejemplo |
| reemplazamos <code>/puppies</code> y <code>/canines</code> |
| por el canónico <code>/dogs</code>.</p> |
| |
| <highlight language="config"> |
| RewriteRule "^/(puppies|canines)/(.*)" "/dogs/$2" [R] |
| </highlight> |
| </dd> |
| |
| <dt>Discusión:</dt> |
| <dd> |
| Esto realmente debería lograrse con directivas Redirect o RedirectMatch: |
| |
| <highlight language="config"> |
| RedirectMatch "^/(puppies|canines)/(.*)" "/dogs/$2" |
| </highlight> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="moveddocroot"> |
| |
| <title><code>DocumentRoot</code> Movido</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| |
| <dd> |
| <p>Generalmente el <directive module="core">DocumentRoot</directive> |
| del servidor web se relaciona directamente con la URL "<code>/</code>". |
| Pero a menudo estos datos no son realmente de máxima prioridad. Por ejemplo, |
| puede desear que los visitantes, al entrar por primera vez a un sitio, vayan a un |
| subdirectorio particular <code>/about/</code>. Esto puede lograrse |
| usando el siguiente conjunto de reglas:</p> |
| </dd> |
| |
| <dt>Solución:</dt> |
| |
| <dd> |
| <p>Redirigimos la URL <code>/</code> a |
| <code>/about/</code>: |
| </p> |
| |
| <highlight language="config"> |
| RewriteEngine on |
| RewriteRule "^/$" "/about/" [<strong>R</strong>] |
| </highlight> |
| |
| <p>Tenga en cuenta que esto también puede manejarse usando la directiva <directive |
| module="mod_alias">RedirectMatch</directive>:</p> |
| |
| <highlight language="config"> |
| RedirectMatch "^/$" "http://example.com/about/" |
| </highlight> |
| |
| <p>Tenga en cuenta también que el ejemplo solo reescribe la URL raíz. Es decir, reescribe |
| una solicitud para <code>http://example.com/</code>, pero no una |
| solicitud para <code>http://example.com/page.html</code>. Si de hecho ha |
| cambiado la raíz de documentos - es decir, si <strong>todo</strong> su |
| contenido está en ese subdirectorio, es muy preferible |
| simplemente cambiar su directiva <directive module="core">DocumentRoot</directive>, |
| o mover todo el contenido un directorio arriba, |
| en lugar de reescribir URLs.</p> |
| </dd> |
| </dl> |
| |
| </section> |
| |
| <section id="fallback-resource"> |
| <title>Recurso de Respaldo</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| <dd>Desea que un solo recurso (digamos, un cierto archivo, como index.php) maneje |
| todas las solicitudes que lleguen a un directorio particular, excepto aquellas |
| que deberían ir a un recurso existente como una imagen, o un archivo css.</dd> |
| |
| <dt>Solución:</dt> |
| <dd> |
| <p>A partir de la versión 2.2.16, debería usar la directiva <directive |
| module="mod_dir">FallbackResource</directive> para esto:</p> |
| |
| <highlight language="config"> |
| <Directory "/var/www/my_blog"> |
| FallbackResource index.php |
| </Directory> |
| </highlight> |
| |
| <p>Sin embargo, en versiones anteriores de Apache, o si sus necesidades son más |
| complicadas que esto, puede usar una variación del siguiente conjunto de |
| reescritura para lograr lo mismo:</p> |
| |
| <highlight language="config"> |
| <Directory "/var/www/my_blog"> |
| RewriteBase "/my_blog" |
| |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-f |
| RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d |
| RewriteRule "^" "index.php" [PT] |
| </Directory> |
| </highlight> |
| |
| <p>Si, por otro lado, desea pasar la URI solicitada como un argumento de |
| cadena de consulta a index.php, puede reemplazar esa RewriteRule con:</p> |
| |
| <highlight language="config"> |
| RewriteRule "(.*)" "index.php?$1" [PT,QSA] |
| </highlight> |
| |
| <p>Tenga en cuenta que estos conjuntos de reglas pueden usarse en un archivo <code>.htaccess</code>, |
| así como en un bloque <Directory>.</p> |
| |
| </dd> |
| |
| </dl> |
| |
| </section> |
| |
| <section id="rewrite-query"> |
| <title>Reescribir cadena de consulta</title> |
| |
| <dl> |
| <dt>Descripción:</dt> |
| <dd>Desea capturar un valor particular de una cadena de consulta |
| y reemplazarlo o incorporarlo en otro componente |
| de la URL.</dd> |
| |
| <dt>Soluciones:</dt> |
| <dd> |
| <p>Muchas de las soluciones en esta sección usarán la misma condición, |
| que deja el valor coincidente en la referencia inversa %2. %1 es el inicio |
| de la cadena de consulta (hasta la clave de interés), y %3 es el resto. Esta |
| condición es un poco compleja por flexibilidad y para evitar doble '&&' en las |
| sustituciones.</p> |
| <ul> |
| <li>Esta solución elimina la clave y valor coincidentes: |
| |
| <highlight language="config"> |
| # Remove mykey=??? |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteRule "(.*)" "$1?%1%3" |
| </highlight> |
| </li> |
| |
| <li>Esta solución usa el valor capturado en la sustitución de URL, |
| descartando el resto de la consulta original añadiendo un '?': |
| |
| <highlight language="config"> |
| # Copy from query string to PATH_INFO |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteRule "(.*)" "$1/products/%2/?" [PT] |
| </highlight> |
| </li> |
| |
| <li>Esta solución verifica el valor capturado en una condición posterior: |
| |
| <highlight language="config"> |
| # Capture the value of mykey in the query string |
| RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))mykey=([^&]*)&?(.*)&?$" |
| RewriteCond "%2" !=not-so-secret-value |
| RewriteRule "(.*)" "-" [F] |
| </highlight> |
| </li> |
| |
| <li>Esta solución muestra lo inverso de las anteriores, copiando |
| componentes de ruta (quizás PATH_INFO) de la URL a la cadena de consulta. |
| <highlight language="config"> |
| # The desired URL might be /products/kitchen-sink, and the script expects |
| # /path?products=kitchen-sink. |
| RewriteRule "^/?path/([^/]+)/([^/]+)" "/path?$1=$2" [PT] |
| </highlight> |
| </li> |
| </ul> |
| |
| </dd> |
| |
| </dl> |
| </section> |
| |
| |
| </manualpage> |