Pregunta Configuración de la negociación de contenido de Apache para idiomas usando MultiViews


Estoy tratando de obtener el MultiViews Opción que funciona en Apache para variar el contenido devuelto al navegador en función de la Accept-Language proporcionado en las solicitudes.

Tengo la siguiente configuración:

Alias /multiviewstest "C:/MultiViews Test"

<Directory "C:/MultiViews Test">
    Options MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

En mi C:\MultiViews Test directorio tengo los siguientes archivos:

  • spam.html
  • foo.html.en

Cuando pido http://localhost/multiviewstest/spam los contenidos de spam.html es regresado. Aquí están los encabezados de solicitud y respuesta:

Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Date: Fri, 08 May 2009 11:07:54 GMT
Server: Apache/2.2.10 (Win32)
Content-Location: spam.html
Vary: negotiate
TCN: choice
Last-Modified: Fri, 08 May 2009 10:48:34 GMT
Etag: "0-4-469645ec81e70;469645ff5a5d8"
Accept-Ranges: bytes
Content-Length: 4
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

los Content-Location, Varyy TCN cabeceras de respuesta indica MultiViews han pateado correctamente.

He configurado el inglés como el único idioma preferido para mostrar idiomas en mi navegador; un Accept-Language en encabezado se establece en las solicitudes. Cuando pido http://localhost/multiviewstest/foo.html Se devuelve una respuesta 404. Basado en mi entendimiento de Convenciones de nomenclatura de archivos de Apache para la negociación del lenguaje. Esperaría los contenidos de la foo.html.en archivo a devolver.

Aquí están los encabezados de solicitud y respuesta:

Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Date: Fri, 08 May 2009 11:08:39 GMT
Server: Apache/2.2.10 (Win32)
Content-Length: 221
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

Esto es lo que aparece en el registro de acceso para la solicitud:

127.0.0.1 - - [04/May/2009:10:28:24 +1200] "GET /multiviewstest/foo.html HTTP/1.1" 404 221

Y desde el registro de errores:

[Mon May 04 10:28:24 2009] [error] [client 127.0.0.1] Negotiation: discovered file(s) matching request: C:/MultiViews Test/foo.html (None could be negotiated).

¿Por qué no está funcionando correctamente la negociación de contenido para el idioma? ¿Hay alguna configuración que he pasado por alto?


6
2018-05-02 10:22


origen


¿Has visto tus errores y tus registros de acceso? - Vinko Vrsalovic
He añadido las entradas correspondientes de los registros a la publicación. - Simon Lieschke
¿Puede publicar los encabezados de solicitud y respuesta de las solicitudes exitosas (spam) y no exitosas (foo)? - jj33
Hecho; He añadido los encabezados para ambas solicitudes en la pregunta. - Simon Lieschke


Respuestas:


¿Existen las relaciones correctas de idioma / extensión en su configuración?

AddLanguage en .en
LanguagePriority en fr de
ForceLanguagePriority Fallback

2
2018-05-14 02:52



¡Bingo! Una directiva AddLanguage fue suficiente para solucionar el problema, pero también revisaré las otras directivas. Habría sido útil si la documentación de negociación de contenido de Apache que vinculé mencionara algo sobre la directiva AddLanguage. Sin embargo, gracias! - Simon Lieschke


FWIW, me encontré con un problema similar, con las directivas adecuadas de AddLanguage, etc. en su lugar. Finalmente me di cuenta de que el problema era específico de PHP.

Por alguna razón, estaba usando SetHandler dentro de una directiva FilesMatch:

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Cambiar a un AddType simple resolvió el problema:

AddType application/x-httpd-php .php

2
2017-08-31 22:36





los respuesta dada por metkat insinuaba la fuente de mi problema también. Sin embargo, me decidí por un enfoque diferente. Esto es lo que mi configuración tenía:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Y esto es en lo que lo cambié en:

<FilesMatch ".+\.ph(p[345]?|t|tml)(\.[a-z]{2}|)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Básicamente agregué al final del nombre del archivo: (\.[a-z]{2}|), que significa "... seguido de un punto y dos caracteres del rango a-z OR (|) nada ". Parece funcionar bien hasta ahora :)


0
2017-09-26 20:59