2012-05-04 17 views
9

Aquí está mi archivo .htaccess:.htaccess - ¿detiene el procesamiento si la escritura es verdadera?

Options +FollowSymlinks 
RewriteEngine on 

Rewritecond %{http_host} ^mysite.com [nc] 
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . /404.php 

El bloque primero RewriteCond/RewriteRule es redirigir al usuario www si entraban en la dirección y sin www.

El segundo bloque de reescritura/reescritura es para redirigir al usuario a una página que creé si ingresan una dirección inexistente.

Cada una de estas reglas trabaja en su propia:

Si mi archivo .htaccess contiene sólo el primer bloque, a continuación, vuelve a dirigir con éxito direcciones sin www a la dirección www.

Y si se ingresa una dirección inexistente, se redirecciona al usuario a mi página 404.php.

Sin embargo, si el archivo .htaccess contiene ambos bloques, y se introduce una dirección sin www, entonces en vez de un cambio de dirección con éxito a la dirección www, ocurre lo siguiente:

(1) Se muestra lo siguiente en la página:

movido permanentemente

el documento se ha movido aquí.

Además, se encontró un error de 500 Internal Server Error al intentar usar un ErrorDocument para manejar la solicitud.

Apache/1.3.41 Servidor en mysite.com puerto 80

(2) La siguiente entrada se genera en el registro de errores:

[vie 4 may 01:54:19 2012] [error ] [cliente 109.109.109.109] mod_rewrite: cantidad máxima de redirecciones internas alcanzadas. Suponiendo error de configuración. Use 'RewriteOptions MaxRedirects' para aumentar el límite si es necesario.

Supongo que lo que ocurre es que de alguna manera se genera un ciclo infinito.

Me pregunto si decirle al archivo .htaccess que deje de procesar los comandos si se cumple la primera condición resolvería el problema. Entonces, ¿alguien sabe cómo hacer esto?

(Nota al margen. En general, creo que la documentación que hay en .htaccess ser absolutamente terrible. Me pregunto si alguien más se siente de manera similar.)

Gracias de antemano.

Respuesta

10
+1

Seguí su consejo, por lo que el único cambio en mi archivo es que la primera reescritura regla tiene lo siguiente: 'Reescritura^(. *) $ http://www.misitio.es/$1 [r = 301, nc, L]' Y todo parece estar funcionando correctamente ahora. Gracias. – oyvey

+0

No es necesario volver a iterar el sitio. Y: Apache RewriteRules son codiciosos por defecto. ☞ 'RewriteRule (. *) $ 1 [R = 404, L]' –

3

¿Se puede probar este código en su lugar:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

ErrorDocument 404 404.php 

Rewritecond %{HTTP_HOST} ^mysite\.com$ [NC] 
Rewriterule^http://www.mysite.com%{REQUEST_URI} [R=302,NC,L] 

Una vez que verifique que está funcionando bien, entonces cambiar R=302-R=301.

+0

Gracias. En realidad, originalmente manejé los redireccionamientos para direcciones incorrectas a través de ErrorDocument, pero si recuerdo correctamente, no funcionó para las direcciones que terminan en php, y esa es la razón por la que cambié al código actual. – oyvey

Cuestiones relacionadas