¿Cómo comprobar si mod_rewrite está habilitado en el servidor?

104

Actualmente estoy usando el alojamiento con servidor de velocidad de la luz . El alojamiento dice que mod_rewriteestá habilitado pero no puedo hacer que mi script funcione allí. Siempre que intento acceder a la URL, devuelve 404 - página no encontrada .

Puse los mismos códigos en otro servidor que se ejecuta con Apache. Está funcionando allí. Así que supongo que es el problema .htaccessy mod_rewrite.

Pero el soporte de Hosting todavía me insiste en que su mod_rewrite está activado, así que me gustaría saber cómo puedo verificar si está realmente habilitado o no.

Traté de consultar phpinfo(), pero no tuve suerte, no puedo encontrar mod_rewriteallí, ¿es porque están usando lightspeed?

¿Hay alguna forma de comprobarlo? Por favor, ayúdame. Gracias.

FYI: mi .htaccesscódigo es

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

Intenté así también

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Pero el mismo resultado.

caballero
fuente

Respuestas:

98

desde la línea de comando, escriba

sudo a2enmod reescribir

si el modo de reescritura ya está habilitado, ¡se lo dirá!

KawaiKx
fuente
Esta es la forma más sencilla de habilitar la reescritura de mod.
andromeda
3
SI ! Perfecto, simplemente perfecto.
George Dimitriadis
Trabajó. Simple y fácil. Gracias
ruta biplab
96
  1. Para verificar si el módulo mod_rewrite está habilitado, cree un nuevo archivo php en su carpeta raíz de su servidor WAMP. Introduzca la siguiente

    phpinfo();

  2. Acceda a su archivo creado desde su navegador.

  3. CtrlFpara abrir una búsqueda. Busque 'mod_rewrite'. Si está habilitado, lo verá como 'Módulos cargados'

  4. Si no es así, abra httpd.conf (archivo de configuración de Apache) y busque la siguiente línea.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Elimine el signo de almohadilla ('#') al principio y guarde este archivo.

  6. Reinicie su servidor apache.

  7. Acceda al mismo archivo php en su navegador.

  8. Busque 'mod_rewrite' nuevamente. Debería poder encontrarlo ahora.

Fadzly Othman
fuente
9
Creo que phpinfo () informa los módulos cargados de Apache cuando PHP se está ejecutando como un módulo de Apache. El OP indica que PHP se está ejecutando en Lightspeed, que tiene su propio motor de reescritura compatible con mod_rewrite.
MrWhite
2
Para el primer paso, tuve que ingresar: <? Php echo phpinfo (); ?>
Greg Noe
7
Tenga en cuenta que este método no funcionará si está ejecutando PHP como una aplicación CGI (que es el caso si phpinfo()el campo "API del servidor" muestra "CGI / FastCGI"). phpinfo()no enumerará los módulos habilitados. En ese caso, consulte Cómo comprobar mod_rewrite en PHP CGI .
Rory O'Kane
67

Si está utilizando un archivo de configuración de hosts virtuales, asegúrese de que el host virtual en cuestión tenga la directiva en AllowOverride Allalgún lugar como este:

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

Básicamente, esto indica permitir el procesamiento de todas las directivas .htaccess.

Jahmic
fuente
3
Gracias. Te debo una Budweiser. <3
Nishant Ghodke
¿Qué significa el ...en <Directory ...>? ¿Qué pondré allí? el directorio donde está .htaccess?
João Pimentel Ferreira
sí, de hecho, el ... debería mencionar entre comillas "..." el directorio donde está .htaccess
João Pimentel Ferreira
Tenía. Hice copiar el archivo conf del servidor, y aunque había cambiado el ServerName, no había cambiado el nombre del directorio, después de eso y un reinicio de Apache estaba bien.
D. Dan
1
Richard Si esta respuesta funcionó para usted y resolvió su problema, debe marcarla como correcta y otorgarle a @Jahmic lo que le corresponde.
Sinthia V
18

Si no se reconoce apache_get_modules () o no hay información sobre este módulo en phpinfo (); intente probar la reescritura de mod agregando esas líneas en su archivo .htaccess:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Y mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
wappy
fuente
15

consola:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
fuente
He intentado mucho para resolver esto y luego, cuando lo intento, funciona para mí. Ahora tengo el último apache y ubuntu.
Fernando Sanchiz
15

Si

in_array('mod_rewrite', apache_get_modules())

devuelve trueentonces mod-rewrite está habilitado.

Shivanshu
fuente
Solución perfecta de una línea para verificar el módulo de reescritura habilitado o no a través de códigos PHP.
Shakeel Ahmed
12

La apache_get_modules()función perdefinida de PHP devuelve una lista de módulos habilitados. Para comprobar si mod_rewriteestá habilitado, puede ejecutar el siguiente script en su servidor:

