Pourquoi les redirections .htaccess fonctionnent-elles en http mais pas avec https?

10

J'ai un simple fichier .htaccess qui fonctionne très bien sur la version http du site mais pas quand je vais sur https. Pourquoi?

RewriteEngine on
#This is so if the file exists then use the file
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ %{REQUEST_FILENAME} [L]

#These conditions check if a file or folder exists just for reference
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d

#if someone adds ".php" to the slug get rid of it
RewriteRule ^(.*)\.php$ $1  

#don't add the [R] here because we don't want it to redirect
RewriteRule ^(.*)$ index.php?id=$1 [L,QSA]
Sheldon McGee
la source

Réponses:

20

Il n'y a pas 100% d'informations suffisantes ici, mais dans la configuration SSL par défaut habituelle (Red Hat / CentOS / Fedora par exemple), VirtualHost pour SSL est installé dans son propre conteneur. L'utilisation de mod_rewrite nécessite au minimum "AllowOverride FileInfo" d'être défini sur la racine du document pour qu'il agisse.

Vérifiez votre configuration pour SSL (/etc/httpd/conf.d/ssl.conf par défaut), assurez-vous qu'il ressemble à quelque chose comme:

DocumentRoot /var/www/html
<Directory /var/www/html>
  AllowOverride FileInfo
</Directory>

La valeur par défaut pour AllowOverride est «Aucun», donc tout autre paramètre (tel que «Tous») qui ajoute des capacités FileInfo est OK.

http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride


la source
1
Je ne vois pas /etc/httpd/conf.d/ssl.conf dans mon linux, comment le trouver?
Ashok KS
1
(1) Vous devrez peut-être rechercher le fichier conf. Par exemple, sur certains systèmes, c'est /etc/apache2/sites-enabled/default-ssl.conf(2) Pour être très clair, si vous rencontrez toujours des problèmes, essayez AllowOverride Allplutôt que AllowOverride FileInfo. Une fois que vous l'avez fait fonctionner, vous pouvez lire les AllowOveridedocuments Apache en détail pour limiter l'accès plus spécifiquement pour maximiser la sécurité. (3) N'oubliez pas que vous devez redémarrer apache pour que les paramètres prennent effet.
SilentSteel
4

Serait-il possible que mod_rewrite ne soit pas activé pour le serveur HTTPS ou que le .htaccess ne soit pas utilisé?

Vérifiez les AllowOverideautorisations en cours d'utilisation pour le site normal et comparez-les à la version SSL, probablement une différence. Probablement introduit pour améliorer la sécurité, sinon un accident.

mod_rewrite est à côté de l'essentiel, donc tout hébergeur décent devrait aider à résoudre ce problème.

Orbling
la source
1

"travailler sur apache2 + ubuntu précis"

Un problème similaire s'est produit lors de l'utilisation du framework Slim et de la suppression du fichier index.php requis dans l'url. La réécriture fonctionnait parfaitement pour http mais pour https: elle montrait une URL non trouvée, ce qui signifiait que la réécriture ne fonctionnait pas.

Après quelques hit-n-trial, j'ai trouvé cette solution:

 cd /etc/apache2/sites-enabled
 sudo vim default-ssl

Remplacez AllowOverride None par All . De même sudo vim ssl

mareenator
la source
0

J'ai eu un problème similaire, c'est ce qui a fonctionné pour moi.

Dans votre httpd.conf, assurez-vous d'avoir les deux:

ServerName domain.com

ServerAlias ​​www.domain.com

Yoni Hassin
la source