2016-07-28 11 views
1

Ich möchte alle eingehenden URLs auf meine Website zu einer einzigen URL für Kanonisierungszwecke umleiten.Apache Mod Schreibe alle eingehenden URLs auf https: // www

Nach Redirect Bedingungen sollten

  1. http://example.com->https://www.example.com
  2. http://www.example.com treffen ->https://www.example.com
  3. https://example.com ->https://www.example.com
  4. www.example.com ->https://www.example.com

Mein aktueller Rewrite-Regeln in httpd.conf Blick geschrieben, wie

folgt
RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

Mit den oben genannten Regeln ich in der Lage bin der 1., 2. und 4. Regel zu erreichen, aber 3. für mich nicht funktioniert. Alle Vorschläge sind willkommen.

+1

In meinem es Prüfung ist auch für die 3. Fall arbeiten. Stellen Sie sicher, den Browser-Cache zu löschen. – anubhava

+0

@anubhava 3. Fall funktioniert nicht für mich auch nach dem Löschen des Browser-Cache. – Amardeep

+0

@anubhava Können Sie bitte die aktualisierten Regeln für mich auch testen. – Amardeep

Antwort

0

Wenn Sie sich über die Kanonisierung für SEO Zwecke reden, dann sollten Sie auch diese Meta-Tag auf den Kopf-Abschnitt Ihrer Web-Seiten hinzufügen:

<link rel="canonical" href="https://www.example.com/" /> 

Was dies bedeutet sagen Suchmaschinen ist, dass, was auch immer url verwendet wurde Um diese Seite zu erreichen, ist dies die bevorzugte URL und diejenige, die indiziert werden soll.

+0

Haben Sie das schon.Danke für Ihre Vorschläge sowieso. – Amardeep

1

Die Definition der HTTPS- und HTTP-Version Ihrer Site muss (?) Unter verschiedenen VirtualHost-Einträgen erscheinen (außer Sie verwenden einen Proxy vor httpd).

Dies macht es leicht, Unterschiede zwischen den Konfigurationen in den beiden virtuellen Hosts zu erhalten. Stellen Sie sicher, dass die Konfiguration für die Umleitung ist das gleiche in beiden Virtual für Port 80 und Port 443

Der einfachste Weg, dies zu tun, ist die Verwendung einer Include Aussage zu machen und eine gemeinsame Datei in den beiden Virtualhost Definitionen Referenz

Zum Beispiel setzen diese Neufassungen in einer Datei base-rewrite.inc im Stamm Config dorectory (/etc/apache2/base-rewrite.inc in debian/ubuntu, /etc/httpd/base-rewrite.inc in Redhat):

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

Dann in Ihrer virtuellen Hosts Definition Include diese Datei:

<VirtualHost *:80> 
    # HTTP default virtualhost 
    ServerName www.example.com 
    DocumentRoot /var/www/html/ 

    Include base-rewrite.inc 
</VirtualHost> 

<VirtualHost *:443> 
    # HTTPS default virtualhost 
    ServerName www.example.com 
    DocumentRoot /var/www/html/ 

    # An example SSL config, but use your certificate files 
    SSLEngine on 
    SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem 
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 

    Include base-rewrite.inc 
</VirtualHost> 

Dies wird die Neufassungen konsistent halten und macht es einfach, sie alle auf einmal zu halten und ändern

+0

Ich bin selbst zur Lösung gelaufen, und diese Antwort ist meinem speziellen Fall sehr ähnlich: Hosting bei webfaction gibt es separate Website-Konfigurationen für HTTP und HTTPS, beide benötigen die gleiche .htaccess, wie Sie hier vorschlagen. – webtweakers

Verwandte Themen