mod_rewrite: Trailing Slash und Weiterleitung
Nick
- webserver
Hallo!
RewriteEngine On
RewriteRule ^artikelnummer/(.*)/$ index.php?artikelnummer=$1 [L]
Dies als Inhalt einer .htaccess-Datei führt dazu, dass die Ressource
http://example.org/index.php?artikelnummer=123
auch unter
http://example.org/artikelnummer/123
sowie unter
http://example.org/artikelnummer/123/
abgerufen werden kann.
Wie erreiche ich eine permanente Weiterleitung (301 Redirect) von
http://example.org/index.php?artikelnummer=123
sowie von
http://example.org/artikelnummer/123
auf
http://example.org/artikelnummer/123/
so dass die Ressource nur unter dieser URL abrufbar ist?
Viele Grüße
Nick
PS:
Auch
http://example.org//index.php?artikelnummer=123
bzw.
http://example.org///Tindex.php?artikelnummer=123
etc. und
http://example.org//artikelnummer/123
bzw.
http://example.org//artikelnummer//123
etc. sowie
http://example.org//artikelnummer/123/
bzw.
http://example.org/artikelnummer//123/
etc. sollen permanent auf
http://example.org/artikelnummer/123/
weiterleiten.
hi,
so dass die Ressource nur unter dieser URL abrufbar ist?
wenn Du eindeutige URLs haben willst, brauchst Du eine Tabelle, wo die alle drinstehen.
Hotti
wenn Du eindeutige URLs haben willst, brauchst Du eine Tabelle, wo die alle drinstehen.
Keine Chance über mod_rewrite und reguläre Ausdrücke?
wenn Du eindeutige URLs haben willst, brauchst Du eine Tabelle, wo die alle drinstehen.
Keine Chance über mod_rewrite und reguläre Ausdrücke?
Dazu fragst Du den Falschen ;) Nur soviel: Mit der gewünschten Weiterleitung wird das nicht besser und das Problem löst es nicht. Hinter einer Weiterleitung stecken auch mindestens zwei URLs, nurmalso nebenbei.
Rewrite-ja. Es unterstützt grundsätzlich den Wunsch nach dynamischen Inhalten. Die gesamte Site jedoch, sollte auf einer fundierten Projektverwaltung stehen, schließlich gehören zu jeder Einzelseite eine ganze Palette an Meta-Angaben (Buzzwort: Attribute) und die gehören ordentlich verwaltet. Mit der Rewrite-Engine wird das Ganze nur auf ein Master-Script gebeamt, was den Zauber dann ausgibt. Damit stehen Dir alle Wege offen.
Hotti
PS: 404 Not Found weil Slash am Ende.
Dazu fragst Du den Falschen ;) Nur soviel: Mit der gewünschten Weiterleitung wird das nicht besser und das Problem löst es nicht. Hinter einer Weiterleitung stecken auch mindestens zwei URLs, nurmalso nebenbei.
Wieso wird es nicht besser und löst das Problem nicht?
PS: 404 Not Found weil Slash am Ende.
Und?
hi,
Wieso wird es nicht besser und löst das Problem nicht?
Du bekommst damit keine eindeutigen URLs.
PS: 404 Not Found weil Slash am Ende.
Und?
Das arbeitet so, wie ich weiter oben beschrieben habe, der URL funktioniert ohne abschließenden Slash, ein Solcher erzeugt den Status 404, korrekt und zielführend. Deiner Fragestellung nach schien es Dich zu interessieren.
Und noch einen Tipp: Die .htaccess ist zum Konfigurieren des Webservers.
Hotti
Du bekommst damit keine eindeutigen URLs.
Mir geht es darum, dass die anderen gültigen Varianten auf eine einzige Variante umgeleitet werden (301 Redirect).
Das arbeitet so, wie ich weiter oben beschrieben habe, der URL funktioniert ohne abschließenden Slash, ein Solcher erzeugt den Status 404, korrekt und zielführend. Deiner Fragestellung nach schien es Dich zu interessieren.
Aber ob man sich jetzt für die Variante mit oder ohne Slash am Ende entscheidet, ist doch Geschmackssache.
Und noch einen Tipp: Die .htaccess ist zum Konfigurieren des Webservers.
Sorry, hier muss ich wieder ganz blöd fragen: und?
hi,
Aber ob man sich jetzt für die Variante mit oder ohne Slash am Ende entscheidet, ist doch Geschmackssache.
Nicht ganz. Im Default, dem allgemeinen Verständnis der Besucher entsprechend, bedeutet ein Slash am Ende, dass es sich um ein Verzeichnis handelt und der Webserver die zum Verzeichnis gehörige Index-Datei (_default: index.html {konfigurierbar}) ausliefert (*).
Und noch einen Tipp: Die .htaccess ist zum Konfigurieren des Webservers.
Sorry, hier muss ich wieder ganz blöd fragen: und?
Is ne gute Frage, meine Meinung dazu habe ich schon weiter oben kundgetan: Rewrite unterstützt die Ausgabe von dynamischen Content, mehr nicht. Ich ziehe hier eine klare Trennung, d.h., die Anwendung bekommt von Rewrite lediglich die Requested URLs zugespielt, die Konfiguration selbst ist Sache der Anwendung, die auch dafür zuständig ist, dass URLs eindeutig sind und dass im Fall einer nicht vorhandenen angeforderten Ressource der richtige HTTP-Status ausgegeben wird.
(*) Ich finde ich diese Konvention gut, meine Anwendungen bauen darauf auf. Im Code sowie in der Anwendungs-Konfiguration ergeben sich damit auch klare Verhältnisse.
Hotti
Moin!
Wie erreiche ich eine permanente Weiterleitung (301 Redirect) von
http://example.org/index.php?artikelnummer=123
sowie von
http://example.org/artikelnummer/123
auf
http://example.org/artikelnummer/123/
so dass die Ressource nur unter dieser URL abrufbar ist?
Das ist sie ja nicht. Redirects sind gültige Antworten auf Fragen, wenn eine Ressource "NUR" unter einer bestimmten URL abrufbar sein sollte, müssten alle anderen Ressourcen mit 404 antworten.
Insofern wäre die Frage, warum du diesen Redirect zu benötigen glaubst. Verlinke in deiner Site ausschließlich die eine, gewünschte Variante der URL, und schon werden die Requests auf alle anderen Varianten gegen Null gehen - Mission erfüllt.
Ach ja: Google kennt auch dieses nicht untypische Problem von Websites und sieht es nicht als "Duplicate Content" an - gibt einfach die "canonical url" in deiner Seite an, um jegliche Zweideutigkeiten seitens Google auszuschließen und die von dir gewünschte Variante der URL anzugeben.
- Sven Rautenberg
Das ist sie ja nicht. Redirects sind gültige Antworten auf Fragen, wenn eine Ressource "NUR" unter einer bestimmten URL abrufbar sein sollte, müssten alle anderen Ressourcen mit 404 antworten.
Dann war meine Formulierung offenbar falsch, aber es dürfte dennoch klar geworden sein, was ich gemeint habe.
Insofern wäre die Frage, warum du diesen Redirect zu benötigen glaubst. Verlinke in deiner Site ausschließlich die eine, gewünschte Variante der URL, und schon werden die Requests auf alle anderen Varianten gegen Null gehen - Mission erfüllt.
Ach ja: Google kennt auch dieses nicht untypische Problem von Websites und sieht es nicht als "Duplicate Content" an - gibt einfach die "canonical url" in deiner Seite an, um jegliche Zweideutigkeiten seitens Google auszuschließen und die von dir gewünschte Variante der URL anzugeben.
Das ist nicht die Art von "Lösung", nach der ich suche.
RewriteRule: /artikelnummer/ gefolgt von Zahl, gefolgt von Slash ODER index.php?artikelnummer= gefolgt von Zahl -> leite um auf /artikelnummer/ gefolgt von gefundener Zahl
Sollte recht einfach als 1-Zeiler umzusetzen sein - sofern man jetzt von den Hinweisen von Sven oder hotti absieht. Wobei hottis vorschlag vermutlich unsinnig ist, wenn sich die Artikelnummern nicht ändern. Wenn du hingegen mal auf sprechende URLs umstellst - z.B. statt /artikelnummer/123 auf /produkte/toller-rasenmaeher - wird es dir nicht erspaart bleiben, eine Tabelle anzulegen.
Wenn das Produkt umbenannt wird (und sei es nur, weil sich jemand vertippt hat) kannst du mit ModRewrite automatisiert mit einer einfachen Regel nichts mehr anfangen.
RewriteRule: /artikelnummer/ gefolgt von Zahl, gefolgt von Slash ODER index.php?artikelnummer= gefolgt von Zahl -> leite um auf /artikelnummer/ gefolgt von gefundener Zahl
So ähnlich.
Sollte recht einfach als 1-Zeiler umzusetzen sein - sofern man jetzt von den Hinweisen von Sven oder hotti absieht.
Dann mach doch mal bitte einen Vorschlag.
RewriteRule: /artikelnummer/ gefolgt von Zahl, gefolgt von Slash ODER index.php?artikelnummer= gefolgt von Zahl -> leite um auf /artikelnummer/ gefolgt von gefundener Zahl
So ähnlich.
Wie genau? Das ist der erste Schritt, wenn du einen regulären Ausdruck verfasst.
Dann mach doch mal bitte einen Vorschlag.
Hab' ich doch schon :)
Versuch' doch einfach mal, meinen entsprechenden Vorschlag in einen regulären Ausdruck zu fassen - wenn du irgendwo stecken bleibst, einfach nochmal melden.
Wenn dir den Ausdruck jetzt bastle, wirst du vermutlich diese "magische Sache" niemals verstehen, obwohl sie im Grunde eigentlich ganz einfach ist.