Comment vérifier si mod_rewrite est activé sur le serveur?

104

Actuellement, j'utilise l'hébergement avec un serveur Lightspeed . L'hébergement dit mod_rewriteest activé mais je ne peux pas faire fonctionner mon script là-bas. Chaque fois que j'essaye d'accéder à l'URL, elle renvoie 404 - page non trouvée .

J'ai mis les mêmes codes sur un autre serveur qui fonctionne avec Apache. Ça marche là-bas. Donc je suppose, c'est la .htaccesset mod_rewritequestion.

Mais le support d'hébergement insiste toujours avec moi sur le fait que leur mod_rewrite est activé, donc j'aimerais savoir comment puis-je vérifier s'il est réellement activé ou non.

J'ai essayé de vérifier avec phpinfo(), mais pas de chance, je ne trouve pas mod_rewritelà-bas, est-ce parce qu'ils utilisent lightspeed?

Existe-t-il un moyen de vérifier? Sil te plait aide moi. Je vous remercie.

FYI: mon .htaccesscode est

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>

J'ai essayé comme ça aussi

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]

Mais même résultat.

chevalier
la source

Réponses:

99

à partir de la ligne de commande, tapez

réécriture sudo a2enmod

si le mode de réécriture est déjà activé, il vous le dira!

KawaiKx
la source
C'est le moyen le plus simple d'activer la réécriture de mod.
andromeda
3
OUI ! Parfait, tout simplement parfait.
George Dimitriadis
Travaillé. Simple et facile. Merci
biplab rout
97
  1. Pour vérifier si le module mod_rewrite est activé, créez un nouveau fichier php dans votre dossier racine de votre serveur WAMP. Entrez ce qui suit

    phpinfo();

  2. Accédez à votre fichier créé à partir de votre navigateur.

  3. CtrlFpour ouvrir une recherche. Recherchez «mod_rewrite». S'il est activé, vous le voyez comme «Modules chargés»

  4. Sinon, ouvrez httpd.conf (fichier Apache Config) et recherchez la ligne suivante.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Supprimez le signe dièse ('#') au début et enregistrez ce fichier.

  6. Redémarrez votre serveur Apache.

  7. Accédez au même fichier php dans votre navigateur.

  8. Recherchez à nouveau "mod_rewrite". Vous devriez pouvoir le trouver maintenant.

Fadzly Othman
la source
9
Je crois que phpinfo () signale les modules chargés Apache lorsque PHP est lui-même exécuté en tant que module Apache. L'OP déclare que PHP fonctionne sur Lightspeed, qui possède son propre moteur de réécriture compatible mod_rewrite.
MrWhite
2
Pour la première étape, j'ai dû saisir: <? Php echo phpinfo (); ?>
Greg Noe
7
Notez que cette méthode ne fonctionnera pas si vous exécutez PHP en tant qu'application CGI (ce qui est le cas si phpinfo()le champ «Server API» indique «CGI / FastCGI»). phpinfo()ne listera pas les modules activés. Dans ce cas, consultez Comment vérifier la présence de mod_rewrite sur PHP CGI .
Rory O'Kane
67

Si vous utilisez un fichier de configuration d'hôtes virtuels, assurez-vous que l'hôte virtuel en question a la directive AllowOverride Allquelque part comme ceci:

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

Fondamentalement, cela stipule de permettre le traitement de toutes les directives .htaccess.

Jahmic
la source
3
Merci. Je vous dois un Budweiser. <3
Nishant Ghodke
qu'est-ce que cela signifie ...dans <Directory ...>? Que dois-je y mettre? le répertoire où se trouve .htaccess?
João Pimentel Ferreira
oui en effet, le ... devrait mentionner entre guillemets "..." le répertoire où se trouve .htaccess
João Pimentel Ferreira
Cela a. J'ai fait copier le fichier de configuration à partir du serveur, et bien que j'aie changé le ServerName, je n'avais pas changé le nom du répertoire, après cela et un redémarrage d'Apache c'était ok.
D. Dan
1
Richard Si cette réponse a fonctionné pour vous et a résolu votre problème, vous devez la marquer comme correcte et attribuer à @Jahmic son dû.
Sinthia V
18

Si apache_get_modules () n'est pas reconnu ou aucune information sur ce module dans phpinfo (); essayez de tester la réécriture de mod en ajoutant ces lignes dans votre fichier .htaccess:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Et mod_rewrite.php:

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

console:

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

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
la source
J'ai beaucoup essayé de résoudre ce problème, puis lorsque j'essaye cela fonctionne pour moi. J'ai le dernier apache et ubuntu maintenant.
Fernando Sanchiz
15

Si

in_array('mod_rewrite', apache_get_modules())

retourne truealors mod-rewrite est activé.

Shivanshu
la source
Solution parfaite en une ligne pour vérifier le module de réécriture activé ou non via les codes PHP.
Shakeel Ahmed
12

La apache_get_modules()fonction définie par PHP renvoie une liste de modules activés. Pour vérifier si mod_rewriteest activé, vous pouvez exécuter le script suivant sur votre serveur:

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

