Tengo una nueva instalación de Apache 2.2 en mi máquina Vista, todo funciona bien, excepto la reescritura de mods.
He comentado
LoadModule rewrite_module modules/mod_rewrite.s
pero ninguna de mis reglas de reescritura funciona, incluso las simples como
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Todas las reglas que estoy usando están funcionando en mi hosting, por lo que deberían estar bien, así que mi pregunta es, ¿hay algo oculto en la configuración de apache que pueda bloquear la reescritura de mods?
apache
mod-rewrite
Jakub Arnold
fuente
fuente
AllowOverride FileInfo
lugar de permitir todo, como lo sugieren TODAS las respuestas en esta página. Es triste ver que todas estas respuestas adoptan el enfoque de "siempre y cuando funcione" en lugar de tratar de comprender las consecuencias de la "solución" propuesta. Intente comprender lo que está haciendo en su servidor y cómo limitar los privilegios que acaba de otorgarAllowOverride All
. RTFM! , es bastante claro sobre el tema.Respuestas:
Para usarlo
mod_rewrite
, puede escribir el siguiente comando en el terminal:Reiniciar apache2 después
o
o según la nueva forma unificada de control del sistema
Luego, si lo desea, puede usar el siguiente
.htaccess
archivo.El
.htaccess
archivo anterior (si se coloca en suDocumentRoot
) redirigirá todo el tráfico a unindex.php
archivo en, aDocumentRoot
menos que el archivo exista.Entonces, digamos que tiene la siguiente estructura de directorios y httpdocs es el
DocumentRoot
Cualquier archivo que exista en httpdocs será entregado al solicitante utilizando lo que se
.htaccess
muestra arriba, sin embargo, todo lo demás será redirigido ahttpdocs/index.php
. Los archivos de su aplicaciónincludes/app
no serán accesibles.fuente
AllowOverride All
para que el.htaccess
archivo pueda leerse.a2enmod rewrite
en Windows?Para mi situación, tuve
en mi
.htaccess
, junto con el módulo que se está cargando, y no funcionaba.La solución a mi problema fue editar mi entrada vhost para incluir
en la
<Directory>
sección del sitio en cuestión.fuente
a2enmod rewrite
&RewriteEngine On
en el.htaccess
- la existencia deAllowOverride all
en el archivo VirtualHost evitará que funcione - esto es lo que me sorprendió, cambiando aAllowOverride all
funcionar como un encanto :)AllowOverride
directiva determina los "Tipos de directivas que están permitidas en los.htaccess
archivos". Además, "cuando esta directiva se establece enNone
, los.htaccess
archivos se ignoran por completo. En este caso, el servidor ni siquiera intentará leer los.htaccess
archivos en el sistema de archivos". Documentos oficiales: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
y luego en el archivo VirtualHosts cambie 'AllowOverride None' a 'AllowOverride All', debería funcionar. El archivo VirtualHosts se aplica si está ejecutando múltiples nombres de dominio en el mismo servidor (y dirección IP). Lo habría configurado para configurar el dominio.Pruebe a establecer:
AllowOverride All
.El segundo problema más común es no tener habilitada la reescritura de mods
a2enmod rewrite
y luego reiniciar apache.fuente
Si ninguno de los trabajos anteriores intenta editar / etc / apache2 / sites-enabled / 000-default
casi en la parte superior encontrarás
Cambiar el
AllowOverride None
aAllowOverride All
esto funcionó para mí
fuente
/laravel/public/authors was not found on this server
a/index.php was not found on this server
<Directory /var/www/html>
para aplicar la regla desde esta carpeta y solo hacia arriba.En Ubuntu:
Correr:
y entonces:
mod_rewrite
ahora estará habilitado!fuente
Hay muchas formas de solucionar este problema, si conoce la raíz del problema.
Problema 1
En primer lugar, puede ser un problema con su apache no tener el módulo mod_rewrite.c instalado o habilitado.
Por este motivo, deberías habilitarlo de la siguiente manera
Abre tu consola y escribe en ella, esto:
sudo a2enmod rewrite
Reinicie su servidor apache.
service apache2 restart
Problema 2
También puede, además de lo anterior, si no funciona, tener que cambiar la regla de anulación del archivo apache conf (apache2.conf, http.conf o 000-default file).
Busque "Directorio / var / www /"
Cambie "Anular ninguno" a "Anular todo"
Problema 3
Si obtiene un error que indica que no se encuentra el módulo de reescritura, entonces probablemente su módulo userdir no esté habilitado. Por este motivo, debe habilitarlo.
Escriba esto en la consola:
sudo a2enmod userdir
Luego intente habilitar el módulo de reescritura si aún no está habilitado (como se mencionó anteriormente).
Para leer más sobre esto, puede visitar este sitio: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
fuente
AllowOverride All
ya que habilitará muchas características peligrosas (como el uso de scripts perl). En su lugar, useAllowOveride Options
La nueva versión de apache ha cambiado de alguna manera. Si su versión de apache es 2.4, entonces debe ir a
/etc/apache2/
. Habrá un archivo llamadoapache2.conf
. Debe editarlo (debe tener permiso de root). Cambiar el texto del directorio como esteAhora reinicie apache.
Espero que funcione.
fuente
Terminal abierto y Typin
a2enmod rewrite
, habilitará sumod_rewrite
módulo para Apache.Luego vaya
/etc/apache2/sites-available
y edite el archivo predeterminado. (Para esto, debe tener permisos de escritura para este archivo y la carpeta de sitios disponibles).Reemplace a continuación con las líneas existentes 4 a 14
Ahora reinicie su apache por
/etc/init.d/apache2 restart
oservice apache2 restart
Vuelva a realizar una prueba de URL limpia y esta vez se pasará.
fuente
<editar>
Acabo de notar que dijiste mod_rewrite.s en lugar de mod_rewrite.so, ¡espero que sea un error tipográfico en tu pregunta y no en el archivo httpd.conf! :)
</edit>
Estoy más acostumbrado a usar Apache en Linux, pero tuve que hacerlo el otro día.
En primer lugar, eche un vistazo a su directorio de instalación de Apache. (Asumiré que lo instaló en "C: \ Archivos de programa" aquí)
Eche un vistazo a la carpeta: "C: \ Archivos de programa \ Apache Software Foundation \ Apache2.2 \ modules" y asegúrese de que haya un archivo llamado mod_rewrite.so allí. (Debería ser, se proporciona como parte de la instalación predeterminada.
A continuación, abra "C: \ Archivos de programa \ Apache Software Foundation \ Apache2.2 \ conf" y abra httpd.conf. Asegúrese de que la línea:
no está comentado:
Además, si desea habilitar RewriteEngine de forma predeterminada, es posible que desee agregar algo como
al final de su archivo httpd.conf.
Si no, asegúrese de especificar
en algún lugar de tu archivo .htaccess.
fuente
Acabo de hacer esto
entonces tienes que reiniciar el servicio apache siguiendo el comando
fuente
Hilo antiguo, solo quiero poner que no establezca AllowOverride en todos, sino que use el mod específico que desea usar,
Y esta línea no debe ser comentada
Referencias
fuente
Utilice el siguiente comando
Y el reinicio apache a través del siguiente comando
fuente
Obviamente, hay más de una forma de hacerlo, pero sugeriría usar el estándar más:
fuente
La primera vez que tuve problemas con mod_rewrite normas haciendo caso omiso de mi tráfico, he aprendido (y frustrante) que los había colocado en el mal
<VirtualHost>
, lo que significaba que mi tráfico sería ignorar todo de ellos sin importar lo bien escritos que eran. Asegúrate de que esto no te esté sucediendo:# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Estos parámetros se activarán si realiza un reinicio correcto de Apache, por lo que puede reciclarlos y monitorear de cerca el comportamiento de mod_rewrite. Una vez que se solucione el problema, vuelva a bajar el RewriteLogLevel y celebre.
En el 100% de mi experiencia, descubrí que RewriteLog me ha ayudado a descubrir el problema con mis reglas de reescritura. No puedo recomendar esto lo suficiente. ¡Buena suerte en tu solución de problemas!
Además, este marcador es tu mejor amigo: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
fuente
Lo que funcionó para mí (en ubuntu):
Además, como ya se mencionó, asegúrese de
AllowOverride all
establecerlo en la sección correspondiente de/etc/apache2/sites-available/default
fuente