Warum funktionieren .htaccess-Weiterleitungen in http, aber nicht mit https?


10

Ich habe eine einfache .htaccess-Datei, die auf der http-Version der Website hervorragend funktioniert, aber nicht, wenn ich zu https gehe. Warum?

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]

Antworten:


20

Es gibt hier nicht 100% genug Informationen, um fortzufahren, aber im üblichen Standard-SSL-Setup (z. B. Red Hat / CentOS / Fedora) wird der VirtualHost für SSL in einem eigenen Container eingerichtet. Für die Verwendung von mod_rewrite muss mindestens "AllowOverride FileInfo" im Dokumentstamm festgelegt sein, damit es funktioniert.

Überprüfen Sie Ihre Konfiguration auf SSL (standardmäßig /etc/httpd/conf.d/ssl.conf) und stellen Sie sicher, dass sie ungefähr so ​​aussieht:

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

Die Standardeinstellung für AllowOverride ist "Keine". Daher ist jede andere Einstellung (z. B. "Alle"), mit der FileInfo-Funktionen hinzugefügt werden, in Ordnung.

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


1
Ich kann /etc/httpd/conf.d/ssl.conf in meinem Linux nicht sehen. Wie finde ich es?
Ashok KS

1
(1) Möglicherweise müssen Sie nach der conf-Datei suchen. Auf einigen Systemen ist es beispielsweise /etc/apache2/sites-enabled/default-ssl.conf(2) Um ganz klar zu sein, wenn Sie immer noch Probleme haben, versuchen Sie es AllowOverride Allstattdessen AllowOverride FileInfo. Sobald Sie es zum Laufen gebracht haben, können Sie die Apache- AllowOverideDokumente im Detail lesen , um den Zugriff genauer zu beschränken und die Sicherheit zu maximieren. (3) Denken Sie daran, dass Sie Apache neu starten müssen, damit die Einstellungen wirksam werden.
SilentSteel

4

Könnte es sein, dass mod_rewrite für den HTTPS-Server nicht aktiviert ist oder dass .htaccess nicht verwendet wird?

Überprüfen Sie die AllowOveridefür die reguläre Site verwendeten Berechtigungen und vergleichen Sie sie mit der SSL-Version, wahrscheinlich eine Diskrepanz. Wahrscheinlich eingeführt, um die Sicherheit zu verbessern, wenn nicht sogar ein Unfall.

mod_rewrite ist jedoch so gut wie unerlässlich, daher sollte jeder anständige Hosting-Anbieter helfen, dies zu klären.


1

"Arbeiten an Apache2 + Ubuntu präzise"

Ein ähnliches Problem trat bei mir auf, als ich das Slim-Framework verwendete und versuchte, die in der URL erforderliche index.php zu entfernen. Das Umschreiben funktionierte perfekt für http, aber für https: Es wurde eine nicht gefundene URL angezeigt, was bedeutete, dass das Umschreiben nicht funktionierte.

Nach einigen Versuchen habe ich folgende Lösung gefunden:

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

Ändern Sie AllowOverride None in All . Ähnlich sudo vim ssl


0

Ich hatte ein ähnliches Problem, das hat bei mir funktioniert.

Stellen Sie in Ihrer httpd.conf sicher, dass Sie beide haben:

Servername domain.com

ServerAlias ​​www.domain.com

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.