.htaccess ne fonctionne pas apache

135

J'ai un serveur du service AWS EC2 fonctionnant sous Linux ubuntu et j'ai installé apache, php et mysql.

J'ai ajouté un .htaccessfichier à la racine de mon document /var/www/html.

J'y ai entré ce code: ErrorDocument 404 /var/www/html/404.phpet il n'apparaît toujours pas.

J'ai gardé entré cette commande plusieurs fois: sudo service httpd restartpour redémarrer le serveur mais aucun changement n'est affiché ...

Comment puis-je résoudre ce problème ... Ai-je fait quelque chose de mal?

Merci d'avance!

Shalin Shah
la source
2
Voulez-vous vraiment mapper l' 400 Bad Requesterreur à /var/www/html/404.php?
Jon Lin

Réponses:

288

Tout d'abord, notez que le redémarrage de httpd n'est pas nécessaire pour les fichiers .htaccess. Les fichiers .htaccess sont spécifiquement destinés aux personnes qui n'ont pas de racine, c'est-à-dire qui n'ont pas accès au fichier de configuration du serveur httpd et ne peuvent pas redémarrer le serveur. Comme vous pouvez redémarrer le serveur, vous n'avez pas besoin de fichiers .htaccess et pouvez utiliser directement la configuration du serveur principal.

Deuxièmement, si les fichiers .htaccess sont ignorés, vous devez vérifier que AllowOverride est correctement défini. Voir http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride pour plus de détails. Vous devez également vous assurer qu'il est défini dans la bonne portée, c'est-à-dire dans le bon bloc de votre configuration. Assurez-vous de NE PAS modifier celui du bloc, par exemple.

Troisièmement, si vous voulez vous assurer qu'un fichier .htaccess est bien lu, mettez-y des déchets. Une ligne non valide, telle que "INVALID LINE HERE", dans votre fichier .htaccess, entraînera une erreur de serveur 500 lorsque vous pointez votre navigateur vers le répertoire contenant ce fichier. Si ce n'est pas le cas, cela signifie que AllowOverride n'est pas configuré correctement.

Rich Bowen
la source
141
+1 pour mettre des déchets dans le fichier .htaccess comme outil de diagnostic.
retrohacker
46
Les ordures dans la programmation sont plus utiles qu'il n'y paraît.
EnKrypt
1
J'ai mis "A STRING" dans mon .htaccess, donc je recevrais une erreur, alors j'ai mis le AllowOverride Alltout apache2.confdans mon Debian et ça marche
Alex
1
Notez que cela AllowOverridene fonctionne que dans les <Directory>directives et sera ignoré s'il est placé dans une <Location ...>section, voir: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski
2
Notez également que la <Directory>directive attend un chemin absolu au lieu de relatif. Dans mon cas, a <Directory /> échoué tout en <Directory /var/www/html/subdir>travaillant.
Lukas Knuth
115
  1. Activer le module Apache mod_rewrite

    a2enmod rewrite

  2. ajoutez le code suivant à /etc/apache2/sites-available/default

    AllowOverride All

  3. Redémarrez Apache

    /etc/init.d/apache2 restart

