2011-05-12 15 views
7

Estoy trabajando para configurar una instancia de Mango Blog en un servidor Ubuntu que ejecute Apache 2 HTTPD y Tomcat 6 con Railo 3.1.2. Pude configurar todo hasta que comencé a tratar de implementar la reescritura de URL para las URL del blog.Problema de reescritura de URL con Mango Blog (error 404)

Utilicé una combinación de Adam Tuttle's y John Sieber's publicaciones para obtener las reglas de reescritura. Tengo la configuración de la sede de la siguiente manera:

{Webroot}/.htaccess

RewriteEngine on 
RewriteBase/
# archives rule must be located before page rule for paging to work correctly 
RewriteRule archives/(.*)$    archives.cfm/$1 [PT,L,NC] 
RewriteRule page/(.*)$     page.cfm/$1 [PT,L,NC] 
RewriteRule post/(.*)$     post.cfm/$1 [PT,L,NC] 
RewriteRule author/(.*)$    author.cfm/$1 [PT,L,NC] 

{Apache-HOME}/sites-enabled/nombre del sitio

<VirtualHost *:80> 
     ServerAdmin ******* 

     DocumentRoot /var/www/******/www 
     ServerName mango.*****.com 
     DirectoryIndex index.cfm 

     <Directory /var/www/*******.com/www/> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride all 
       Order allow,deny 
       allow from all 
     </Directory> 

     ErrorLog /var/log/apache2/error-*******_com.log 

     # Possible values include: debug, info, notice, warn, error, crit, 
     # alert, emerg. 
     LogLevel warn 

     CustomLog /var/log/apache2/access-********_com.log combined 

     ProxyPreserveHost Off 
     ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/ 

</VirtualHost> 

Cuando visito los Mensajes de blog por ir. a/post/hello-world en el sitio me sale un error 404. Si voy a /post.cfm/hello-world, la publicación sale bien. Probé las reglas de reescritura contra un rewrite tester, y eso decía que las reescrituras deberían funcionar bien. Soy muy nuevo en la reescritura, así que me disculpo si esto es algo simple.

+0

Para mí Mango reescritura de URL es una magia negro, y yo estoy teniendo nuevos problemas para cada nueva instalación ... – Sergii

+0

En teoría no debería ser demasiado difícil. Realmente solo está eliminando .cfm de las URL. –

Respuesta

2

poner en su archivo .htaccess:

Options -Multiviews 
+0

Gracias por la respuesta akond. ¿Te importaría explicar un poco más por qué esa opción soluciona el problema? –

+0

Ay, claro. Esta directiva desactiva la negociación. Para obtener más información, visite http://httpd.apache.org/docs/current/content-negotiation.html y busque "Multiviews". – akond

+0

@akond No veo por qué tenía Mutiviews en el nivel del servidor tampoco ... :: Índices de opciones FollowSymLinks MultiViews –

0

Intenta mover tus reglas de reescritura al bloque VirtualHost. He tenido problemas extraños con .htaccess no funciona correctamente con reescrituras.

Podría estar equivocado aquí, pero esto es lo que creo que sucede.

Apache buscará/post /, que no existe y devolverá el 404. Ejecutaría .htaccess si existía en/post /, pero no es así.

Si las reglas de reescritura están en su bloque Directorio dentro del bloque VirtualHost en el archivo httpd.conf, entonces Apache sabe redirigir en lugar de buscar/post /.

<VirtualHost *:80> 
    ServerAdmin ******* 

    DocumentRoot /var/www/******/www 
    ServerName mango.*****.com 
    DirectoryIndex index.cfm 

    <Directory /var/www/*******.com/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride all 
      Order allow,deny 
      allow from all 

      RewriteEngine on 
      RewriteBase/
      # archives rule must be located before page rule for paging to work correctly 
      RewriteRule archives/(.*)$    archives.cfm/$1 [PT,L,NC] 
      RewriteRule page/(.*)$     page.cfm/$1 [PT,L,NC] 
      RewriteRule post/(.*)$     post.cfm/$1 [PT,L,NC] 
      RewriteRule author/(.*)$    author.cfm/$1 [PT,L,NC] 
    </Directory> 

    ErrorLog /var/log/apache2/error-*******_com.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/access-********_com.log combined 

    ProxyPreserveHost Off 
    ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/ 

+0

Cuando agrego mis reescrituras al final de mi configuración de VirtualHost, primero me da un error el 'RewriteBase: solo válido en los archivos de configuración por directorio', y cuando lo comente obtengo un error de 400 cuando intento visitarlo una url reescrita como/post/hello-world –

+0

Mueva el código de la regla de reescritura dentro de #moveHere. Código original actualizado con código nuevo. –

+0

Todavía obtengo el error 404 cuando muevo las reescrituras en la etiqueta del directorio. –

0

Su problema podría estar relacionado con su RewriteBase. Cuando cargué su ejemplo en un servidor de prueba, vi en los registros de errores de Apache que usar RewriteBase me funcionaba debido al entorno que estaba usando; sin embargo, usar/en su caso podría no estar creando la ruta correcta.

En los registros de errores de su servidor web, vea qué ruta se está generando cuando dice que no puede encontrar el error 404. Probable es que diga algo como:

[21/May/2011:17:29:20 +0000] [error] [client #.#.#.#] File does not exist: /path/to/something/not/quite/right/post.cfm/hello_world 

Sigue el camino para asegurarse de que en realidad le conduce a la ubicación real del servidor donde los archivos * .cfm residen. Luego simplemente modifica tu RewriteBase para que sea la ruta correcta.

Espero que ayude.

+0

El único error que parece que está relacionado con la reescritura es 'Negociación: archivo (s) descubierto (s) que coinciden con la solicitud:/var/www/******/www/post (Ninguno podría ser negociado)' –

+1

Esto es definitivamente relacionado con el problema que estás teniendo. Es un error nuevo para mí, pero quizás esté relacionado con mod_negotiation y los tipos de identificador de archivo que está buscando. Tal vez intente deshabilitar mod_negotiation (si está habilitado para su servidor web) para ver si afecta la naturaleza del error. –

+0

Este es sin duda un problema relacionado con la negociación de mod. – akond

Cuestiones relacionadas