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

13

No puedo hacer que mod_rewrite funcione en Lion. Estoy desarrollando una serie de sitios web localmente, en ~ / Sitios, usando archivos .htaccess. Estoy en 10.7.3 y no he tocado ningún archivo de configuración, excepto 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 pasar por alto algo, o de lo contrario probablemente me estoy volviendo loco, pero no está funcionando.

He probado todas las cosas habituales:

  1. En /private/etc/apache2/users/<myusername>.confel cambio AllowOverride Nonede AllowOverride Ally reiniciar el servidor web

  2. Además, en /private/etc/apache2/httpd.conf, cambiar cualquiera / todas las ocurrencias de AllowOverride Nonea AllowOverride All- Lo he intentado en todos los diversos lugares donde se encuentran estas directivas

  3. Pruebe básicamente todas las combinaciones posibles de valores para la Optionslínea encima / debajo 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; Me sale un 404, no encontrado. El registro de errores de Apache solo me da errores "El archivo no existe:". 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 funcionado perfectamente, hasta que migré a una nueva máquina con Lion. Es decir, estoy descartando un error en mis archivos .htaccess porque sé que funcionó antes. Además, si se tratara de un error en el .htaccess, recibiría algún tipo de mensaje de error del módulo mod_rewrite en el registro de errores 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 la 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.

Niels Heidenreich
fuente
Por cierto, no quiero usar MAMP. Utilicé MAMP antes y no funcionó bien con MySQL que ya está en mi sistema. Esto reemplazaría un dolor de cabeza con otro dolor de cabeza, así que no, gracias :)
Niels Heidenreich
Por cierto, estoy en OS X Lion estándar, NO Lion Server.
Niels Heidenreich
Esto no responde 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.
Dan J

Respuestas:

12

Debe asegurarse de que en su /etc/apache2/users/username.conf tenga lo siguiente:

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

FollowSymlinks y AllowOverride son esenciales aquí. Mientras insinúa ambos en su pregunta, tal vez no los configuró correctamente en conjunto.

Asegúrese de que en 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 todavía 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 regla de reescritura regex se compara con un URI de solicitud sin la barra diagonal 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 diagonal inicial y es relativo a la raíz web. Como se supone que tiene su .htaccess en un subdirectorio de ~ / Sites, 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
Gerry
fuente
Gracias Gerry Sí, lo intenté; solo lo intenté de nuevo; desafortunadamente no funciona No he cambiado el .htaccess, está en ~ / Sitios / ..., como estaba antes. Esto es demasiado frustrante :(
Niels Heidenreich
Intente habilitar el registro de reescritura como lo modifiqué anteriormente.
Gerry
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 recibo ningún mensaje de error. Entonces Apache no lo está cargando. Revisé los permisos, están bien (el archivo es legible en todo el mundo). Traté de hacerlo ejecutable, sin cambios.
Niels Heidenreich
Si coloco un .htaccess en / Library / WebServer / Documents y abro " localhost " para probarlo, esto funciona como se esperaba. Simplemente no funciona en "~ / Sitios".
Niels Heidenreich
Hice algo loco y creé una segunda cuenta de usuario con el nombre de usuario "testitester". Configuré AllowOverride en All en el .conf de ese usuario. Coloqué un .htaccess que contiene basura en la carpeta de Sitios de ese usuario. Si voy al localhost / ~ testitester, obtengo un error 500, como se esperaba.
Niels Heidenreich
1

Agregar opciones + FollowSymLinks funcionó bien para mí

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
maseth
fuente
lo que está haciendo con Options +FollowSymLinks? Solo agrego esa línea que funciona para mí
Kannika
1

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 inicial del final, como la que tenía:

¡Y ahora funciona!

Jarada
fuente
1

A continuación, las entradas de .htaccess me arreglan

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>
Charles J
fuente
0

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

Varun Bhatia
fuente
-1

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.

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