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 FileInfolugar 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
.htaccessarchivo.El
.htaccessarchivo anterior (si se coloca en suDocumentRoot) redirigirá todo el tráfico a unindex.phparchivo en, aDocumentRootmenos que el archivo exista.Entonces, digamos que tiene la siguiente estructura de directorios y httpdocs es el
DocumentRootCualquier archivo que exista en httpdocs será entregado al solicitante utilizando lo que se
.htaccessmuestra arriba, sin embargo, todo lo demás será redirigido ahttpdocs/index.php. Los archivos de su aplicaciónincludes/appno serán accesibles.fuente
AllowOverride Allpara que el.htaccessarchivo pueda leerse.a2enmod rewriteen 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 Onen el.htaccess- la existencia deAllowOverride allen el archivo VirtualHost evitará que funcione - esto es lo que me sorprendió, cambiando aAllowOverride allfuncionar como un encanto :)AllowOverridedirectiva determina los "Tipos de directivas que están permitidas en los.htaccessarchivos". Además, "cuando esta directiva se establece enNone, los.htaccessarchivos se ignoran por completo. En este caso, el servidor ni siquiera intentará leer los.htaccessarchivos en el sistema de archivos". Documentos oficiales: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewritey 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 rewritey 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 NoneaAllowOverride Allesto funcionó para mí
fuente
/laravel/public/authors was not found on this servera/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_rewriteahora 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 rewriteReinicie su servidor apache.
service apache2 restartProblema 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 userdirLuego 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 Allya que habilitará muchas características peligrosas (como el uso de scripts perl). En su lugar, useAllowOveride OptionsLa 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_rewritemódulo para Apache.Luego vaya
/etc/apache2/sites-availabley 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 restartoservice apache2 restartVuelva 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 2Estos 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 allestablecerlo en la sección correspondiente de/etc/apache2/sites-available/defaultfuente