Zur Navigation

Weiterleiten einer URL abhängig vom Query String [4]

..bei Anwesenheit von mehreren Query Strings

31 Jörg Kruse

Bei mir funktioniert dei htaccess in Beitrag 23: wenn ich http://example.com/test/normal-1-Kontakt.html?type=normal aufrufe, wird der Inhalt der http://example.com/test/index.php angezeigt

sorry,vergessen , mit den oberen inhalt funktioniert es, aber ich glaube nicht das es optimal ist.

Was heißt "nicht optimal"?

umgeleitet werden soll:

type = index.php?type=$1&vieles mehr
unterkategorien = index.php?type=$1&unterkategorie=$2&vieles mehr
id = index.php?type=$1&unterkategorie=$2&id=234&vieles mehr

Sorray, aber daraus werde ich jetzt nicht schlau (ist allerdings auch schon spät, und ich mach hier erstmal Schluss)

18.12.2010 01:57 | geändert: 18.12.2010 01:59

32 pdm_2011

naja wenn ich eine seite habe mit vielen unterschiedlichen typen dann müsste ich ja z.B. 20 type müsste ich ja 20 einträge machen oder?

und ohne das RewriteCond dauert das doch dann lange, das richtige Rule zu finden bzw. wenn sich ein link nur an einer variable unterscheidet die den unterschied ausmacht zwischen bearbeiten oder nur ansicht, wie soll ich das absichern bzw. wie kann ich das unterscheiden?

deswegen war meine idee, das ich gewisse variablen definiere die den unterschied anhand einer zahl oder eines wortes definieren und nach diesen kann man dann unterscheiden.

hoffe habe mich jetzt nicht zu kompliziert ausgedrückt.

habe ich ein denkfehler?

LG

18.12.2010 02:05

33 pdm_2011

also....

habe mal komplett neu angefangen:

htaccess datei:

RewriteEngine On
RewriteRule ^([-a-zA-Z0-9]+)\.html$ index.php?site=$1 [L]


Ich habe folgende Dateien:

index.php -------------------------> Startdatei m. 2 Links: Administrator | Programmierung
jeweils im <a href="Administrator.html"></a> und < a href="Programmierer.html"></a> verlinkt


Administrator.php ---------------> Inhalt Hauptlink v. Administrator, Inhalt wird dynamisch geladen mit PHP
Links: IT-Service | IT-Beratung
jeweils im <a href="IT-Service.html"></a> und < a href="IT-Beratung.html"></a> verlinkt


Programmierer.php -------------> Inhalt Hauptlink v. Programmierer, Inhalt wird dynamisch geladen mit PHP
Startdatei m. 2 Links: Webdesign | Web-Software
jeweils im <a href="Webdesign.html"></a> und < a href="Web-Software.html"></a> verlinkt


IT-Service.php --------------------> Inhalt Hauptlink v. Administrator, Inhalt wird dynamisch geladen mit PHP
IT-Beratung.php ------------------> Inhalt Hauptlink v. Administrator, Inhalt wird dynamisch geladen mit PHP


Webdesign.php -------------------> Inhalt Hauptlink v. Programmierer, Inhalt wird dynamisch geladen mit PHP
Web-Software.html ---------------> Inhalt Hauptlink v. Programmierer, Inhalt wird dynamisch geladen mit PHP


hoffe ist verständlich.

kann alle Links benutzen und alle Inhalte werden dynamisch aus einer DB geholt.

Wenn ich z.B:
www. abc . de/test/Programmierung.html
aufrufe, dann kommt der dynamische inhalt aus der DB,
aufgerufen wird aber:
index.php?site=Programmierer
->> in DB wird die ID von Programmierer abgefragt und dann kann man mit der alles weitere nachladen (Untermenüs, Inhalte, etc. ....).

Also anhand des Dateinamens, ohne. html, wird der gewünschte Inhalt geladen. Einziger Nachteil, ich muss für jede .html Datei eine .php Datei mit dem Namen auf dem Server laden. In meinem Beispiel sind das:
index.php
Administrator.php ------> verlinkt über <a href="Administrator.html"></a>
Programmierer.php ----> verlinkt über <a href="Programmierer.html"></a>
IT-Service.php ----------> verlinkt über <a href="IT-Service.html"></a>
IT-Beratung.php --------> verlinkt über <a href="IT-Beratung.html"></a>
Webdesign.php ---------> verlinkt über <a href="Webdesign.html"></a>
Web-Software.php -----> verlinkt über <a href="Web-Software.html"></a>



Jetzt frage ich mich ob das so vom Nutzen her, Google freudige URLs, richtig ist?
oder
mache versteh ich es immernoch nicht???



18.12.2010 04:42

34 Jörg Kruse

Google kennt auch nur die verlinkten URLs, was serverseitig umgeschrieben wird, weiß sie nicht.

Davon ab, solltest du aber einen neuen Thread anlegen, wenn du deine URL-Umschreibungen nicht mehr anhand der Query Strings differenzieren möchtest - die Fragestellungen haben dann wohl nichts mehr mit dem Thema dieses Threads zu tun.

18.12.2010 11:29

... 1 Monat später ...

36 derdemo (Gast)

Hallo zusammen,

ich kämpfe hier nun schon länger mit einem Rewrite Problem... :(

Ggf. hat ja jemand von euch den entscheidenden Tip für mich ? :)

Ich habe hier einen alten Link den ich umleiten möchte.

D.h. es gibt Aufrufe in der Art, wobei sich halt nur immer die Topicid unterscheidet.

http://www.meinedomain.de/index.php?showtopic=9294

Ziel ist es den Aufruf dann auf ein anderes Script zu geben.

http://www.meinedomain.de/redirect.php?tid=9294



Meine Ansätze sehen z.Zt. wie folgt aus, funktionieren aber nicht... :(

# RewriteCond %{QUERY_STRING} showtopic=([^&]*) bzw.
#RewriteCond %{QUERY_STRING} &?showtopic=([^&]+) [NC]
#RewriteRule ^/redirect.php?tid=$ [NC,L]


Würde mich über jede Hilfe freuen :)

Danke Gruß Demo

08.02.2011 13:16

37 Jörg Kruse

Zahlen wie 9294 kannst du als [0-9]+ zusammenfassen. Geklammerte Ausdrücke aus einer RewriteCond werden nicht mit $1 etc. sondern mit %1 etc. wieder aufgenommen. In der RewriteRule muss als Muster die umzuleitende Datei aufgeführt werden, in diesem Fall die index.php. Wenn du die URL nicht nur intern umschreiben, sondern weiterleiten möchtest, musst du als Ziel die vollständige URL angeben

RewriteCond %{QUERY_STRING} showtopic=([0-9]+)
RewriteRule ^index\.php$ http://www.meinedomain.de/redirect.php?tid=%1 [R=301,L]

08.02.2011 14:12 | geändert: 08.02.2011 14:14

... 1 Monat später ...

38 Siegfried (Gast)

Hallo und zunächst vielen Dank für Dein großartiges Engagement hier, Jörg!

Mein Problem ist fast dasselbe wie das aus Beitrag 4 dieses Threads: Ich möchte im Kontext eines Domainumzugs zu einem neuen Provider eine alte dynamische Joomla-URL mit vielen Query-Strings auf eine neue statische URL für jede einzelne Seite per 301 um-/weiterleiten:

die alte URL einer Page ist aufgebaut nach dem Muster...

http://www.domain.tld//content/index.php?option=com_content&task=view&id=7&Itemid=15

...und soll per 301 umgeleitet werden auf die neue statische URL der betreffenden page nach dem Muster

http://www.domain.tld/seitenname.html

Würde der komplette Code der .htaccess für o.g. Beispielseite so richtig sein wie folgt, wenn dazu noch gilt, dass die komplette Website-Neu in einem Unterordner namens "live" liegt?

RewriteEngine On
RewriteBase /live/
RewriteCond %{QUERY_STRING} option=com_content&task=view id=7&Itemid=15
RewriteRule index\.php http://www.url.com/de/seitenname.html [L,R=301]

