Estoy usando el Kohana Framework 3.x. Mi servidor Web es Apache y uso de máquinas Virtuales, porque me administrar más de uno de los sitios web con mi Servidor.

Mi httpd.conf se parece a esto:

  <VirtualHost *:80>
 ServerName www.myPage1.com
 ServerAlias myPage1.com
 DocumentRoot /var/www/myPage1
</VirtualHost>
<VirtualHost *:80>
 ServerName www.myPage2.com
 ServerAlias myPage2.de
 DocumentRoot /var/www/myPage2
</VirtualHost>

En Kohana cada solicitud http que necesita para ir a la index.php en primer lugar. Porque no me gusta estas Url feas que todo comienza con index.php (por ejemplo www.myPage1.com/index.php/item/detail/itemId) he utilizado el siguiente .htaccess que funcionó a la perfección

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

Ahora me gustaría no uso .htaccess más y en lugar de poner toda la reescritura de la lógica en mi httpd.conf archivo. El siguiente me da un «400 Bad Request»

<VirtualHost *:80>
 RewriteEngine On
 <Files .*>
  Order Deny,Allow
  Deny From All
 </Files>
 RewriteRule ^(?:aplication|modules|system)\b.* index.php/$0 [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule .* index.php/$0 [PT]

 ServerName www.myPage2.com
 ServerAlias myPage2.com
 DocumentRoot /var/www/myPage2
</VirtualHost>

¿Qué estoy haciendo mal? Ayuda se agradece!

InformationsquelleAutor Pascal Klein | 2010-11-30

4 Comentarios

  1. 2

    Usted no tiene un RewriteBase en tu httpd.conf. Y lo que está mal con el .htaccess?

    • Pensé que sólo necesita un RewriteBase cuando puedo usar la Reescritura de URL al directorio con un .archivo htaccess. Si mi RewriteBase es como «/» I cant evento de inicio de apache y obtener un error. No quiero hacer uso de el .htaccess ya porque quiero tener todos los ajustes de la central en mi httpd.conf
    • Hay un montón de cosas mal con .htaccess, el principal es un disco adicional de acceso para cada directorio en la raíz del documento en la ruta de solicitud, en cada petición. El servidor se ejecutará mucho más rápido si usted gire a la digitalización de dichos archivos (AllowOverride None).
  2. 3

    Si usted está usando mod_rewrite en un VirtualHost bloque con el REQUEST_FILENAME condición, usted se no obtener el nombre del archivo (esto es por la documentación). En lugar de ello, esta variable contiene el mismo valor que REQUEST_URI, que contiene la ruta de acceso excluyendo la cadena de consulta.

    Cita de la anterior-página enlazada:

    Si se utilizan en cada contexto del servidor (es decir, antes de que la solicitud se asigna al sistema de ficheros) SCRIPT_FILENAME y REQUEST_FILENAME no puede contener la totalidad del sistema de ficheros local ruta de acceso desde la ruta de acceso es desconocido en esta etapa de procesamiento. Ambas variables se contienen inicialmente el valor de REQUEST_URI en ese caso. Con el fin de obtener el completo sistema de ficheros local camino de la solicitud en el servidor por servidor contexto, el uso de la dirección URL basada en look-ahead %{LA-U:REQUEST_FILENAME} para determinar el valor final de REQUEST_FILENAME.

    Sin embargo, he encontrado que la propuesta de solución %{LA-U:REQUEST_FILENAME} no funciona, al menos no para los hosts virtuales en mi servidor. Para asegurarse de que su RewriteCond líneas de funcionar como se esperaba en un VirtualHost bloque, debe prefijo DOCUMENT_ROOT, así:

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    

    Este método siempre funciona. El interruptor para _URI es en el caso de REQUEST_FILENAME un día devuelve el nombre de archivo real, para evitar un doble-prefijo de la raíz del documento.

    • Protector de la vida! Gracias!
    • Eres bienvenido 🙂
  3. 1

    Recuerde, si usted poner estas reglas en el servidor principal conf archivo (normalmente httpd.conf) en lugar de una .htaccess, usted necesitará usar ^/… … en lugar de ^… … en el comienzo de la RewriteRule línea, en otras palabras, añada una barra.

    comprobar esto, puede ayudar.

  4. 1

    podría ser este error (tal vez debería ser la «aplicación»):

    RewriteRule ^(?:aplication|modules|system)\b.* index.php/$0 [L]
    

Dejar respuesta

Please enter your comment!
Please enter your name here