Warum ist Apache Permanent Redirect entfernen der slash zwischen domain und Pfad?
Ich bin mit Apache 2.4, und habe ich zwei virtuelle Verzeichnisse. Eine SSL erfordert, und der andere leitet es.
Wenn ein Benutzer versucht, besuchen https://www.derp.com/derp
ohne /derp vorhanden, Sie korrekt ein 404. Aber wenn ein Benutzer besucht http://www.derp.com/derp
Apache falsch leitet den Benutzer zu https://www.derp.comderp
entfernen des slash zwischen Pfad und der domain-name.
Ich habe keine Ahnung, was wäre die Ursache sein.
Im folgenden ist der setup der Virtuellen Hosts.
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName www.derp.com
ServerAlias derp.com
DocumentRoot "C:\Users\derp\Documents\Web Projects\derp"
SSLEngine on
SSLCertificateFile "C:\Apache24\certs\cert.cer"
SSLCertificateKeyFile "C:\Apache24\certs\key.key"
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.derp.com
ServerAlias derp.com
Redirect permanent /https://www.derp.com/
</VirtualHost>
<Directory "C:\Users\derp\Documents\Web Projects\derp">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
SSLRequireSSL
</Directory>
Warum sollte Apache benimmt man sich so?
Bonus-Frage: Sollten Weiterleitungen behandelt werden in meiner virtuellen host-definition benutzen, oder sollte Sie abgewickelt werden .htaccess-Datei in der web-site der physischen Verzeichnis?
Edit:
Fange ich ein Laravel Projekt, und standardmäßig werden öffentliche Ordner enthält .htaccess-Datei, also hier ist, dass guy:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Edit Zwei:
Habe ich versucht:
- hinzufügen von einem Schrägstrich am Ende der DirectoryRoot Pfad
- ersetzt backslashes durch forward slashes in der DirectoryRoot Pfad
- ersetzt backslashes durch doppelte umgekehrte Schrägstriche in die DirectoryRoot Pfad
Ich auch entfernt .htaccess-Datei aus dem Verzeichnis komplett.
Leitet es korrekt, wenn man von http://www.derp.com
zu https://www.derp.com
. Es ist nur, wenn Sie einen Pfad angeben und versuchen, https, dass es entfernt den slash zwischen domain und Pfad.
Edit Drei:
Ich auch versucht, den folgenden Vorschlag:
Redirect permanent /https://www.derp.com/ Try RedirectMatch permanent /(.*) https://www.derp.com/$1 or RedirectMatch permanent (.*) https://www.derp.com/$1
... und statt der Umleitung zu https://www.derp.comderp, es stattdessen nicht umleiten, versuche und gibt einen 404 für http://www.derp.com/derp, aber mit Apache ' s 404, statt zu werfen Nicht Gefunden Ausnahme, wie Laravel funktioniert ohne Konfiguration.
Edit Vier:
Habe ich auch schon versucht:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
In der .htaccess-Datei und das Verhalten nicht ändern werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es.
Sich das Problem nicht legen, mit dem umschreiben an alle, es war der SSLRequireSSL Richtlinie unter meinem Verzeichnis definition, war das problem verursacht.
Habe ich einfach entfernt, diese Richtlinie aktualisiert die cache-in allen meinen Browsern, und die Seite dann weiter, um korrekt zu arbeiten. Dies wurde entdeckt durch den Prozess der Beseitigung.
Die Dokumentation-Hinweise:
Liegt der Schwerpunkt meiner eigenen. SSLRequireSSL kann Apache nur eine 403 oder 404, wenn HTTP über SSL ist nicht aktiviert, sich mit der rewrite-Regel. Eine rewrite-Regel wie in diese Antwort auf dem Server Schuld kann eine bessere alternative sein, je nach Ihrem Anwendungsfall:
Mein Problem wurde für das browser-caching.
Versuchte ich es in einem anderen browser und es funktionierte, und dann wieder versucht in einer privaten Sitzung in der ersten browser und es auch funktioniert.