<?php
print_r(apache_get_modules());
?>

Si el ejemplo anterior falla, puede verificar mod-rewrite usando su .htaccessarchivo.

Cree un htaccessarchivo en la raíz del documento y agregue la siguiente rewriteRule:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

Ahora visite http://example.com/HelloWorld . Se le reenviará internamente a la página /index.php de su sitio. De lo contrario, si mod-rewrite está deshabilitado, obtendrá un error de servidor de 500 Internel.

Espero que esto ayude.

Amit Verma
fuente
Yo uso 7.2, apache_get_modules no está definido. ¿Tengo que reiniciar apache2 después de editar .htaccess?
Adi Prasetyo
1
No, no necesita reiniciar su servidor cuando usa htaccess.
Amit Verma
12

puedes hacerlo en la terminal, ya sea:

apachectl -M
apache2ctl -M

tomado de 2daygeek

Adi Prasetyo
fuente
En Debian 9, funciona, pero debe iniciar sesión como root o usarsudo
androsfat
11

Esto funciona en CentOS:

$ sudo httpd -M |grep rewrite_module

Debería salir rewrite_module (shared)

radtek
fuente
Esta es la mejor manera de hacerlo en CentOS, asumiendo que tiene acceso ssh. ¡Gracias, @radtek!
John T.
10

Si este código está en su archivo .htaccess (sin la verificación de mod_rewrite.c)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

y puede visitar cualquier página de su sitio con un error de servidor 500.Creo que es seguro decir que la reescritura de mod está activada.

Clive
fuente
3
¿Entonces puede acceder a algunas páginas del sitio sin un error 500? Por lo general, eso significaría que si se lee el archivo .htaccess, mod_rewrite debe estar activado. Sin embargo, es posible que el .htaccess no se esté leyendo ... intente escribir algunos caracteres sin sentido en la parte superior de su archivo .htaccess, esto hará que la conexión falle con un error de servidor 500 si Apache realmente está leyendo el archivo. Si se está leyendo, ¿podría dar un ejemplo de una URL que cree que debería funcionar pero no funciona?
Clive
el problema es que no es un servidor apache, es la velocidad de la luz. Nunca obtengo un error 500, todo lo que obtengo es un error 404. Es por eso que dudo que .htaccess no esté habilitado.
knightrider
Lo más probable es que sí, intentaría poner los caracteres sin sentido en .htaccess y ver si obtiene el error 500 cuando vaya directamente a una página no reescrita (por ejemplo, index.php). De lo contrario, podría valer la pena publicar una nueva pregunta sobre cómo habilitar .htaccess con Lightspeed
Clive
5

Puedes usar la función php

      apache_get_modules

y comprobar mod_rewrite

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules

Miqdad Ali
fuente
2
apache_get_modules () solo funcionará si PHP se ejecuta como un módulo de Apache. El OP establece que PHP se está ejecutando en Lightspeed.
MrWhite
5

Si está en el sistema Linux, puede marcar todos los módulos habilitados para apache2 (en mi caso) en la siguiente carpeta: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

para escribir: ll -a
si desea verificar los módulos disponibles para php (en este caso php 7) carpeta /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

digitar: ll -a

Ezequiel De Simone
fuente
4

solo crea una nueva página y agrega este código

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

y ejecute esta página, luego encontrará la posibilidad de saber que el módulo está disponible o no, si no, puede preguntarle a su alojamiento o si desea habilitarlo en la máquina local, luego consulte este tutorial paso a paso de youtube relacionado para habilitar el módulo de reescritura en wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Icono del servidor Wamp -> Apache -> Módulos Apache y marque la opción de reescritura del módulo

Hassan Saeed
fuente
2

Sé que esta pregunta es antigua, pero si puede editar su archivo de configuración de Apache AllowOverride AlldesdeAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>
Excelente Lawrence
fuente
Es una buena idea indicar el nombre exacto y, cuando sea posible, la ubicación del archivo que debe cambiarse. Será de gran ayuda para los recién llegados. Gracias
MindRoasterMir
También debe tenerse en cuenta que los cambios entran en vigencia solo después de haber reafirmado su apache. gracias
MindRoasterMir
1

Solo necesita verificar si el archivo está allí, escribiendo

cat /etc/apache2/mods-available/rewrite.load

La línea de resultado no se puede comentar a partir de #

João Pimentel Ferreira
fuente
1

Este código funcionó para mí:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";
Keinan Goichman
fuente
0

Estaba teniendo el problema exacto, lo resolví haciendo clic en la estructura personalizada y luego agregando /index.php/%postname%/ y funciona

Espero que esto le ahorre a alguien el estrés por el que pasé al encontrar qué diablos estaba mal con eso.

Kyle S
fuente