Zur Navigation

Zeichen aus URL entfernen und dann umleiten

1 Detlef (Gast)

Hallo Jörg

Tut mir leid, dass mein Versprechen, nicht nochmal nachzufragen nicht wirklich lange gehalten hat. :-(
Ich habe noch eine Frage.

Ich möchte direkt auf dem Server aus der URL:

product_info.php?products_id=XXXX{X}XX

die Zeichenkette {X}XX (Das X sind Ziffern) entfernen.

also ab dem { alles weg ...

und nach

product_info.php?products_id=XXXX 

(das XXXX sind die Ziffern direkt hinter oberer products_id=)
umleiten.

Kannst Du mir bitte diesbezüglich nochmal unter die Arme greifen?
Vielen Dank schon einmal vorab!

Lieben Gruß
Detlef

17.01.2010 20:09

2 Jörg Kruse

Um den Query Strings als Muster zu erfassen, wird eine RewriteCond benötigt

RewriteCond %{QUERY_STRING} products_id=([0-9]{4})\{

Der erste geklammerte Ausdruck der RewriteCond kann in der Ersetzung der folgenden RewriteRule durch ein "%1" wiederaufgenommen werden. "[0-9]{4}" steht hierbei für 4 Ziffern; folgt dem ein "{", sollte der Rest durch diese Rule abgeschnitten werden:

RewriteRule product_info\.php http://example.com/product_info.php?products_id=%1 [R=301]

17.01.2010 21:46

3 Delef (Gast)

Hallo Jörg

Funktioniert leider nicht. Keine Fehlermeldung ... keine Umleitung ... :-(

Gruß
Detlef

17.01.2010 22:43

4 Jörg Kruse

Ich hab's mal bei mir getestet - dort funktioniert es.

Wie schaut denn die komplette htaccess aus?

Mod_rewrite ist eingeschaltet (?):

RewriteEngine on

17.01.2010 22:52

5 Detlef (Gast)

Ohne Deine Regel sieht es so aus:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} on
RewriteRule ^robots\.txt$ robots-https.txt
RewriteRule ^product_info\.php/products_id/([0-9]+)$ http://www.example.com/product_info.php?products_id=$1 [R=301]
RewriteRule ^product_reviews\.php/products_id/([0-9]+)$ http://www.example.com/product_reviews.php?products_id=$1 [R=301]
RewriteRule ^index\.php/products_id/([0-9]+)$ http://www.example.com/product_info.php?products_id=$1 [R=301]
RewriteRule ^index\.php/cPath/([0-9_]+)$ http://www.example.com/index.php?cPath=$1 [R=301]
RewriteRule ^product_info\.php/cPath/[0-9_]+/products_id/([0-9]+)$ http://www.example.com/product_info.php?products_id=$1 [R=301]
RewriteRule ^index\.php/cPath/[0-9_]+/products_id/([0-9]+)$ http://www.example.com/product_info.php?products_id=$1 [R=301]
RewriteRule ^product_reviews\.php/cPath/[0-9_]+/products_id/([0-9]+)$ http://www.example.com/product_reviews.php?products_id=$1 [R=301]

  RewriteBase /
  RewriteRule ^(.*)-p-([0-9]+).html$ product_info.php?products_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-c-([0-9_]+).html$ index.php?cPath=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-m-([0-9]+).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-pi-([0-9]+).html$ popup_image.php?pID=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-pr-([0-9]+).html$ product_reviews.php?products_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-pri-([0-9]+).html$ product_reviews_info.php?products_id=$2&%{QUERY_STRING}
  # Articles contribution
  RewriteRule ^(.*)-t-([0-9_]+).html$ articles.php?tPath=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-au-([0-9]+).html$ articles.php?authors_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-a-([0-9]+).html$ article_info.php?articles_id=$2&%{QUERY_STRING}
  # Information pages
  RewriteRule ^(.*)-i-([0-9]+).html$ information.php?info_id=$2&%{QUERY_STRING}
  # Links contribution
  RewriteRule ^(.*)-links-([0-9_]+).html$ links.php?lPath=$2&%{QUERY_STRING}
  # Newsdesk contribution
  RewriteRule ^(.*)-n-([0-9]+).html$ newsdesk_info.php?newsdesk_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-nc-([0-9]+).html$ newsdesk_index.php?newsPath=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-nri-([0-9]+).html$ newsdesk_reviews_info.php?newsdesk_id=$2&%{QUERY_STRING}
  RewriteRule ^(.*)-nra-([0-9]+).html$ newsdesk_reviews_article.php?newsdesk_id=$2&%{QUERY_STRING}
</IfModule>

17.01.2010 23:05

6 Detlef (Gast)

Jetzt geht es. Das Problem:

Die Ziffern der products_id=XXXX{ ...

... sind sowohl mal einstellig, zweistellig, dreistellig, vierstellig, fünftsellig ...etc.

Mit der {4} beschränke ich mich ja auf 4 Stellen, die Test URL hatte aber nur 3. :-) Da lag der Fehler.

Wie kann ich jetzt sicherstellen, dass alle möglichen Varianten 2-stellige, 3-stellige,4-stellige usw. product_ids berücksichtigt werden?
Für jede eine Cond erstellen?

Noch eine Frage ...

was bedeutet das ^ vor dem Rule Inhalt?
Es funktioniert nämlich sowohl:
RewriteRule product_info\.php http://example.com/product_info.php?products_id=%1 [R=301]

als auch

RewriteRule ^product_info\.php http://example.com/product_info.php?products_id=%1 [R=301]
so.

Gruß
Detlef

17.01.2010 23:17

7 Jörg Kruse

Die Ziffern der products_id=XXXX{ ...

... sind sowohl mal einstellig, zweistellig, dreistellig, vierstellig, fünftsellig ...etc.

Mit der {4} beschränke ich mich ja auf 4 Stellen, die Test URL hatte aber nur 3. :-) Da lag der Fehler.

Wie kann ich jetzt sicherstellen, dass alle möglichen Varianten 2-stellige, 3-stellige,4-stellige usw. product_ids berücksichtigt werden?
Für jede eine Cond erstellen?

Nein, dann verwendest du statt der "{4}" einfach ein "+", welches für ein oder mehrere Zeichen steht

RewriteCond %{QUERY_STRING} products_id=([0-9]+)\{

Noch eine Frage ...

was bedeutet das ^ vor dem Rule Inhalt?

Das ist ein Begrenzungszeichen - ohne dieses werden z.B. auch ein unterverzeichnis/product_info.php oder ein neu_product_info.php von der Rule erfasst

17.01.2010 23:28

8 Detlef (Gast)

... was würde ich nur ohne Dich tun?

Richtig!
Ich wäre bereits Wahnsinnig!

Vielen herzlichen Dank Jörg. Du hast mir wirklich enorm geholfen und eine Menge SUCHEREI und FLUCHEREI erspart.

Nochmals D A N K E !

Detlef

17.01.2010 23:35

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]