Variabeln aus Link sollen als Datei angezeigt werden .htaccess
basti1012
- sonstiges
Ich versuche die ganze Zeit meine Links ,die so aussehen
https://beispiel.de/ordner1/index.php?name=dateixy
https://beispiel.de/ordner2/index.php?name=dateixy
https://beispiel.de/ordner3/index.php?name=dateixy
Umzuwandeln , so das man sie im Browser so aufrufen kann
https://beispiel.de/ordner1/dateixy.html
https://beispiel.de/ordner2/dateixy.html
https://beispiel.de/ordner3/dateixy.html
Dazu habe ich in einer htaccess Datei das reingeschrieben
RewriteEngine On
RewriteBase /
RewriteRule ^/?ordner1/(.+)$ ordner1/index.php?name=$1 [L][R=301,L]
Habe die htaccess Datei im Root Vezeichniss getestet und auch versucht die jeweils in ordner 1,2,3 zutesten.
Habe es mal in einen Online Tester getestet Htaccess-tester
Gebe ich da meinen Fake Link ein https://beispiel.de/ordner1/dateixy.html Dann zeigt er mir unten das erwünschte Ergebniss an ( The new url is https://beispiel.de/ordner1/index.php?name=dateixy.html ). Da soll dann der Inhalt aus der Db geholt werden
Habe ich da irgendwas falsch verstanden ? Ich kam mit htaccess noch nie klar und werde es wohl nie verstehen . Kann mir einer helfen das ich das endlich zum laufen bekomme ?
@@basti1012
Ich versuche die ganze Zeit meine Links ,die so aussehen
https://beispiel.de/ordner1/index.php?name=dateixy
https://beispiel.de/ordner2/index.php?name=dateixy
https://beispiel.de/ordner3/index.php?name=dateixyUmzuwandeln , so das man sie im Browser so aufrufen kann
https://beispiel.de/ordner1/dateixy.html
https://beispiel.de/ordner2/dateixy.html
https://beispiel.de/ordner3/dateixy.html
Bei dir ist nicht nur der letzte Teil des URLs variable, sondern auch der vorletzte.
Du musst also nach sowas wie ^/?([^/]+)/(.+)
suchen und durch $1/index.php?name=$2
ersetzen.
😷 LLAP
Hallo Gunnar,
stimmt schon, aber zumindest für "ordner1" hätte es ja funktionieren müssen, wenn der hardcoded in der rewrite rule steht.
Ich bin ja bekanntlich kein Indianer aus dem Süden, sondern aus dem Nordwesten und verwende daher das Rewrite-Modul des IIS (mit dem man ebenfalls prima Zweikämpfe führen kann, aber es hat auch die nette Eigenschaft, einen "Rückwärts-Rewrite" im Output durchführen zu können) - aber mich deucht, dass die Flags falsch angegeben sind.
Müssen nicht alle Options in EINEM [Klammerpaar] stehen?
Und in Bastis Rule steht vorneweg noch ein /? - also optional ein / vornedran. Die Apache Doku sagt, dass der / zwischen Origin und Path nicht Teil des URL-Anteils ist, gegen den das Pattern gematcht wird. Dieses Stück Kunst kann demnach weg.
Die Regel sollte so aussehen, meine ich:
RewriteRule ^([^/]+)/(.+)$ $1/index.php?name=$2 [R=301,L]
Die Bedeutung des L Flags ist Dir klar, Basti?
Bei Problemen kann auch das Logging von mod_rewrite weiterhelfen.
→ https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Rolf
@@Rolf B
Die Regel sollte so aussehen, meine ich:
RewriteRule ^([^/]+)/(.+)$ $1/index.php?name=$2 [R=301,L]
Ich meine, nicht. Durch [R=301]
erscheint der hässliche URL mit index.php?name=
in der Adressleiste – das ist doch genau das, was man nicht will.
Und Suchmaschinen sollen ja auch den coolen URL (bspw. https://example.net/ordner1/dateixy.html) indizieren. Welcher Stauscode müsste es also sein? 🤔
😷 LLAP
Moin Gunnar,
Ich meine, nicht. Durch
[R=301]
erscheint der hässliche URL mitindex.php?name=
in der Adressleiste – das ist doch genau das, was man nicht will.Und Suchmaschinen sollen ja auch den coolen URL (bspw. https://example.net/ordner1/dateixy.html) indizieren. Welcher Stauscode müsste es also sein? 🤔
Ich kaufe OK für 200 und möchte lösen.
Viele Grüße
Robert
Hallo Robert,
ich würde, nach Lektüre des Indianerhandbuchs, das R ganz weglassen. Wie Gunnar sagte: man möchte doch eigentlich nur dem Anwender eine "schöne" URL präsentieren und verbergen, dass da ein PHP Script steckt, das die Inhalte aus einer DB oder aus einem anderen klammen Kabuff im Kohlenkeller holt.
Rolf
@@Rolf B
Und in Bastis Rule steht vorneweg noch ein /? - also optional ein / vornedran. Die Apache Doku sagt, dass der / zwischen Origin und Path nicht Teil des URL-Anteils ist, gegen den das Pattern gematcht wird. Dieses Stück Kunst kann demnach weg.
Das musste es bei mir auch. Ich hatte mich letztens auch mit RewriteRule
abgerackert – hatte schon das Fenster offen, um hier im Forum einen Thread zu eröffnen, hatte es dann aber im letzten Moment doch noch selbst hinbekommen.
Bei mir liegt die zuständige .htaccess-Datei aber nicht im Webroot-Ordner, sondern im Ordner der betreffenden Webseiten Star Trek series, und sieht so aus:
Options -MultiViews
RewriteEngine On
RewriteBase /startrek/series
RewriteCond %{REQUEST_URI} !index.php$
RewriteCond %{REQUEST_URI} !\.jsonld$
RewriteCond %{REQUEST_URI} !\.css$
RewriteCond %{REQUEST_URI} !\.svg$
RewriteRule (.+)$ index.php?series=$1
Im selben Ordner befindliche JSON-LD-, CSS- und SVG-Ressourcen dürfen nicht weitergeleitet werden. Ebenfalls ausgeschlossen ist index.php – müsste @basti1012 das nicht auch tun?
😷 LLAP
Moin Gunnar,
Options -MultiViews RewriteEngine On RewriteBase /startrek/series RewriteCond %{REQUEST_URI} !index.php$ RewriteCond %{REQUEST_URI} !\.jsonld$ RewriteCond %{REQUEST_URI} !\.css$ RewriteCond %{REQUEST_URI} !\.svg$ RewriteRule (.+)$ index.php?series=$1
Im selben Ordner befindliche JSON-LD-, CSS- und SVG-Ressourcen dürfen nicht weitergeleitet werden. Ebenfalls ausgeschlossen ist index.php – müsste @basti1012 das nicht auch tun?
Im Allgemeinen ist eine Rewrite-Bedingung doch, dass der REQUEST_FILENAME nicht direkt im Dateisystem vorhanden ist:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Viele Grüße
Robert
Moin,
Ich versuche die ganze Zeit meine Links ,die so aussehen
https://beispiel.de/ordner1/index.php?name=dateixy
https://beispiel.de/ordner2/index.php?name=dateixy
https://beispiel.de/ordner3/index.php?name=dateixyUmzuwandeln , so das man sie im Browser so aufrufen kann
https://beispiel.de/ordner1/dateixy.html
https://beispiel.de/ordner2/dateixy.html
https://beispiel.de/ordner3/dateixy.htmlDazu habe ich in einer htaccess Datei das reingeschrieben
RewriteEngine On RewriteBase / RewriteRule ^/?ordner1/(.+)$ ordner1/index.php?name=$1 [L][R=301,L]
Dein regulärer Ausdruck matcht den gesamten String hinter ordner1/
, also dateixy
.html
:
Gebe ich da meinen Fake Link ein https://beispiel.de/ordner1/dateixy.html Dann zeigt er mir unten das erwünschte Ergebniss an ( The new url is https://beispiel.de/ordner1/index.php?name=dateixy.html ). Da soll dann der Inhalt aus der Db geholt werden
Ist das Ergebnis wirklich das „erwünschte“? Deine Beschreibung oben ließe etwas Anderes erwarten.
Habe ich da irgendwas falsch verstanden?
Das kommt darauf an, was du genau möchtest.
Ich kam mit htaccess noch nie klar und werde es wohl nie verstehen.
Das hat mit htaccess nichts zu tun, sondern mit regulären Ausdrücken.
Viele Grüße
Robert
@@basti1012
Ich versuche die ganze Zeit meine Links ,die so aussehen
https://beispiel.de/ordner1/index.php?name=dateixy
Für Beispieldomains gibt es gegistrierte Namen wie example.net [RFC2606] (für Beispieldomains in anderen Schriften als der lateinischen siehe [IANA]).
beispiel.de gehört nicht dazu. Das Wiki sagt zwar „Seit 2018 lässt sich auch die Seite beispiel.de als Beispieldomain nutzen“, ich bin mir aber nicht sicher, ob es das so sagen sollte. Meine Bedenken hatte ich geäußert.
😷 LLAP