Si l'exemple ci-dessus échoue, vous pouvez vérifier la réécriture de mod en utilisant votre .htaccessfichier.

Créez un htaccessfichier à la racine du document et ajoutez la règle de réécriture suivante:

RewriteEngine on

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

Maintenant, visitez http://example.com/HelloWorld , vous serez redirigé en interne vers la page /index.php de votre site. Sinon, si mod-rewrite est désactivé, vous obtiendrez une erreur de serveur 500 Internel.

J'espère que cela t'aides.

Amit Verma
la source
J'utilise 7.2, apache_get_modules est indéfini. Dois-je redémarrer apache2 après l'édition .htaccess?
Adi Prasetyo
1
Non, vous n'avez pas besoin de redémarrer votre serveur lorsque vous utilisez htaccess.
Amit Verma
12

vous pouvez le faire sur le terminal, soit:

apachectl -M
apache2ctl -M

tiré de 2daygeek

Adi Prasetyo
la source
Dans Debian 9, cela fonctionne mais vous devez être connecté en tant que root ou utilisersudo
androsfat
11

Cela fonctionne sur CentOS:

$ sudo httpd -M |grep rewrite_module

Devrait sortir rewrite_module (shared)

Radtek
la source
C'est la meilleure façon de le faire sur CentOS, en supposant que vous ayez un accès ssh. Merci, @radtek!
John T.
10

Si ce code est dans votre fichier .htaccess (sans la vérification 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]

et vous pouvez visiter n'importe quelle page de votre site avec une erreur de serveur 500. Je pense qu'il est prudent de dire que la réécriture de mod est activée.

Clive
la source
3
Vous pouvez donc accéder à certaines pages du site sans erreur 500? Cela signifierait généralement que si le fichier .htaccess est en cours de lecture, mod_rewrite doit être activé. Cependant, le .htaccess peut ne pas être lu ... essayez d'écrire des caractères absurdes en haut de votre fichier .htaccess, cela entraînera la mort de la connexion avec une erreur de serveur 500 si Apache lit réellement le fichier. S'il est en cours de lecture, pourriez-vous donner un exemple d'URL qui, selon vous, devrait fonctionner mais qui ne fonctionne pas?
Clive
le problème est que ce n'est pas un serveur apache, c'est la vitesse de la lumière. Je n'obtiens jamais une erreur 500, tout ce que j'obtiens est une erreur 404. C'est pourquoi je doute que .htaccess ne soit pas activé.
knightrider
Très probablement oui, j'essaierais de mettre les caractères absurdes dans .htaccess et de voir si vous obtenez l'erreur 500 lorsque vous accédez directement à une page non réécrite (par exemple index.php). Sinon, cela pourrait valoir la peine de poster une nouvelle question demandant comment activer .htaccess avec Lightspeed
Clive
5

Vous pouvez utiliser la fonction php

      apache_get_modules

et vérifiez mod_rewrite

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

http://in2.php.net/apache_get_modules

Miqdad Ali
la source
2
apache_get_modules () ne fonctionnera que si PHP s'exécute en tant que module Apache. L'OP déclare que PHP fonctionne sur Lightspeed.
MrWhite
5

Si vous êtes dans le système Linux, vous pouvez cocher tous les modules d'activation pour apache2 (dans mon cas) dans le dossier suivant: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

pour taper: ll -a
si vous voulez vérifier les modules disponibles pour le dossier php (dans ce cas php 7) /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

pour taper: ll -a

Ezequiel De Simone
la source
4

créez simplement une nouvelle page et ajoutez ce code

 <?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>

et exécutez cette page, puis trouvez que le module est disponible ou non sinon vous pouvez demander à votre hébergement ou si vous souhaitez l'activer sur une machine locale, puis vérifiez ce tutoriel youtube étape par étape lié à l'activation du module de réécriture dans wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Icône du serveur Wamp -> Apache -> Modules Apache et cochez l'option du module de réécriture

Hassan Saeed
la source
2

Je sais que cette question est ancienne mais si vous pouvez modifier votre fichier de configuration Apache à AllowOverride Allpartir deAllowOverride 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>
Excellent Lawrence
la source
C'est une bonne idée d'indiquer le nom exact et, si possible, l'emplacement du fichier à modifier. Ce sera utile pour les nouveaux arrivants. Merci
MindRoasterMir
Il convient également de garder à l'esprit que les modifications ne prennent effet qu'après avoir reformulé votre apache. merci
MindRoasterMir
1

Il vous suffit de vérifier si le fichier est là, en tapant

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

La ligne de résultat ne peut pas être commentée en commençant par #

João Pimentel Ferreira
la source
1

Ce code a fonctionné pour moi:

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

J'avais le problème exact, je l'ai résolu en cliquant sur la structure personnalisée, puis en ajoutant /index.php/%postname%/ et cela fonctionne

J'espère que cela épargnera à quelqu'un le stress que j'ai traversé pour trouver ce qui n'allait pas.

Kyle S
la source