apache - ifmodule - mod_rewrite htaccess
Cómo habilitar mod_rewrite para Apache 2.2 (16)
Tengo una instalación nueva de Apache 2.2 en mi máquina Vista, todo funciona bien, excepto la reescritura de mod.
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, entonces mi pregunta es, ¿hay algo oculto en la configuración de apache que pueda bloquear la reescritura de mod?
Abra el terminal y escriba a2enmod rewrite
, habilitará su módulo mod_rewrite
para Apache.
Luego vaya a /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
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Ahora reinicie su apache con /etc/init.d/apache2 restart
o service apache2 restart
Haz la prueba de URL limpia de nuevo y esta vez se pasará.
Acabo de hacer esto
sudo a2enmod rewrite
entonces tienes que reiniciar el servicio de apache siguiendo el comando
sudo service apache2 restart
En Ubuntu:
Correr:
a2enmod rewrite
y entonces:
service apache2 restart
mod_rewrite
ahora estará habilitado!
Hay muchas maneras en que puede solucionar este problema, si conoce la raíz del problema.
Problema 1
En primer lugar, puede ser un problema si su apache no tiene 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 que, además de lo anterior, si no funciona, tenga que cambiar la regla de anulación del archivo apache conf (ya sea apache2.conf, http.conf o el archivo 000-default).
Localice "Directorio / var / www /"
Cambie "Anular ninguno" a "Anular todo"
Problema 3
Si recibe un error que indica que no se encontró el módulo de reescritura, probablemente su módulo de dirección de usuario no esté habilitado. Por esta razón necesitas habilitarlo.
Escribe 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
He escrito sobre esto en un artículo: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu
Intente configurar: AllowOverride All
.
El segundo problema más común es no tener habilitada la reescritura de mod: a2enmod rewrite
y luego reiniciar apache.
Hilo viejo, solo quiero poner que no establezca AllowOverride a todos en lugar de usar el mod específico que desea usar,
AllowOverride mod_rewrite mod_mime
Y esta línea debe ser sin comentar.
LoadModule rewrite_module modules/mod_rewrite.so
Refrences
La nueva versión de apache ha cambiado de alguna manera. Si su versión de apache es 2.4, entonces tiene que ir a /etc/apache2/
. Habrá un archivo llamado apache2.conf
. Tienes que editar eso (deberías tener permiso de root). Cambiar el texto del directorio como este
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Ahora reinicie apache.
service apache2 reload
Espero que funcione.
La primera vez que luché con las reglas mod_rewrite que ignoraban mi tráfico, aprendí (frustrantemente) que las había colocado en el <VirtualHost>
equivocado, lo que significaba que mi tráfico las ignoraría a todas , sin importar lo bien escritas que estuvieran. 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 elegante de Apache, de modo que pueda reciclarlos y monitorear de cerca el comportamiento de mod_rewrite. Una vez que su problema se haya solucionado, gire el RewriteLogLevel hacia abajo y celebre.
En el 100% de mi experiencia, he encontrado que el RewriteLog me ha ayudado a descubrir el problema con mis reglas de reescritura. No puedo recomendar esto lo suficiente. Buena suerte en su solución de problemas!
Además, este marcador es tu mejor amigo: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
Lo que me funcionó (en ubuntu):
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
Además, como ya se mencionó, asegúrese de que AllowOverride all
esté configurado en la sección correspondiente de /etc/apache2/sites-available/default
Obviamente hay más de una forma de hacerlo, pero sugeriría usar el más estándar:
ErrorDocument 404 /index.php?page=404
Para mi situación, tuve
RewriteEngine On
en mi .htaccess
, junto con el módulo que se está cargando, y no estaba funcionando.
La solución a mi problema fue editar mi entrada vhost para incluir
AllowOverride all
en la sección <Directory>
del sitio en cuestión.
Para utilizar mod_rewrite
puede escribir el siguiente comando en el terminal:
sudo a2enmod rewrite
Reinicie apache2 despues
sudo /etc/init.d/apache2 restart
o
sudo service apache2 restart
o según el nuevo Sistema Unificado de Control de Camino
sudo systemctl restart apache2
Luego, si lo desea, puede usar el siguiente archivo .htaccess
.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
El archivo .htaccess
anterior (si se coloca en su DocumentRoot
) redirigirá todo el tráfico a un archivo index.php
en el DocumentRoot
menos que exista el archivo.
Entonces, digamos que tiene la siguiente estructura de directorios y httpdocs es el DocumentRoot
httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php
Cualquier archivo que exista en httpdocs se entregará al solicitante utilizando el .htaccess
muestra arriba, sin embargo, todo lo demás se redirigirá a httpdocs/index.php
. Los archivos de su aplicación en includes/app
no serán accesibles.
Si ninguno de los trabajos anteriores intenta editar / etc / apache2 / sites-enabled / 000-default
casi en la parte superior encontrarás
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Cambie el AllowOverride None
a AllowOverride All
esto me funcionó
Use el comando de abajo
sudo a2enmod rewrite
Y el reinicio de apache por debajo del comando.
sudo service apache2 restart
AllowOverride FileInfo
encarecidamente a todos los que quieran habilitar las directivas mod_rewrite en los archivos .htacces para que utilicen la AllowOverride FileInfo
archivo AllowOverride FileInfo
lugar de permitir todo, como lo sugieren TODAS las respuestas en esta página. Es triste ver que todas estas respuestas adopten el enfoque de "siempre que funcione" está bien, en lugar de tratar de entender 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 AllowOverride All
con AllowOverride All
. RTFM! , queda bastante claro sobre el tema. Vamos tíos, no es una ciencia espacial, ¡es solo un servidor web!
<editar>
Acabo de notar que dijo mod_rewrite.s en lugar de mod_rewrite.so: ¡espero que sea un error tipográfico en su pregunta y no en el archivo httpd.conf! :)
</edit>
Estoy más acostumbrado a usar Apache en Linux, pero tuve que hacer esto el otro día.
En primer lugar, eche un vistazo en su directorio de instalación de Apache. (Supondré que lo hayas instalado en "C: / Archivos de programa" aquí)
Eche un vistazo en 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:
#LoadModule rewrite_module modules/mod_rewrite.so
esta sin comentar
LoadModule rewrite_module modules/mod_rewrite.so
Además, si desea habilitar el RewriteEngine de forma predeterminada, es posible que desee agregar algo como
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
hasta el final de su archivo httpd.conf.
Si no, asegúrate de especificar
RewriteEngine On
En algún lugar de su archivo .htaccess.