Pregunta

Tengo una aplicación web de Tomcat 6 que se ejecuta con apache httpd como parte frontal. Estoy usando mod_proxy y mod_proxy_ajp para reenviar las solicitudes a Tomcat. Mi servidor está ejecutando ubuntu. Ahora estoy tratando de usar mod_rewrite para eliminar el sitio web principal, de modo que la URL de mi sitio web canónico es http://domain.com en lugar de http://www.domain.com

He leído varios tutoriales sobre el uso de mod_rewrite, pero no puedo hacer que la reescritura funcione. He intentado colocar la regla de reescritura en un archivo .htaccess (después de modificar mi archivo / etc / apache / sites-available / default para configurar AllowOverride all). He intentado poner la regla de reescritura en apache2.conf, httpd.conf y rewrite.conf. He intentado todo esto con el registro de reescritura activado. El archivo de registro se crea, pero Apache no le ha escrito nada. Pensé que tal vez mod_proxy estaba impidiendo de alguna manera que se usaran las reglas de reescritura, así que también intenté deshabilitar eso ... y todavía no puedo volver a escribir, y nada en el registro.

En este momento no tengo ni idea de qué intentar a continuación. ¿Cómo hago para resolver problemas por qué apache no usa mis reglas de reescritura?

Para referencia, aquí están mis directivas de reescritura:

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
    RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
    RewriteLog "/var/log/apache2/rewrite.log"
    RewriteLogLevel 3

</IfModule>

Editar : las respuestas a continuación son útiles para mi caso particular, pero probablemente no lo sean tanto para la comunidad en general como las respuestas sobre cómo solucionar los problemas de las directivas de apache en general. Por ejemplo, ¿hay una manera de habilitar el registro hasta el punto en el que me diga qué directivas se están aplicando en el orden en que se recibe la solicitud?

Edit 2 : Ahora tengo cosas para trabajar. Mis hosts virtuales no estaban configurados correctamente, y tampoco tenía la regex de reescritura correcta. Aquí están las directivas de reescritura finales que tengo que trabajar:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
        RewriteRule ^(.*)$ http://domain.com$1 [L,R=301]
</IfModule>
¿Fue útil?

Solución

Intentando responder a su pregunta : para depurar la operación de Apache, puede ajustar el LogLevel a un nivel inferior (tal vez debug ). Pero incluso si pone debug si deshabilita el registro para el módulo en cuestión, no recibe ningún mensaje de este. Por ejemplo, el [RequestLogLevel] [2] predeterminado es 0, por ejemplo, el módulo no escribe ningún mensaje. Veo que lo configuraste en 3 pero como RoBorg dijo que cámbielo a 9 que quizás sea demasiado bajo para su caso.

Intentando solucionar su problema : intente cambiar la forma en que reescribe el nombre de host utilizando la forma inversa: mire si el nombre de host es lo que desea y, si no, cámbielo por el nombre de host que desee . Como se indica en la Guía de reescritura de URL - Servidor HTTP Apache en Apache Sitio:

  

Nombres de host canónicos

     

Descripción :       El objetivo de esta regla es forzar el uso de un nombre de host particular, en   preferencia a otros nombres de host que   Puede ser utilizado para llegar al mismo sitio.   Por ejemplo, si desea forzar la   uso de www.example.com en lugar de   example.com, puede usar una variante   de la siguiente receta. Solución:

# To force the use of 
RewriteEngine On
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R]

En su ejemplo, cambian de example.com a www.example.com pero tienes la idea. Solo ajústalo a tu caso.

Otros consejos

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
    RewriteRule ^(.*)$ "http\:\/\/domain\.com\/$1" [R=301,L]

</IfModule>

Tenía el mismo problema con mi servidor, pero esto funcionó

Intente aumentar el nivel de registro hasta 9 (el máximo).
Asegúrese de que apache tenga los derechos adecuados para el archivo de registro (aunque si lo creó, es probable que también pueda escribir en él). Pruebe una regla de reescritura diferente, sin condiciones, por ejemplo, RewriteRule. * Www.google.com [RL]

¿En qué contexto se ubican estas reglas? Puede que los coloques bajo un host virtual diferente, por ejemplo. Intente colocarlos fuera de cualquier contenedor si solo tiene un dominio para probar.

En cualquier caso, hay una alternativa para lograr 'no-www', consiste en usar dos hosts virtuales, uno para www y otro para 'no-www'. www uno redirige al otro:

<VirtualHost *:80>
    ServerName www.domain.com
    Redirect permanent / http://domain.com
</VirtualHost>


<VirtualHost *:80>
    ServerName domain.com
    #The rest of the configuration (proxying, etc.)
</VirtualHost>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top