Actuellement, j'utilise l'hébergement avec lightspeed server. L'hébergement indique que mod_rewrite
est activé mais je ne parviens pas à faire fonctionner mon script là-bas. Chaque fois que j'essaie d'accéder à l'URL, il retourne 404 - non trouvé page.
Je mets les mêmes codes sur un autre serveur qui fonctionne avec Apache. Cela fonctionne là-bas. Donc, je suppose que c'est le problème .htaccess
et mod_rewrite
.
Mais le support d'hébergement insiste toujours sur le fait que leur mod_rewrite est activé. J'aimerais donc savoir comment puis-je vérifier s'il est activé ou non.
J'ai essayé de vérifier avec phpinfo()
, mais pas de chance, je ne trouve pas mod_rewrite
, est-ce parce qu'ils utilisent lightspeed
?
Y a-t-il un moyen de vérifier? Sil te plait aide moi. Je vous remercie.
FYI: mon .htaccess
code 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.
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();
Accédez à votre fichier créé à partir de votre navigateur.
CtrlF ouvrir une recherche. Recherchez 'mod_rewrite'. S'il est activé, vous le voyez en tant que "modules chargés"
Sinon, ouvrez httpd.conf (fichier de configuration Apache) et recherchez la ligne suivante.
#LoadModule rewrite_module modules/mod_rewrite.so
Supprimez le signe dièse ('#') au début et enregistrez le fichier this.
Redémarrez votre serveur Apache.
Accédez au même fichier php dans votre navigateur.
Recherchez à nouveau 'mod_rewrite'. Vous devriez pouvoir le trouver maintenant.
à partir de la ligne de commande, tapez
Sudo a2enmod réécrire
si le mode de réécriture est déjà activé, il vous le dira!
Si vous utilisez un fichier de configuration d'hôtes virtuels, assurez-vous que l'hôte virtuel en question possède la directive AllowOverride All
quelque part comme ceci:
<VirtualHost *:80>
...
<Directory "directory/of/your/.htaccess">
AllowOverride All
</Directory>
</VirtualHost>
Si Apache_get_modules () n'est pas reconnu ou aucune information sur ce module dans phpinfo (); essayez de tester le mod rewrite en ajoutant ces lignes dans votre fichier .htaccess:
RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php
Et mod_rewrite.php:
<?php echo "Mod_rewrite is activated!"; ?>
console:
<VirtualHost *:80>
...
<Directory ...>
AllowOverride All
</Directory>
</VirtualHost>
Sudo a2enmod rewrite
Sudo service Apache2 restart
Si
in_array('mod_rewrite', Apache_get_modules())
renvoie true
puis mod-rewrite est activé.
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 l’obtention d’une erreur de serveur 500. Je pense qu’il est prudent de dire que le mod rewrite est activé.
La fonction perdefined Apache_get_modules()
de PHP retourne une liste des modules activés. Pour vérifier si mod_rewrite
est 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 mod-rewrite à l'aide de votre fichier .htaccess
.
Créez un fichier htaccess
dans la racine du document et ajoutez la rewriteRule 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 500 Internel server.
J'espère que cela t'aides.
Cela fonctionne sur CentOS:
$ Sudo httpd -M |grep rewrite_module
Doit sortir rewrite_module (shared)
Si vous êtes dans le système Linux, vous pouvez vérifier tous les modules d'activation pour Apache2 (dans mon cas) dans le dossier suivant:/etc/Apache2/mods-available
cd /etc/Apache2/mods-available
taper: ll -a
si vous voulez vérifier les modules disponibles pour php (dans ce cas, php 7) folder /etc/php/7.0/mods-available
cd /etc/php/7.0/mods-available
taper: ll -a
Vous pouvez utiliser la fonction php
Apache_get_modules
et vérifiez mod_rewrite
<pre>
<?php
print_r(Apache_get_modules());
?>
</pre>
faites juste 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-vous capable de savoir 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 consultez ce tutoriel youtube étape par étape pour activer le module de réécriture dans wamp Apache https://youtu.be/xIspOX9FuVU?t=1m43s Icône du serveur Wamp -> Apache -> Apache Modules et cochez l'option de réécriture du module
Je sais que cette question est ancienne, mais si vous pouvez modifier votre fichier de configuration Apache en AllowOverride All
à partir de AllowOverride 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>
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 à partir de #
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 évite à quelqu'un le stress que j'ai vécu de trouver ce qui n'allait pas.
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";