mod_rewrite htaccess a2enmod apache mod-rewrite

apache - a2enmod - mod_rewrite htaccess



¿Cómo ignoro un directorio en mod_rewrite? (11)

Estoy tratando de tener las reglas de modrewrite omitir el directorio vip . He intentado una serie de cosas como puede ver a continuación, pero fue en vano.

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #RewriteRule ^vip$ - [PT] RewriteRule ^vip/.$ - [PT] #RewriteCond %{REQUEST_URI} !/vip RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

¿Cómo obtengo modrewrite para ignorar por completo el directorio /vip/ para que todas las solicitudes pasen directamente a la carpeta?

Actualizar:

Como puntos de claridad:

  • Está alojado en Dreamhost
  • Las carpetas están dentro de un directorio de wordpress
  • la carpeta / vip / contiene un webdav .htaccess, etc. (aunque no creo que esto sea importante

El código que está agregando y todas las respuestas que proporcionan reglas / condiciones de Reescribir son inútiles. El código predeterminado de WordPress ya hace todo lo que necesita:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

Esas líneas dicen "si NO es un archivo existente ( -f ) o un directorio ( -d ), páselo a WordPress. Agregar reglas adicionales, no importa cuán específicas o buenas sean, es redundante: ya debes estar cubierto por las reglas de WordPress!

¿Entonces por qué no están trabajando?

El .htaccess en el directorio vip está arrojando un error. Lo mismo ocurre si protege con contraseña un directorio.

Aquí está la solución:

ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt

Inserte esas líneas antes del código de WordPress, y luego cree /err.txt. De esta manera, cuando se trata de su WebDAV (o directorio protegido con contraseña) y falla, irá a ese archivo y quedará atrapado por la condición predeterminada de WordPress ( RewriteCond %{REQUEST_FILENAME} !-f ).


En mi caso, la respuesta de brentonstrine (y veo que matdumsa también tenía la misma idea) era la correcta ... Quería votar por sus respuestas, pero como soy nuevo aquí, no tengo "reputación", así que tengo para escribir una respuesta completa, con el fin de enfatizar lo que creo que es la verdadera clave aquí.

Varias de estas respuestas evitarían que WordPress index.php se use ... pero en muchos casos, la razón para hacer esto es que hay un directorio real con páginas reales que desea visualizar directamente, y el

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

las líneas ya se encargan de eso, por lo que la mayoría de esas soluciones son una distracción en un caso como el mío.

La clave fue la idea de brentonstrine de que el error era un efecto secundario, causado por la protección con contraseña dentro del directorio que estaba tratando de mostrar directamente. Al poner en el

ErrorDocument 401 /err.txt ErrorDocument 403 /err.txt

líneas y crear páginas de error (de hecho, creé err401.html y err403.html e hice más mensajes de error informativos) Dejé la respuesta 404 que se generaba cuando no se podía encontrar ninguna página para mostrar para la Autenticación 401 requerida, y luego la carpeta funcionaba como era de esperar ... que muestra un cuadro de diálogo de inicio de sesión de Apache, luego el contenido de la carpeta, o en caso de error, mi error 401 página.


En resumen, la solución final es:

ErrorDocument 401 /misc/myerror.html ErrorDocument 403 /misc/myerror.html # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

Publiqué más sobre la causa de este problema en mi situación específica, involucrando Wordpress y WebDAV en Dreamhost, que espero que muchos otros tengan en mi sitio .


Esto funciona ...

RewriteRule ^vip - [L,NC]

Pero asegúrese de que sea la primera regla después

RewriteEngine en

es decir

ErrorDocument 404 /page-not-found.html RewriteEngine on RewriteRule ^vip - [L,NC] AddType application/x-httpd-php .html .htm RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d etc


Intenta poner esto antes que cualquier otra regla.

RewriteRule ^vip - [L,NC]

Coincidirá con cualquier URI que comience vip .

  • El - significa no hacer nada.
  • La L significa que esta debería ser la última regla; ignora todo lo siguiente.
  • El NC significa no-case (por lo que "VIP" también se corresponde).

Tenga en cuenta que coincide con cualquier cosa que comience vip . La expresión ^vip$ coincidiría con vip pero no con vip/ o vip/index.html . El $ puede haber sido tu perdición. Si realmente quieres hacerlo bien, es posible que quieras ir con ^vip(/|$) para que no coincida con vip-page.html


Intenta reemplazar esta parte de tu código:

RewriteRule ^vip/.$ - [PT]

...con lo siguiente:

RewriteCond %{REQUEST_URI} !(vip) [NC]

Eso debería arreglar las cosas.


Mencionó que ya tiene un archivo .htaccess en el directorio que desea ignorar, puede usar

RewriteEngine off

En ese .htaccess para detener el uso de mod_rewrite (no estoy seguro de si está usando mod_rewrite en esa carpeta, si lo está, no servirá porque no puede desactivarlo).


No estoy seguro si entiendo tu objetivo, pero los siguientes pueden hacer lo que estás buscando.

RewriteRule ^/vip/(.*)$ /$1?%{QUERY_STRING} [L]

Esto causará que una URL como http://www.example.com/vip/fred.html se reescriba sin / vip.


Tuve el mismo problema al usar WordPress y descubrí que el problema está relacionado con la falta de un controlador adecuado para los errores 401 y 403.

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

Estas condiciones ya se supone que no reescriben la url de las carpetas existentes, pero no hacen su trabajo para las carpetas protegidas por contraseña. En mi caso, al agregar las dos líneas siguientes a mi raíz .htaccess se solucionó el problema:

ErrorDocument 401 /misc/myerror.html ErrorDocument 403 /misc/myerror.html

Por supuesto, necesitas crear el /misc/myerror.html,


RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

Esto dice que si es un archivo existente o un directorio, no lo toques. Debería poder acceder a site.com/vip y no debería haber ninguna regla de reescritura.


RewriteCond %{REQUEST_URI} !^pilot/

es la manera de hacer eso.