Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ModRewrite: Wie Weiterleitung von ".html" auf "/"? (https://www.delphipraxis.net/128521-modrewrite-wie-weiterleitung-von-html-auf.html)

Matze 31. Jan 2009 14:34


ModRewrite: Wie Weiterleitung von ".html" auf &quo
 
Hi zusammen,

ich verzweifle wieder mal vor diesen regulären Ausdrücken bzw. mit .htaccess allgemein.

Ich habe eine URL wie http://domain.tld/.../category/id1/name.html, die ich weiterleiten möchte auf http://domain.tld/index.php?page=category&id=1.

Mein Versuch war neben unzähligen anderen folgender:

Code:
RewriteCond %{REQUEST_URI} ^(.*)/category/id([0-9]+)/(.*)\.html$ [NC]
RewriteRule . index.php?page=category&id=$2 [R=301,L]
Doch das leitet mir auf URLs weiter, in denen der absolute Serverpfad steckt und ähnliches. Eigentlich muss ich die URL oben auch nicht in 3 Variablen "zerlegen", da reicht mir die ID.

Ich möchte, dass die alte URL von Google & Co. verschwindet. Die neuen, die ich auf der Website anzeige haben das Format: http://domain.tld/.../category/id1/name/.
Diese leite ich in der .htaccess-Datei auf die korrekten Dateien weiter, weshalb ich diesen Pfad vermutlich nicht oben als Ziel angeben kann. Schön wäre natürlich, wenn das ginge und direkt auf den neuen Pfad weitergeleitet wird, sodass in der Adresszeile auch der neue beim Aufruf des alten steht.

Wie mache ich es richtig?

Grüße, Matze

Micha88 31. Jan 2009 15:45

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Also ich vgerwende weiterleitungen immer ungefähr so:

RewriteRule ^activate/([^/]+) index.php?p=activate&h=$1 [NC,L]

Deine würde ich dementsprechend anpassen:

RewriteRule ^([^/]+)/([^/]+)/name.html index.php?page=$1&id=$2 [NC,L]
( $1 = Kategorie, $2 = die ID )


So funktionierts bei mir lokal.

Matze 31. Jan 2009 15:55

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Hallo Michael,

gut danke, damit könnte ich leben. Es wird halt nicht die URL in der Adressleiste angepasst.

Was mir aber sehr wichtig wäre, eine 301-Meldung zurückzugeben. Nicht dass im schlimmsten Fall Google meine Seite aufgrund von Mehrfachinhalten sperrt. Leider wird in der folgenden Lösung wieder der absolute Pfad mit in die zu weiterleitende URL eingefügt:

Code:
RewriteRule ^category/id([0-9]+)/([a-z_]+)\.html index.php?page=category&id=$1 [NC,L,R=301]
Weißt du dafür auch eine Lösung?

Grüße, Matze

Micha88 31. Jan 2009 16:01

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Stehen noch andere RewriteRules Vor bzw. über dieser von dir gezeigten Rule?

Weil meine Erfahrung ist, dass man die "normalen" Rules (ohne ([^/]+) usw) immer UNTER
Rules MIT ([^/]+) schreiben sollte.

Aber leider kann ich dir nicht mehr weiter helfen.
Denn ich bin in diesem Thema selber noch ein Anfänger.

Was meinst du mit URL angepasst?

Namenloser 31. Jan 2009 16:07

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Wenn du es rein über die htaccess lösen willst, kann ich dir auch nicht helfen, denn mit der steh ich auch regelmäßig auf dem Kriegspfad, wenn es um solche "komplexen" Umleitungen geht.

Ich habe mir auf meiner Seite damit beholfen, dass ich eine Umleitung mit PHP erstellt habe. Als ich die URLs von den Blogeinträgen geändert habe, habe ich in der für den Blog zuständigen Datei einfach per Regexp überprüft, über welche URL die Seite aufgerufen wurde, und dann ggf. eine Umleitung erstellt:
Code:
// 301-Weiterleitung zu URL
   function redirect($url) {
       header("HTTP/1.1 301 Moved Permanently");
       header("Location: $url");
   }
// 301-Weiterleitung zu relativem Pfad
   function redirect2($file) {
       header("HTTP/1.1 301 Moved Permanently");
       $host = $_SERVER['HTTP_HOST'];
       header("Location: http://$host$url");
   }

Die Muhkuh 31. Jan 2009 16:26

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Warum übergibst Du in der zweiten Funktion den Parameter $file, der nicht genutzt wird und nutzt eine Variable $url, die nirgends definiert ist? :gruebel:

Namenloser 31. Jan 2009 16:31

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Zitat:

Zitat von Die Muhkuh
Warum übergibst Du in der zweiten Funktion den Parameter $file, der nicht genutzt wird und nutzt eine Variable $url, die nirgends definiert ist? :gruebel:

Gute Frage :gruebel:. Wahrscheinlich habe ich den Code aus der 1. Funktion kopiert und vergessen den Namen des Parameters anzupassen. Danke für den Hinweis.

Matze 31. Jan 2009 18:59

Re: ModRewrite: Wie Weiterleitung von ".html" auf
 
Hi

@Michael: Mit "anpassen" meinte ich, dass ich per PHP alle Links eines bestimmten Typs (zu Übersichtsseiten) geändert habe.

Und Weiterleiten muss ich nicht unbedingt, das wäre das kleinste Problem, ich möchte nur, dass Google auch mitbekommt, dass die bisherigen Links nicht mehr existieren und so nach und nach aus dem Suchindex fliegen. Solche generellen Weiterleitungen mache ich prinzipiell über htaccess, da so viel schneller und unauffälliger weitergeleitet wird und ich zusätzlich den Suchmaschinen mitteilen kann, was los ist.
Edit: ok ich sehe gerade an obigem Code, dass diese Rückgabewerte auch per PHP realisierbar sind.

Aber ich probiere nochmals etwas herum, denke aber nicht, dass es an der Reihenfolge liegt.

Grüße, Matze

Edit 2: So funktioniert die Weiterleitung. Vielleicht reicht mir das schon:

Code:
RewriteRule ^category/id([0-9]+)/([a-z_]+)\.html index.php?page=category&id=$1 [R=301,L]
Edit 3: Hm geht doch nicht. Hatte die alte Regel noch drinnen und die bewirkte die Anzeige.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz