Habilite la reescritura de URL (mod_rewrite) usando archivos .htaccess en ~/Sites en Lion

No puedo hacer que mod_rewrite funcione en Lion. Estoy desarrollando varios sitios web localmente, en ~/Sitios, utilizando archivos .htaccess. Estoy en 10.7.3 y no he tocado ningún archivo de configuración excepto para habilitar PHP en httpd.conf (que funciona).

Sé que hay al menos 2 preguntas sobre esto aquí, pero las soluciones detalladas allí no funcionan. Tampoco las otras soluciones que he encontrado en la web. Debo estar haciendo algo estúpido o pasando por alto algo, o probablemente me estoy volviendo loco, pero no está funcionando.

He probado todas las cosas habituales:

  1. En /private/etc/apache2/users/<myusername>.conf, cambie AllowOverride Nonea AllowOverride Ally reinicie el servidor web

  2. Además, en /private/etc/apache2/httpd.conf, cambie cualquiera/todas las apariciones de AllowOverride Nonea AllowOverride All: lo probé en todos los lugares donde se encuentran estas directivas

  3. Pruebe básicamente todas las combinaciones posibles de valores para la Optionslínea arriba/abajo de la AllowOverridelínea, incluidos los valores:Indexes MultiViews FollowSymLinks All

Siempre reiniciando el servidor web después de tal cambio, por supuesto. Nada de esto funciona. Todas mis URL limpias simplemente no funcionan; Recibo un 404 - no encontrado. El registro de errores de Apache solo me da "El archivo no existe:" errores. Entonces parece que el módulo mod_rewrite ni siquiera funciona en absoluto.

Me aseguré de que mod_rewrite esté cargado en httpd.conf, que es; es así por defecto en una instalación de Lion.

Lo loco es que todo había estado funcionando perfectamente, hasta que migré a una nueva máquina que ejecutaba Lion. Es decir, estoy descartando un error en mis archivos .htaccess porque sé que funcionó antes. Además, si fuera un error en .htaccess, obtendría algún tipo de mensaje de error del módulo mod_rewrite en error_log de Apache, al menos diciéndome que se está llamando al módulo en sí. Pero esto no está sucediendo.

¿Estoy pasando por alto algo? ¿Tengo que cambiar los ajustes de configuración en otro lugar? ¿Tengo que cambiar la configuración de PHP? ¿Por qué las instrucciones (como Cómo activar mod_rewrite en MacOSX Lion y hacer que mod_rewrite funcione en Mac OS X ) funcionan para otras personas pero no para mí? :)

Ya he perdido horas en esto. Cualquier ayuda será muy apreciada.

Por cierto, no quiero usar MAMP. Usé MAMP antes y no funcionó bien con MySQL que ya está en mi sistema. Esto sería reemplazar un dolor de cabeza con otro dolor de cabeza, así que no, gracias :)
Por cierto, estoy en OS X Lion estándar, NO Lion Server.
Esto no responde a la pregunta, pero una alternativa a luchar con el entorno local de su Mac para hacer desarrollo web es usar algo como Vagrant , que le permite configurar y administrar fácilmente configuraciones de máquinas virtuales.

Respuestas (6)

Debes asegurarte de que en tu /etc/apache2/users/username.conf tienes lo siguiente:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Los FollowSymlinks y AllowOverride son esenciales aquí. Si bien está insinuando ambos en su pregunta, tal vez no los configuró correctamente en conjunto.

Asegúrese de que httpd.conf /private/etc/apache2/extra/httpd-userdir.conf también esté incluido. Es por defecto.

Después de cualquier modificación, reinicie el servidor web para que los cambios surtan efecto.

Si aún tiene problemas, tal vez haya un problema con sus reglas de reescritura reales. ¿Los estabas usando en un contexto .htaccess antes también? Tenga en cuenta que en un .htaccess, la expresión regular de la regla de reescritura se compara con un URI de solicitud sin la barra inclinada inicial y siempre en relación con el directorio donde reside el .htaccess , mientras que en un httpd.conf global, el URI debe coincidir con una barra inclinada inicial y es en relación con la raíz web. Debido a que supuestamente tiene su .htaccess en un subdirectorio de ~/Sitios, sus reglas de reescritura pueden comportarse de manera diferente a cuando el .htaccess reside en la raíz web de un host (virtual).

Para depurar mod_rewrite, puede habilitar el registro de reescritura. Debe habilitar eso en /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Gracias Gerry. Sí, lo intenté; acaba de intentarlo de nuevo; no funciona por desgracia. No he cambiado el .htaccess, está en ~/Sitios/…, como estaba antes. Esto es demasiado frustrante :(
Intente habilitar el registro de reescritura como modifiqué anteriormente.
OK, no es un problema con mod_rewrite en absoluto, como parece; es el archivo .htaccess el que se ignora por completo. Puedo colocar cualquier basura en él y no aparece ningún mensaje de error. Entonces Apache no lo está cargando. Revisé los permisos, están bien (el archivo es legible para todo el mundo). Intenté hacerlo ejecutable, sin cambios.
Si coloco un .htaccess en /Library/WebServer/Documents y abro " localhost " para probarlo, esto funciona como se esperaba. Simplemente no funciona en "~/Sitios".
Hice algo loco y creé una segunda cuenta de usuario con el nombre de inicio de sesión "testitester". Configuré AllowOverride en All en el .conf de ese usuario. Coloqué un .htaccess que contenía basura en la carpeta Sitios de ese usuario. Si voy a localhost/~testitester, obtengo un error 500, como se esperaba.
Mi propio nombre de inicio de sesión es "yo". Haciendo exactamente lo mismo que hice con testitester arriba, no obtengo ningún error; el archivo .htaccess se ignora. Voy a ir a un hospital psiquiátrico mañana.
Esa última oración fue una broma, por supuesto, pero en serio, esto no tiene ningún sentido.
Sé que no es una respuesta directa a su problema, pero ¿ha considerado configurar hosts virtuales en su lugar?

Agregar opciones +FollowSymLinks funcionó bien para mí

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
¿con qué está haciendo Options +FollowSymLinks? Acabo de agregar esa línea que funciona para mí

Estaba experimentando un problema similar en el que mi archivo .htaccess se ignoraba por completo mientras estaba en una subcarpeta dentro de mi directorio ~/Sites en un VirtualHost que estaba configurado correctamente.

Después de pasar la última hora jugando con diferentes archivos de configuración y configurando AllowOverride All en varios lugares, finalmente descubrí que el archivo .htaccess, aunque parecía un archivo .htaccess en Finder, en realidad era un archivo .htaccess.txt con el extensión oculta.

Para verificar y cambiar su archivo .htaccess, haga clic derecho sobre él y elija Obtener información y luego asegúrese de eliminar cualquier extensión principal del final, como la que tenía:

¡Y ahora funciona!

Debajo de las entradas de .htaccess arregladas para mí

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

Colocar .htaccess en /Library/WebServer/Documents y abrir "localhost/"; para probarlo, funciona como se esperaba. Simplemente no funciona en "~/Sitios". ¡Gracias Niels Heidenreich por esto!

Cuando escribe: /Users/username/app_name

El / se refiere a la raíz del servidor web:

"localhost/"

Si usa /~username/app_name en su reescritura, debería funcionar.

Las rutas que comienzan con /son siempre rutas absolutas para Apache, consulte la definición de raíz del servidor web en http.conf ( <Directory "/Library/WebServer/Documents">)