Frage zu redirect, rewrite und URL-Design

par

Mitglied
Erst einmal ein Hallo an alle. Ich besuche diese Seite Aufgrund der Interssanten News und Diskussionen im Forum schon länger.

Seit einige Tagen beschäftige ich mich mit der Konfigurations-Datei .htaccess, genauer mit der Anweisung [/I]rewrite. Nach etlichen Stunden Foren lesen und Tutorials durstöbern, hab ichs entweder noch nicht verstanden oder einfach die Lösung überlesen
smile.gif
darum frag ich jetzt mal hier. Evtl. hat ja jemand einen Lösungsansatz oder eine Idee.

1. Frage
Ich möchte alle Anfragen auf z.B. www.muster.org auf eine bestimmte Seite in einem Unterordner ( z.b. /public/page.php?ID=007) weiterleiten. Bis jetzt hab ich das entweder via
CODE <META HTTP-EQUIV="Refresh"content="5; url=/public/page.php?ID=007">
in der index.html oder mit

CODE Redirect permanent / http://www.muster.org/public/page.php?ID=007
in der .htaccess gelöst.
jetzt hab ich aber vermehrt gelesen, dass die beste lösung via rewrite in der.htaccess sei

CODE RewriteRule ^(.*) http://www.muster.org/public/page.php?ID=007 [L,R=301]

kann mir ev. jemand den unterschied erklären?

2. Frage
Die wird die Seite www.muster.org augerufen, erfolgt (mit welchem System auch immer) eine Weiterleitung auf die Seite www.muster.org/public/page.php?ID=007.
a ) wäre es schön wenn der Benutzer den Unterorner nicht sehen würde. Er also in der Adresszeile nur "www.muster.org/page.php?ID=007" sehen würde.
b ) noch besser wäre es wenn der user nur www.muster.org/software.html in der Adresszeile. die Internen-Links bleiben aber, das heisst eine neue Seite wird mit www.muster.org/public/page.php?ID=008 augerufen. Die Begriff und ID Zuordnung wäre bekannt, also "ID=007 -> Software", "ID=008 -> Hardware"

Diesen Teil hier
Forum Beitrag 8098 und ist soweit auch gelöst, in meinem Fall geht es aber nicht nur um die Suchmaschinenoptimierung sondern auch um das Desing der Adressleiste.


so hoffe das stimmt in etwa und es ist verständlich. evtl liege ich auch völlig falsch
unsure.gif


Danke und Gruss,
patrick
 
Zu Frage 1:

mod_rewrite bietet sich dann zum Weiterleiten an, wenn mit einer Regel mehrere Weiterleitungen erfasst werden können, also z.B. abc/1.html -> xyz/1.html, abc/2.html -> xyz/2.html, abc/3.html -> xyz/3.html usw. Oder, wenn man nach außen hin andere Adressen simulieren möchte (siehe Frage 2)

zu Frage 2b, sollte mit folgendem Eintrag in der .htaccess gehen:

CODE
RewriteEngine On

RewriteBase /

RewriteRule ^software.html\.html$ public/page.php?ID=007
RewriteRule ^hardware.html\.html$ public/page.php?ID=008



eine allgemeine Regel lässt sich aus den Zuordnungen leider nicht herleiten, deswegen benötigt man für jede Seite eine eigene Regel
 
thx

zu 2b.

hab das mit meinem test nicht zum funktionieren gebracht. bei meinem test mit den files unten wird die url nicht angepasst. ev. noch ne idee?

habe dazu folgende test-files erstellt.

1. .htaccess
CODE RewriteEngine On
RewriteBase /
RewriteRule ^software.html\.html$ sample.php?ID=7
RewriteRule ^hardware.html\.html$ sample.php?ID=5


2. sample.php

CODE <html>
<head>
<title>Rewrite Test </title>
</head>
<body
<h1>Rewrite Test</h1>
<p><a href="sample.php?id=7">klick mit id 7</a> </p>
<p><a href="sample.php?id=5">klick mit id 5</a> </p>
<p><a href="sample.php?id=1">klick mit id 1</a> </p>
<p><a href="sample.php">klick ohne id</a> </p>
<p><a href="software.html">klick software.html</a> </p>
<p><a href="hardware.html">klick hardware.html</a> </p>
<p><a href="sample.php?id=test">phpInfo</a> </p>
<?php
if(isset($_GET['id']) AND "7" == $_GET['id']) {
echo "id 7 angewählt";
} else if (isset($_GET['id']) AND "test" == $_GET['id']) {
phpinfo();
} else if (isset($_GET['id']) AND $_GET['id'] <> "") {
echo "sonst eine id gewählt und zwar wurde die ".$_GET['id']." gewählt";
} else {
echo " es wurde keine id angegeben...";
}
?>
</body
</html>
 
Sorry, da hatte ich beim schnellen Kopieren einen Fehler eingebaut
ph34r.gif
die Endung .html darf in dem Muster natürlich nur einmal vorkommen - Probier's mal so:

CODE RewriteEngine On
RewriteBase /
RewriteRule ^software\.html$ sample.php?id=7
RewriteRule ^hardware\.html$ sample.php?id=5
 
oh je, das hätte mir auch selbst auffallen können... Danke!

noch eine Zusatzsache:

Wird jetzt ein Link mit software.html aufgerufen, wird intern korrekt page.php?ID=7 gesendet und in der Adresszeile bleibt software.html. Wenn aber page.php?ID=7 augerufen wird, bleibt dieser Aufruf auch so in der Adresszeile. Gibt es via .htaccess eine Variante dass auch in diesem Fall in der Adresszeile software.html steht?

thx u. grz
 
Das wird so direkt nicht möglich sein, da man im Zusammenhang der obigen RewriteRule mit einer Weiterleitung von page.php?ID=7 auf software.html eine Endlosschleife auslöst: statt page.php?ID=7 sucht der Server wegen der RewriteRule nach page.php?ID=7, die aber wieder weitergeleitet wird nach software.html. Wenn du alle Links entsprechend änderst, werden darüber aber ja nur noch die neuen URLs nachgefragt. Sollten noch sehr viele externe Links auf die alten Adressen verweisen, könntest du eine Weiterleitung ohne Endlosschleife ermöglichen, wenn du die .php Dateien in ein neues Verzeichnis verschiebst. Dann würde eine Abfrage alt/page.php?ID=7 mit einer 301 weitergeleitet auf software.html, für das der Server auf Grund der RewriteRule neu/page.php?ID=7 ausliefert.
 
Zurück
Oben