Ich versuche mod_rewrite zu verwenden, um bestimmte Seiten umzuleiten, um SSL zu verwenden. Dafür habe ich:mod_rewrite mit externem Redirect und internem Neuschreiben
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^/login(\.php)?$ [NC]
RewriteCond %{REQUEST_URI} !^/contact-us(\.php)?$ [NC]
RewriteCond %{REQUEST_URI} !^/\..*$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_URI} ^/login(\.php)?$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/contact-us(\.php)?$ [NC]
RewriteRule ^(.+)\.php$ https://www.example.com/$1 [R=301,L]
Dies funktioniert gut, und tut genau das, was ich will es tun.
Später in meinem .htacess Ich habe ein:
RewriteRule ^members/(.+)/change-password$ members/.change-password.php?item=$1 [NC,QSA,L]
Wenn also eine URL angezeigt wird, wie zum Beispiel:
http://www.example.com/members/foo-bar/change-password
Intern würde es als verarbeitet werden:
/members/.change-password.php?item=foo-bar
Wieder funktioniert das gut und macht das, was ich will.
Was ich jetzt tun muss, ist dies in meine ursprüngliche SSL-Redirect-Logik zu integrieren, um sicherzustellen, dass alle Change-Passwort-Anfragen auf dieselbe URL, aber über https umgeleitet werden. Ich habe versucht:
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^/login(\.php)?$ [NC]
RewriteCond %{REQUEST_URI} !^/contact-us(\.php)?$ [NC]
RewriteCond %{REQUEST_URI} !^/\..*$
RewriteCond %{REQUEST_URI} !^/members/.+/change-password [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_URI} ^/login(\.php)?$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/contact-us(\.php)?$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/members/.+/change-password [NC]
RewriteRule ^(.+)\.php$ https://www.example.com/$1 [R=301,L]
Aber das funktioniert nicht - ich bekomme nur die Seite über http geliefert. Das Ändern der .+
zu .*
scheint mich in eine permanente Umleitungsschleife zu setzen.
Ich vermute, das ist wegen der internen Neufassung, aber egal was ich versuche, ich kann nicht scheinen, es zu lösen.
Kann jemand bitte beraten?
Danke,
Adam M.
Verlassen Sie sich nicht auf automatische Umleitungen, stellen Sie sicher, dass Ihre Links zu diesen Abschnitten 'https: //' verwenden. (Siehe [diese Antwort] (http://webmasters.stackexchange.com/a/28443/11628) und [diese Antwort] (http://stackoverflow.com/a/9105894/372643) für Details.) – Bruno
@Bruno Danke für die Antwort aber Links im Frontend sind direkt auf https angegeben. Der Grund für die automatische Umleitung ist Gürtel und Hosenträger für diejenigen, die die URL selbst eingeben. Während ich '[F]' eine nicht https Anfrage für die URL, die nicht die Benutzererfahrung bieten würde, die ich suche (obwohl ich sicher bin, nicht jeder würde diesem Ansatz zustimmen). –
Solange Sie nicht davon ausgehen, dass diese Weiterleitungen bei der Entwicklung Ihrer Anwendung vorhanden sind, macht Ihr Ansatz tatsächlich Sinn. – Bruno