Wäre auch die Syntax so korrekt? Kein "?" hinter seitenname.html ?

Und müsste ich die RewriteCond und RewriteRule für jede einzelne Seite wiederholen?

Und wie müsste die Weiterleitung der alten Startseiten-URL (einzige Seite ohne Querystring) http://www.domain.tld/content/index.php zu der neuen URL http://www.domain.tld/ aussehen? Etwa folgendermaßen?

redirect 301 /content/index\.php http://www.domain.tld/

Meine derzeitige .htaccess sieht so aus, nachdem ich beim Hoster Hetzner im grafischen Interface das Unter-Verzeichnis "live" als Startverzeichnis angelegt und zugleich mit einem Passwort-Schutz versehen habe:

AuthUserFile /usr/www/users/[password-phrase]//live//.htpasswd
AuthName "Realm"
AuthType Basic
<Limit GET POST PUT>
require valid-user
</Limit>

Grund: Der Passwortschutz soll so lange gelten, bis die Domain umgezogen ist. Müssten dann die RewriteRules in meiner bestehenden .htaccess einfach unten nachfolgen?

Vielen Dank im Voraus und Grüße

09.03.2011 15:50

39 Jörg Kruse

Zitat von Siegfried
Hallo und zunächst vielen Dank für Dein großartiges Engagement hier, Jörg!

Mein Problem ist fast dasselbe wie das aus Beitrag 4 dieses Threads: Ich möchte im Kontext eines Domainumzugs zu einem neuen Provider eine alte dynamische Joomla-URL mit vielen Query-Strings auf eine neue statische URL für jede einzelne Seite per 301 um-/weiterleiten:

die alte URL einer Page ist aufgebaut nach dem Muster...

http://www.domain.tld//content/index.php?option=com_content&task=view&id=7&Itemid=15

...und soll per 301 umgeleitet werden auf die neue statische URL der betreffenden page nach dem Muster

http://www.domain.tld/seitenname.html

Würde der komplette Code der .htaccess für o.g. Beispielseite so richtig sein wie folgt, wenn dazu noch gilt, dass die komplette Website-Neu in einem Unterordner namens "live" liegt?

Die RewriteBase bezieht sich auf die Dateipfade der weiterzuleitenden URLs. Deinem Beispiel zufolge leitest du http:example.com/live/index.php weiter nach http://www.url.com/de/seitenname.html:

RewriteEngine On
RewriteBase /live/
RewriteCond %{QUERY_STRING} option=com_content&task=view id=7&Itemid=15
RewriteRule index\.php http://www.url.com/de/seitenname.html [L,R=301]

Wäre auch die Syntax so korrekt? Kein "?" hinter seitenname.html ?

Wenn du den alten Query String abhängen möchtest, musst du ihn durch ein "?" ersetzen

Und müsste ich die RewriteCond und RewriteRule für jede einzelne Seite wiederholen?

Wenn es kein Entsprechungsmuster gibt, ja

Und wie müsste die Weiterleitung der alten Startseiten-URL (einzige Seite ohne Querystring) http://www.domain.tld/content/index.php zu der neuen URL http://www.domain.tld/ aussehen? Etwa folgendermaßen?

redirect 301 /content/index\.php http://www.domain.tld/

Das "\" ist hier überflüssig - der Punkt muss in mod_rewrite Ausdrücken maskiert werden, aber nicht in einer redirect Direktive

09.03.2011 22:33

... 3 Monate später ...

40 Martin (Gast)

Weiß zufällig jemand auch wie man in der htaccess diese Art von Dateien:

http://www.domainxyz.com/datei_artikel.php?ID=370

automatisch in:

http://www.domainxyz.com/datei_artikel_neu.php?ID=370

umwandeln kann?

Die ID wechselt dabei von Datei zu Datei. Es müsste von dem htacces-Befehl also z. B. auch:

http://www.domainxyz.com/datei_artikel.php?ID=330

automatisch in:

http://www.domainxyz.com/datei_artikel_neu.php?ID=330

umgewandelt werden. Hat mir da evtl. jemand einen guten Tipp?

09.06.2011 00:36