2011-12-04 36 views
7

Estoy usando mod_rewrite para enrutar todas las solicitudes a index.php..htaccess se ignora cuando se utiliza un URI con alias

Mi estructura de carpetas es el siguiente:

/Users/Peter/Projects/Framework 
    /.htaccess 
    /index.php 

En mi archivo .htaccess que tienen la siguiente:

RewriteEngine on 
RewriteCond $1 !^index\.php/ 
RewriteRule ^(.*)$ index.php/$1 [L] 

Esto funciona bien cuando vuelva a projects.localhost/framework/example.

También he creado los siguientes alias de arriba: Alias ​​/ ~ alias/Usuarios/Peter/Proyectos

Cuando navego a http://projects.localhost/~alias/framework/example me sale un error 404 y el siguiente en mi registro de errores: File does not exist: /Users/Peter/Projects/framework/example

Parece que el archivo .htaccess no se está llamando cuando uso la URL con alias (escribir giberish en el archivo .htaccess no desencadena ningún tipo de error cuando el URL con alias parece confirmar esto).

AllowOveride está establecido en Todo.

¿Cómo obtengo .htaccess funcionando cuando uso la URL con alias y las reglas de reescritura se aplican consistentemente independientemente de la URL (con alias o sin alias)?

Editar: Navegar a projects.localhost/~alias/framework/index.php/example también funciona bien, lo que confirma que el alias está funcionando correctamente (además de no tener las reglas .htaccess aplicadas a él).

+1

Alias ​​parece pasar por alto la raíz normal, y por lo tanto el archivo .htaccess colocados allí. Simplemente podría poner otro archivo .htaccess en la carpeta '/ Users/Peter/Projects' – Gerben

+0

He intentado poner un archivo .htaccess en la carpeta de proyectos, pero esto tampoco tiene efecto en la URL con alias. (Afecta la URL sin alias.) –

Respuesta

0

¿Estás seguro de que tienes habilitado mod_rewrite?

+0

Sí, la reescritura funciona bien cuando utilizo la url sin alias –

8

Encontré su pregunta con el mismo problema. y desde @Gerbens comento he conseguido encontrar this part del manual de Apache que establece:

# 
# /abc/def/.htaccess -- per-dir config file for directory /abc/def 
# Remember: /abc/def is the physical path of /xyz, i.e., the server 
#   has a 'Alias /xyz /abc/def' directive e.g. 
# 

RewriteEngine On 

# let the server know that we were reached via /xyz and not 
# via the physical path prefix /abc/def 
RewriteBase /xyz 

# now the rewriting rules 
RewriteRule ^oldstuff\.html$ newstuff.html 

Adición de una base de reescritura en el fichero .htaccess en el directorio alias resuelto mi problema.

Así, en su caso

RewriteEngine on 
RewriteBase /~alias 
RewriteCond $1 !^index\.php/ 
RewriteRule ^(.*)$ index.php/$1 [L] 
+0

¡Votaría esto dos veces si pudiera - guardé mi tocino! Gracias, @danneth. –

+0

Maravilloso, gracias. Entonces, sin RewriteBase, Apache se comporta estúpidamente al asumir que se accede desde la ruta física. Me pregunto cómo este comportamiento no se informó como un error. –

Cuestiones relacionadas