Shopware 5.4.0 und 301 Weiterleitung mittels .htaccess

Redirect 301 /agb https://www.bogensehnen-shop.de/agb   

Hallo Gemeinde,

In Shopware 4 wird ja der Mischmodus von SSL deaktiviert. Der Guide empfiehlt die URLS mittels htaccess umleiten zu lassen.

Jetzt habe ich folgendes Problem:

In meiner .htaccess habe ich z.B. eingetragen:

Redirect 301 /agb https://www.bogensehnen-shop.de/agb   

Wenn ich jetzt die URL im Browser eingebe erhalte ich einen Umleitungsfehler, siehe: Umleitungsfehler

Hier der Inhalt meiner .htacces

RewriteEngine on
#RewriteBase /shopware/

# Https config for the backend
#RewriteCond %{HTTPS} !=on
#RewriteRule backend/(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule shopware.dll shopware.php
RewriteRule files/documents/.* engine [NC,L]
RewriteRule backend/media/(.*) media/$1 [NC,L]

RewriteCond %{REQUEST_URI} !(\/(engine|files|templates|themes|web)\/)
RewriteCond %{REQUEST_URI} !(\/media\/(archive|banner|image|music|pdf|unknown|video)\/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ shopware.php [PT,L,QSA]

# Fix missing authorization-header on fast_cgi installations
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Redirect 301 /agb https://www.bogensehnen-shop.de/agb




    # Block access to VCS directories
    RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

    # Restrict access to root folder files
    RedirectMatch 404 /(composer\.(json|lock)|README\.md|UPGRADE\.md)$


# Staging environment
#SetEnvIf Host "staging.test.shopware.in" SHOPWARE_ENV=staging

# Development environment
#SetEnvIf Host "dev.shopware.in" SHOPWARE_ENV=dev
#SetEnv SHOPWARE_ENV dev

DirectoryIndex index.html
DirectoryIndex index.php
DirectoryIndex shopware.php

# Disables download of configuration

    # Deny all requests from Apache 2.4+.
    
          Require all denied
    

    # Deny all requests from Apache 2.0-2.2.
    
        Deny from all
    


# Enable gzip compression

    AddOutputFilterByType DEFLATE text/html text/xml text/plain text/css text/javascript application/javascript application/json



    
        ExpiresActive on
        ExpiresDefault "access plus 1 month"
    

    
        Header append Cache-Control "public"
        Header unset ETag
    

    FileETag None


# Match generated files like:
# 1429684458_t22_s1.css
# 1429684458_t22_s1.js

    
        Header set Cache-Control "max-age=31536000, public"
    

    
        ExpiresActive on
        ExpiresDefault "access plus 1 year"
    


# Disables auto directory index

        Options -Indexes



    Options -MultiViews



# php_value memory_limit 256M
# php_value max_execution_time 120
# php_value upload_max_filesize 20M
   php_flag phar.readonly off
   php_flag magic_quotes_gpc off
   php_flag session.auto_start off
   php_flag suhosin.session.cryptua off
   php_flag zend.ze1_compatibility_mode off


# AddType x-mapp-php5 .php
# AddHandler x-mapp-php5 .php


    Header append X-Frame-Options SAMEORIGIN


RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [NC]
RewriteRule .* - [F]

php_flag log_errors on
php_value error_log /www/htdocs/w00eb488/shop_neu/shopware_test/shopware_frisch/shop_neu/backup/errors.log

Kann mir jemand helfen und sagen was ich falsch mache?=

Gruß

kweb

Nunja, du versuchst damit aktuell die Seite https://www.bogensehnen-shop.de/agb auf sich selbst umzuleiten, was in einer Schleife endet.
Deshalb der Fehler mit den “Too many redirects”.

Mit 

Redirect 301 /agb https://www.bogensehnen-shop.de/agb

leitest du alle URLs (egal welche Domain) mit dem Pfad /agb auf die genannte URL.
Diese trifft ja aber wieder auf den Redirect und wird wieder auf sich selbst weitergeleitet usw.

Wenn du von HTTP auf HTTPS weiterleiten möchtest, musst du dafür mod_rewrite verwenden.
Hier ein Beispiel in dem direkt www und non-www berücksichtigt wird: https://www.redim.de/wissen/automatische-weiterleitung-von-http-zu-https

Wahrscheinlich müsstest Du die Umleitung darauf einschränken, wenn die URL ohne HTTPS aufgerufen wird.

Google mal wie man generell http --> https in .htaccess umleitet. Und ggf. ohne www nach www.

Hi,

Aber was genau meint denn shopware dann hiermit?

Da steht ja man soll alle URLs in der htaccess umleiten lassen…oder verstehe ich das falsch?

Eine Umleitung von OHNE www zur mit WWW habe ich schon eingerichtet. Normalerweise dürfte doch jetzt mit dem Wegfall des Mischbetriebes automatisch jede Seite mit https angesprochen werden - sofern SSL aktiv ist?!

Was genau ist Dein Problem?

Shopware selbst wird mit 5.4 alle internen Links die zu Deinen AGB zeigen mit https:// erzeugen, es könnte aber natürlich sein dass es noch irgendwelche externen Links (zB. bei Google) gibt die auf die alte URL mit http:// zeigen, diese müssen auf https umgelenkt werden.

Du müsstest also http : //www.bogensehnen-shop.de/agb auf  https : //www.bogensehnen-shop.de/agb umleiten. Nicht  https : //www.bogensehnen-shop.de/agb auf  https : //www.bogensehnen-shop.de/agb - das geschieht gerade bei dieser Regel (und endet in einer Endlosscheife).

Im Allgemeinen gibt es Lösungen um per htaccess alle http:// URLs auf deren https:// Äquivalent umzuleiten, zB. hier beschrieben: .htaccess - Best Practice: 301 Redirect HTTP to HTTPS (Standard Domain) - Stack Overflow

Okay, das mit dem selbst auf sich weiterleiten habe ich verstanden.

Google hat ja beispielsweise diese URLs im Index:

Index Google

Nun soll es so sein, dass wenn diese Urls angeklickt werden, automatisch auf https umgeleitet wird, richtig?

Ich bin jetzt des englischen nicht 100pro mächtig, aber soviel wie ich von deinem Link hsoebbing verstehe sollte der Lösungsansatz der hier sein:

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

Ich weiss ja nicht ob ich der einzige bin, aber dafür dass man bei einem Update auf 5.4 sein SEO Ranking verlieren kann finde ich den Guide-Artikel doch recht karg zu diesem Thema. Es geht ja hier scheinbar um tausende von Euros die flöten gehen können.

kweb

Hallo,

ihr könnt euch einfach hier an diesen Artikel orientieren: https://community.shopware.com/Umleitung-aller-Aufrufe-auf-HTTPS-Domain_detail_1863.html

In der Regel reichen in der .htaccess Datei diese beiden neuen Zeilen:

RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Dann geht jeder Aufruf von http auf ein https per SEO-freundlicher 301 Weiterleitung

Sebastian

Hallo Sebastian,

danke das hat geklappt.

Ich kann nur empfehlen diese Lösung auch bei dem Update Guide zu hinterlegen.

LG kweb

Hi, ich nochmal.

Ich habe gleiche Lösung bei einem anderen Kunden versucht. Update auf 5.4.1 gemacht und hier das hier in die .htaccess gelegt.

RewriteEngine on
#RewriteBase /shopware/

# Https config for the backend
#RewriteCond %{HTTPS} !=on
#RewriteRule backend/(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule shopware.dll shopware.php
RewriteRule files/documents/.* engine [NC,L]
RewriteRule backend/media/(.*) media/$1 [NC,L]

RewriteCond %{REQUEST_URI} !(\/(engine|files|templates|themes|web)\/)
RewriteCond %{REQUEST_URI} !(\/media\/(archive|banner|image|music|pdf|unknown|video)\/)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ shopware.php [PT,L,QSA]

# Fix missing authorization-header on fast_cgi installations
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://schaefer-sport.de%{REQUEST_URI} [R=301,L,NE]



    # Block access to VCS directories
    RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

    # Restrict access to root folder files
    RedirectMatch 404 /(composer\.(json|lock)|README\.md|UPGRADE\.md)$


# Staging environment
#SetEnvIf Host "staging.test.shopware.in" SHOPWARE_ENV=staging

# Development environment
#SetEnvIf Host "dev.shopware.in" SHOPWARE_ENV=dev
#SetEnv SHOPWARE_ENV dev

DirectoryIndex index.html
DirectoryIndex index.php
DirectoryIndex shopware.php

# Disables download of configuration

    # Deny all requests from Apache 2.4+.
    
          Require all denied
    

    # Deny all requests from Apache 2.0-2.2.
    
        Deny from all
    


# Enable gzip compression

    AddOutputFilterByType DEFLATE text/html text/xml text/plain text/css text/javascript application/javascript application/json



    
        ExpiresActive on
        ExpiresDefault "access plus 1 month"
    

    
        Header append Cache-Control "public"
        Header unset ETag
    

    FileETag None


# Match generated files like:
# 1429684458_t22_s1.css
# 1429684458_t22_s1.js

    
        Header set Cache-Control "max-age=31536000, public"
    

    
        ExpiresActive on
        ExpiresDefault "access plus 1 year"
    


# Disables auto directory index

        Options -Indexes



    Options -MultiViews



# php_value memory_limit 256M
# php_value max_execution_time 120
# php_value upload_max_filesize 20M
   php_flag phar.readonly off
   php_flag magic_quotes_gpc off
   php_flag session.auto_start off
   php_flag suhosin.session.cryptua off
   php_flag zend.ze1_compatibility_mode off


# AddType x-mapp-php5 .php
# AddHandler x-mapp-php5 .php


    Header append X-Frame-Options SAMEORIGIN

Leider scheint es hier nicht zu funktionieren - ich verstehe jedoch wieso nicht. Wenn ich von einem Google Ergebnis ohne https weitergeleitet werden möchte, lädt die Seite trotzdem ohne das https://, siehe:

Link Google Ergebnisse

Warum funktioniert es jetzt bei dem einem Shop und bei dem anderen nicht? Beide haben die Hauptdomain auf mit WWW…

Verstehe es nicht.

LG
kweb

Hallo @kweb‍

deine htaccess tut genau das, was sie soll. 

Es ist auch vollkommen sinnfrei mitten in  der htaccess-Datei  „RewriteEngine on“ zu setzen, wenn dies schon am Anfang der htaccess steht. Apache hat ausführliche Dokumentationen über die Bearbeitungsreihenfolge von Anweisungen in htaccess-Dateien veröffentlicht, schau dir diese einmal an.

Der Redirect von http auf https muss als erstes in der htaccess stehen und wenn man kann, dann sollte dies schon direkt in der httpd-Datei bei den vHost-Konfigurationen erfolgen.