2011-12-25 21 views
9

Sé que esta pregunta se ha formulado varias veces. Pero no puedo hacer que funcione.¿Cómo activar mod_rewrite?

Instalé Apache2 en mi servidor Ubuntu También puedo confirmar que mod_rewrite está instalado usando phpinfo() ;. También puse un archivo llamado .htaccess en mi carpeta raíz (/var/www/.htaccess). En mi archivo .htaccess me pega el siguiente código:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^.*$ test.php 

Así que todo se redirige a Test.php

Pero todavía no funciona. Así que revisé mi archivo httpd.conf en/etc/apache2. Está completamente vacío, sin líneas de código (Esto me parece un poco extraño)? Sin embargo, en la comprobación Stackoverflow responde debería ser al menos el código siguiente en httpd.conf:

<Directory /> 
    Options FollowSymLinks 
    AllowOverride All 
    Order deny,allow 
    Deny from all 
    Satisfy all 
</Directory> 

Así que pegar ese código en httpd.conf. Y reinició Apache con sudo /etc/init.d/apache restart. Y todavía no funciona?

También he probado a abrir el archivo/sites-enabled/000-default y/sites-available/por defecto, en el que todos los ajustes de la máquina virtual mentiras y el cambio en el directorio /var/www y / a AllowOverride All. El mod_rewrite todavía no funciona. Alguien puede ayudarme por favor. Este problema ha estado horneando mis nueces por un tiempo.

Además, mi archivo apache2.conf no funciona. Traté de escribir algunas tonterías. Y es todavía me da el resultado normal en vez de error HTTP 500

+2

Si está utilizando una configuración estándar, la configuración básica del documento raíz estará en/etc/apache2/sites-available/default si eso es lo que está buscando. Allí puede insertar AllowOverride All que permitirá la reescritura a través del archivo .htaccess. – Dan

Respuesta

7

Todas las sugerencias de Niels Bom son las más inteligentes (creo).Pero agregaría esto como la primera sugerencia: intente iniciar y detener Apache mediante el comando Ubuntu: cuando se supone que debe detenerse, asegúrese de que esté parado, es decir, verifique que su página local ya no se muestre.

  • lea lo que está en la carpeta /etc/apache2/. No debe haber apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
  • entonces si todo está bien, echar un vistazo a mods-enabled, donde encontrará si están habilitados los mods si es así, entonces usted puede seguir adelante, de lo contrario echar un vistazo a las otras respuestas acerca de la habilitación modrewrite
  • Eche un vistazo al sites-enabled: es donde puede encontrar los sitios que están ... (¿Adivina qué?) habilitados. Debería haber el sitio web default.
  • en caso afirmativo, abra este archivo y trate de poner apache sin sentido en él, reinicie el servidor y vea si está satisfecho o no. Si no es feliz, eso es bueno. Si está satisfecho, entonces está trabajando en el archivo equivocado
  • último: intente marcar cuáles son las autorizaciones para los archivos htaccess para este vhost predeterminado. Así es como funcionan: si Apache no encuentra ninguna directiva en el archivo vhost, aplicará la configuración global. Por lo tanto, le sugiero que agregue la configuración en su archivo vhost, entre las etiquetas <virtualhost> - </virtualhost> (por supuesto).

Por favor, dime qué está pasando y con gusto actualizaré mi pregunta en consecuencia.

0

Por favor, compruebe /etc/apache2/apache2.conf

+0

Ya lo hizo. No hay allí tampoco – einstein

+0

Comprobo nuevamente, y en mi instalación la directiva del directorio está en: /etc/apache2/mods-available/alias.conf. asegúrese de que el módulo de alias esté habilitado –

+0

¿Tengo ese archivo? ¿Qué debo hacer con eso? – einstein

10

si ejecuta este comando,

sudo a2enmod rewrite 

Ubuntu salida whethere se activa o ya en ejecución.