Sijo Thomas Maprayil
la source
7
notez que dans Apache 2.4, les fichiers de configuration sous / etc / apache2 / sites-available doivent se terminer par .conf maintenant. Et j'ai eu une confusion sur mon serveur avec un default.conf dans / etc / apache2 / sites-available et un dans / etc / apache2 /
rubo77
2
Merci, dans mon cas, la réécriture n'était pas activée par défaut dans apache2
Cross
je suis déjà ces étapes mais cela ne fonctionne pas dans apache 2.4 ce que je fais mal = [
Luciano Andress Martini
On dirait que les remplacements d'ip requis nécessitent une authentification, ce comportement est inattendu (autoriser de certaines ip dans apache 2.2 ne le faites pas) et à mon avis peut être très dangereux, car l'exception d'ip annule l'authentification, dans apache 2.2, ce sont des choses complètement différentes !
Luciano Andress Martini
J'ai omis la première étape mais j'ai changé AllowOverride en All dans mon apache.conf (Debian 8, /etc/apache2/apache.conf), redémarré et les fichiers ne sont pas accessibles, bien. Mais l'erreur n'est pas comme une autorisation refusée mais une erreur de serveur interne 500, pourquoi? Puis-je le réparer?
dasLort
44

Si vous avez essayé tout ce qui précède, qui sont toutes des réponses valides et bonnes, et que votre fichier htaccess ne fonctionne pas ou est en cours de lecture, modifiez la directive dans le apache2.conffichier. Sous Ubuntu, le chemin est/etc/apache2/apache2.conf

Modifiez la <Directory>directive pointant vers vos pages Web publiques, où réside le fichier htaccess. Changer de AllowOverride NoneàAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

J'ai eu le même problème et j'ai trouvé la réponse et l'explication sur Ubuntu Ask! forum /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working

user1946891
la source
2
Ou, il peut être ajouté sur le VHost
ssi-anik
En fait, seule la AllowOverride FileInfotroisième ligne est requise pour que le .htaccessfichier soit lu et utilisé. Allpermet également des remplacements de configuration supplémentaires, tels que .httpasswd(qui peut être activé individuellement en utilisant Authconfigau lieu de All).
Rafal le
20

Pour Ubuntu,
exécutez d'abord cette commande: -

sudo a2enmod rewrite

Ensuite, éditez le fichier en /etc/apache2/sites-available/000-default.confutilisant nano ou vim en utilisant cette commande: -

sudo nano /etc/apache2/sites-available/000-default.conf

Ensuite, dans le 000-default.conffichier, ajoutez ceci après la ligne DocumentRoot /var/www/html. Si votre répertoire racine html est autre chose, écrivez-le: -

<Directory "/var/www/html">
  AllowOverride All
</Directory>

Après avoir tout fait, redémarrez apache en utilisant la commande sudo service apache2 restart

Deval Khandelwal
la source
6

Suivez simplement 3 étapes

  1. Activez mode_rewrite à l'aide de la commande suivante

    réécriture sudo a2enmod

Le mot de passe sera demandé. Alors entrez votre mot de passe

  1. Mettez à jour votre fichier 000-default.conf ou default.conf situé dans le répertoire / etc / apache2 / sites-available / . vous ne pouvez pas le modifier directement. alors utilisez la commande suivante pour ouvrir

    sudo gedit /etc/apache2/sites-available/000-default.conf

Ou sudo gedit /etc/apache2/sites-available/default.conf

tu auras

DocumentRoot / var / www / html

OU

DocumentRoot / var / www

ligne. Ajoutez le code suivant après.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Faites en sorte que le chemin de la balise de répertoire soit le même que celui indiqué dans votre fichier.

  1. Redémarrez votre serveur Apache en utilisant la commande suivante

    redémarrage du service sudo apache2

Rameshwer Dhanora
la source
Merci. Salutations du Brésil.
Fox
5

Très probablement, AllowOverride est défini sur Aucun. dans la section Répertoire de apache2.conf située dans le dossier / etc / apache2

Essayez de le définir sur AllowOverride All

KawaiKx
la source
5

D'après mon expérience, la directive / var / www / directory empêche les directives virtualhost de sous-dossier. Donc, si vous avez essayé toutes les suggestions et que vous ne travaillez toujours pas et que vous utilisez des hôtes virtuels, essayez ceci;

1 - Assurez-vous d'avoir une AllowOverride Alldirective /etc/apache2/sites-available/example.com.conf

2 - Vérifiez les directives / var / www / Directory dans /etc/apache2/apache2.conf(éventuellement à la ligne 164), qui ressemble à;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

S'il y a une AllowOverride Nonedirective, changez-la en AllowOverride All ou simplement en ligne d'échappement

Erdinç Çorbacı
la source
3

Par défaut, Apache interdit l'utilisation d'un fichier .htaccess pour appliquer des règles de réécriture, donc

Étape 1 - Activation de mod_rewrite (s'il n'est pas activé) Tout d'abord, nous devons activer mod_rewrite. Il est disponible mais pas activé avec une installation Apache 2 propre.

$ sudo a2enmod rewrite

Cela activera le module ou vous avertira que le module est déjà activé. Pour appliquer ces modifications, redémarrez Apache.

$ sudo systemctl restart apache2

mod_rewrite est maintenant entièrement activé. Dans la prochaine étape, nous allons configurer un fichier .htaccess que nous utiliserons pour définir les règles de réécriture pour les redirections.

Étape 2 - Configuration de .htaccess Ouvrez le fichier de configuration Apache par défaut à l'aide de nano ou de votre éditeur de texte préféré.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Dans ce fichier, vous trouverez un bloc commençant sur la première ligne. À l'intérieur de ce bloc, ajoutez le nouveau bloc suivant pour que votre fichier de configuration ressemble à ce qui suit. Assurez-vous que tous les blocs sont correctement indentés.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Enregistrez et fermez le fichier. Pour appliquer ces modifications, redémarrez Apache.

$ sudo systemctl restart apache2

Terminé. Votre .htacess devrait fonctionner. Ce lien peut en fait aider quelqu'un https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

Abayomi Israël
la source
La commande de redémarrage qui a fonctionné pour moi est $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg
3

J'ai autorisé cette utilisation. En utilisant ce site, cliquez ici , suivez les étapes, les mêmes étapes suivent jusqu'à la version 18.04 d'ubuntu

Raghul SK
la source
1

Dans l' WampServericône Open WampServer Tray ----> Apache ---> Apache Modules ---> rewrite_module

Buru
la source
0

utilisez RewriteBase / {votre dossier} / sur votre .htaccess

miftah al rasyid
la source
0

Par souci d'exhaustivité, si "AllowOverride All" ne résout pas votre problème, vous pouvez le déboguer en utilisant:

  1. Exécutez apachectl -Set voyez si vous avez plus d'un nom d'hôte. Il se peut que httpd recherche .htaccess d'un autre DocumentRoot.

  2. Utilisez strace -f apachectl -Xet recherchez où il charge (ou ne charge pas) .htaccess.

gilm
la source