.htaccess url rewrite mit ssl-Umleitung
Ich habe Probleme bei der Kombination von einer url-query-parameter umschreiben (fancy-url) mit ein .htaccess ssl-Umleitung.
Meine .htaccess-Datei aktuell ist:
Options +FollowSymLinks
Options -Indexes
ServerSignature Off
RewriteEngine on
RewriteBase /
# in https: process secure.html in https
RewriteCond %{server_port} =443
RewriteCond $1 ^secure$ [NC]
RewriteRule ^(.+).html$ index.php?page=$1 [QSA,L]
# in https: force all other pages to http
RewriteCond %{server_port} =443
RewriteCond $1 !^secure$ [NC]
RewriteRule ^(.+).html$ http://%{HTTP_HOST}%{REQUEST_URI} [QSA,N]
# in http: force secure.html to https
RewriteCond %{server_port} !=443
RewriteCond $1 ^secure$ [NC]
RewriteRule ^(.+).html$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,N]
# in http: process other pages as http
RewriteCond %{server_port} !=443
RewriteCond $1 !^secure$ [NC]
RewriteRule ^(.+).html$ index.php?page=$1 [QSA,L]
Fancy-url-rewriting ist in Ordnung, aber die Umleitung nach/von https funktioniert nicht bei allen.
Wenn ich ersetzen Sie die 2 Zeilen mit
RewriteRule ^(.+).html$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,N]
mit
RewriteRule ^(.+).html$ https://%{HTTP_HOST}/index.php?page=$1 [QSA,L]
dann die https-Umleitung funktioniert gut, aber die fancy-url-rewriting nicht funktioniert.
Ist es möglich, kombinieren Sie diese beiden?
Edit:
Die gewünschten Ergebnisse sind:
1. http://domain.com/secure.html is rewritten to https://domain.com/index.php?page=secure
2. http://domain.com/foo.html is rewritten to http://domain.com/index.php?page=foo
3. https://domain.com/secure.html is rewritten to https://domain.com/index.php?page=secure
4. https://domain.com/foo.html is rewritten to http://domain.com/index.php?page=foo
(Ich musste Sie in einen code-block als mehr als 1 link ist nicht erlaubt, für neue Benutzer)
So secure.html ist immer https, während foo.html (alle anderen Seiten) sind immer http.
Lösung:
Dank Gumbo, die Lösung ist:
Options +FollowSymLinks
Options -Indexes
ServerSignature Off
RewriteEngine on
RewriteBase /
# in https: force all other pages to http
RewriteCond %{server_port} =443
RewriteCond $1 !^secure$ [NC]
RewriteRule ^(.+)\.html$ http://%{HTTP_HOST}%{REQUEST_URI} [QSA,N]
# in http: force secure.html to https
RewriteCond %{server_port} !=443
RewriteCond $1 ^secure$ [NC]
RewriteRule ^(.+)\.html$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,N]
# in https: process secure.html in https
RewriteCond %{server_port} =443
RewriteCond $1 ^secure$ [NC]
RewriteRule ^(.+)\.html$ index.php?page=$1 [QSA,L]
# in http: process other pages as http
RewriteCond %{server_port} !=443
RewriteCond $1 !^secure$ [NC]
RewriteRule ^(.+)\.html$ index.php?page=$1 [QSA,L]
- Können Sie ein Beispiel geben, was hast du erwartet, dass passiert und was ist eigentlich passiert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Regel, dass eine externe Umleitung, bevor diejenigen Vorschriften, die nur dazu führen, eine interne Weiterleitung. Also:
Dass ist nicht der richtige Weg, das zu erkennen, was der server-port ist, sollte Sie den gleichen Regeln wie http_host mit
^443$
und!^443
beziehungsweise. Sie sollte wirklich profitieren server_port als gut, es ist eine gute Praxis. Hier ist ein gutes kleines tutorial, die Ihnen helfen könnten, aus.=443
und^443$
sind semantisch identisch. Die erstere ist nur eine lexikographische (Gleichheit) Vergleich während die letzteren ist ein regulärer Ausdruck-Vergleich.