+1

está activado. Pero mod_rewrite no está funcionando? – einstein

+0

Esto no funcionará. Las configuraciones deben ser reescritas a mano. – Sliq

2

Está bien, vamos a ver supuestos: sin sentido

  1. poner en sus archivos de configuración de Apache (y reiniciar Apache para dejar que tomen efecto), no Apache "se quejan" en el reinicio? Luego intenta cargar esos archivos. Pruebe esto para cada archivo de configuración de Apache que pueda encontrar. Ahora tiene una lista completa de los archivos de configuración de Apache que están cargados.

  2. no tiene sentido en su htaccess, vuelva a cargar la página, ¿recibe un error de 500? Si no, el htaccess no se está cargando.

  3. colocar la instrucción más básica mod_rewrite en tu .htaccess:

    Opciones + FollowSymLinks RewriteEngine En RewriteRule^* $ test.html

Esto debe reescribir cada petición a Test.html. .

Inténtalo y danos los resultados.

+0

Lo siento por la respuesta tardía. Pensé que mi htaccess funcionaba, pero no fue así. Probé tus tres pasos y ninguno de ellos funciona como se esperaba. ¿Tienes una idea de qué hacer? Los pasos 1 y 2 no me dan un error http 500 y el servidor omite 3. – einstein

+0

Si Apache no se queja al reiniciar si ha puesto una tontería en un archivo de configuración de Apache, entonces Apache no está leyendo ese archivo de configuración. ¿Podría darnos una lista completa de cada archivo y su contenido en/etc/apache2 /? –

+0

Para que quede claro: con "archivo de configuración de Apache" me refiero a cualquier archivo en/etc/apache2/y * no * su .htaccess. –

0

En su pregunta, ustedes han mencionado,

Además, mi archivo apache2.conf no funciona. Traté de escribir algunas tonterías. Y es todavía me da el resultado normal en vez de error HTTP 500

Por lo tanto, antes de publicar más cosas para tratar de salida con los archivos .conf,

plazo strace -o somefilename.txt sudo /etc/init.d/apache restart

strace - llamadas al sistema traza y señales: strace(1) - Linux man page.


La parte -o somefilename.txt pone la salida de strace en somefilename.txt. Abra el archivo de texto y busque httpd.conf. Usted debe ser capaz de ver un código similar a:

stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0 
open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3 

El camino a httpd.conf será reemplazado por la ruta a su valor predeterminado httpd.conf

Si encuentra uno, a continuación, abra que httpd.conf y hacer cambios allí. De lo contrario, un httpd.conf no se está cargando.

Si más adelante es el caso, trate de:

sudo /etc/init.d/apache -f /path/to/httpd.conf start 

Además, la verificación de NameVirtualHost *:80 y asegúrese de que no se comenta.

+1

sí, esto ayuda – Prozi

5

Debido a que este hilo ocupa un lugar muy alto en Google, aquí otra solución:

lo que está causando el problema?

Se debe a que la definición estándar en apache simplemente bloquea todas las cosas de .htaccess. Seriouslsy. Este parece ser el estado inicial en Ubuntu 12.04 LTS.

SOLUCIÓN

en/etc/apache2/sites-available/default (que es un archivo, no una carpeta) hay un bloque de código como

<Directory /var/www/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride XXXXXXXXXXXXXXXXXXX 
    Order allow,deny 
    allow from all 
</Directory> 

Aquí se debe cambiar

AllowOverride None 

a

AllowOverride All 

IMPORTANTE

Tienes que hacer estos cambios con los derechos sudo, anotherwise Ubuntu no va a guardar el archivo. Después de un reinicio, tus cosas de .htaccess deberían funcionar. Para probar .htaccess, simplemente inserte un texto sin sentido y navegue a localhost o 127.0.0.1 -> Si ve el "error interno del servidor": ¡voila! Elimine las tonterías y ya está listo para comenzar.