Zur Navigation

htaccess Anweisung für Umwandlung von Großbuchstaben in Kleinbuchstaben

1 sim

Hallo Jörg,

ich habe eine Frage zur Umwandlung „suchmaschinenfreundlicher“ URL‘s .

Die aktuellen bereits umgewandelten Domains sehen so aus:

https://www.domain.tld/Seite1
https://www.domain.tld/Seite2
https://www.domain.tld/Seite3#Ankerlink
https://www.domain.tld/Seite4
https://www.domain.tld/Seite5

Wie zu sehen ist, beginnen hinter dem ersten Slash sowohl die jetzigen URL‘s, als auch die Ankerlinks mit einem Großbuchstaben.

Nun sollen die Anfangsbuchstaben permanent in Kleinbuchstaben umgewandelt werden.

Es funktioniert nun zwar mit den folgenden Anweisungen:

RewriteEngine On
RewriteBase /

Redirect 301 /Seite1 http://www.domain.tld/seite1
RewriteCond %{THE_REQUEST} \ /seite1\.php
RewriteRule ^seite1\.php$ http://www.domain.tld/seite1? [R=301,L]
RewriteRule ^seite1$ seite1.php

usw. mit Seite2 bis Seite 5…

Es kommt mir aber irgendwie ziemlich umständlich vor.
Gibt es vielleicht eine einfachere Möglichkeit die Großbuchstaben in Kleinbuchstaben umzuwandeln?

Falls wichtig?
Es gibt keinen Root-Zugriff für den Server.

Viele Grüße

19.05.2018 17:51

2 sim

Hallo Jörg,

ich habe ganz vergessen zu berichten, dass die aktuellen bereits umgewandelten Domains auch schon seit über einem Jahr im Index der Suchmaschinen auftauchen und damals nicht mit einer permanenten Weiterleitung versehen wurden.

Somit war auch doppelter Content gleich einmal garantiert.

Viele Grüße

19.05.2018 19:52

3 Jörg

Es gibt keinen Root-Zugriff für den Server.

Ja, damit fallen Lösungen mit RewriteMap schonmal aus

Eine Möglichkeit wäre es vielleicht, auf ein Redirect-Script zu rewriten.

RewriteRule ^[A-Z] redirect.php [L]

In PHP könnte man z.B. $_SERVER['REQUEST_URI'] mit strtolower() bearbeiten und dann mit header() entsprechend mit Status Code 301 weiterleiten.

Den Anker kann man serverseitig nicht weiterleiten, den behält der Browser für sich, um zu wissen, wohin er nach Aufbau der Seite springen muss.

19.05.2018 21:21 | geändert: 19.05.2018 21:26

4 sim

Hallo Jörg,

ja, das habe ich schon vermutet.

Ist denn mein Ansatz:

Redirect 301 /Seite1 http://www.domain.tld/seite1
RewriteCond %{THE_REQUEST} \ /seite1\.php
RewriteRule ^seite1\.php$ http://www.domain.tld/seite1? [R=301,L]
RewriteRule ^seite1$ seite1.php

gar nicht Lösungsorientiert?

WIe Sieht es mit diesem Ansatz aus (gefunden bei www.df.eu):

htaccess

# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
# ensure it is not a file on the drive first
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]

PHP

<?php
if(isset($_GET['rewrite-strtolower-url'])) {
    $url = $_GET['rewrite-strtolower-url'];
    unset($_GET['rewrite-strtolower-url']);
    $params = http_build_query($_GET);
    if(strlen($params)) {
        $params = '?' . $params;
    }
    header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
    exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');

Sieht zwar irgendwie auf den ersten Blick praktikabel aus, allerdings sieht es auch danach aus als würde man mit Kanonen auf Spatzen schießen!?

Viele Grüße

[Edit Jörg: zur besseren Lesbarkeit Code-Tags eingefügt]

19.05.2018 22:07 | geändert von Jörg: 20.05.2018 13:53

5 Jörg

Sieht zwar irgendwie auf den ersten Blick praktikabel aus, allerdings sieht es auch danach aus als würde man mit Kanonen auf Spatzen schießen!?

Inwiefern? du kannst mit den paar Codezeilen pauschal alle URLs abhandeln, die einen Großbuchstaben beinhalten. Die .htaccess Datei bleibt so relativ schlank, und die PHP-Datei wird nur aufgerufen, wenn weitergeleitet werden muss. Bei letzteren gibt es vielleicht einen kleinen Performance-Nachteil, aber der ist denke ich zu vernachlässigen.

Vorteil ist aber v.a., dass du einen geringeren Wartungsaufwand hast.

20.05.2018 14:00 | geändert: 20.05.2018 14:01

6 sim

Hallo Jörg,

Du hast vollkommen Recht, denn es funktioniert einwandfrei und ich bin auch nicht dem Millisekunden-Speed-Wahn verfallen, der unter anderem durch den Speed-Test (PageSpeed Insights) von Google angefacht wird.
Man sieht aber auch an meinem Beispiel, wie wichtig es ist, von vorneherein darüber nachzudenken, wie eine "suchmaschinenfreundliche URL" auszusehen hat.

Nutzern ohne fortgeschrittene PHP-Kentnisse könnte man zum Abschluss noch zu dem oben gezeigten Script mit auf den Weg geben, dass man in dem (header zwischen den Anführungsstrichen) nach der letzten Klammer die Adresse zu einer selbstgestalteten Fehlerseite unterbringen kann.
Die letzte Scriptzeile kann einfach entfernt werden.

Kompliment zu Deinem Forum, Du bist stets sehr präsent und ich bin froh, dass es Dein Forum gibt.

Viele Grüße

P.S.: Ich werde das nächste Mal daran denken den "Code" Tag zu verwenden, so dass Scriptteile hervorgehoben werden.
Versprochen! ;-)

22.05.2018 23:57

Beitrag schreiben (als Gast)





[BBCode-Hilfe]