Seite 1 von 2
mod_rewrite - Ich komm nicht mehr weiter!
Verfasst: 14.02.2011, 11:52
von Lavz
Ich möchte alle folgende Seiten AUTOMATISCH weiterleiten lassen. Meine Versuche sind bisher leider gescheitert, hab auch schon viel gegooglet, hoffe, ihr könnt mir weiterhelfen.
Ich möchte:
index.php?s=XXX zu: XXX.html --> AUTO WEITERLEITUNG
test.php?id=XXX&name=YYY zu: YYY.html --> AUTO WEITERLEITUNG
Wie mache ich das dann, dass z.B. test.php?id=XXX&name=YYY&edit=1 auch funktioniert?
Ausserdem: Alle .php Seiten zu .html automatisch weiterleiten.
Wer kann helfen?
Code: Alles auswählen
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule (.*)\.html$ index.php?s=$1
Verfasst:
von
Hochwertiger Linkaufbau bei ABAKUS:
- Google-konformer Linkaufbau
- nachhaltiges Ranking
- Linkbuilding Angebote zu fairen Preisen
- internationale Backlinks
Wir bieten
Beratung und
Umsetzung.
Jetzt anfragen:
0511 / 300325-0
Verfasst: 14.02.2011, 12:41
von Lavz
Nee aber ich will ja SEO freundliche URLs.
Folgende URL hab ich jetzt schon:
tails.php?url=xxxx.html
Ich will nur jetzt umleiten (SEO freundlicher, kürzer auf): xxxx.html
Verständlich?
Oder geht das gar nicht? Muss ich alle Links ändern in .html Links?
wie änder ich dann die php in kurze html Site mit htaccess
Verfasst: 14.02.2011, 12:59
von Synonym
Wenn Du die URLs einfach weiterleitest bringt das gar nichts, da Dein System damit dann nichts mehr anfangen kann. Wie Wittka schon sagte, Du musst die URLs auf der Seite ändern und dann per htaccess festlegen, dass eben bei xxx.html die index.php?s=xxx intern aufgerufen wird. Mit der kann Dein System dann was anfangen und weiterarbeiten.
Rufe doch einfach mal domain.de/XXX.html auf, was passiert denn da? Nichts oder. Ein Fehler, mehr nicht... Weil Dein System eben mit der URL nichts anfangen kann. Also musst Du dem dann per htaccess eben genau das beibringen.
Verfasst: 14.02.2011, 13:00
von Lavz
Könnt ihr mri ein Beispiel geben, wie ich index.php?s=xxx in xxx.html umwandeln lassen kann?
Verfasst: 14.02.2011, 13:02
von Synonym
Kannst Du uns ein echtes Beispiel geben, in dem auch klar wird, was das s=xxx bedeutet? Ist xxx ein gemischter String, eine Zahlenkette, eine Zeichenkette oder was?
Verfasst: 14.02.2011, 14:32
von Rizzo
Zum Verständnis, was meine beiden Vorgänger die sagen wollen. Dazu nochmal ein Beispiel:
Auf deine Seite hast du (was wir nun glauben) eine Interne Verlinkung á
Code: Alles auswählen
<a href="http://www.example.de/index.php?s=XXX">Link zur Seite</a>
- welche du nun auf -
http://www.example.de/XXX.html
- weiterleiten möchtest.
Dieser Ansatz ist aber verkehrt.
So meinen das meine Vorgänger, bsp. - interne Verlinkung:
Code: Alles auswählen
<a href="http://www.example.de/XXX.html">Link zur Seite</a>
...in der htaccess kann mit Hilfe von...
Code: Alles auswählen
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
(siehe auch die Regeln von Wittka)
...abgefangen und zur index.php?s=XXX weitergeleitet werden.
Verfasst: 14.02.2011, 16:15
von Lavz
Ihr verwirrt mich
Ich versuchs nochmals. Die Seite:
/seite.php?id=irgendwas_dynamisch_erzeugtes&name=wasanderesdynamischerzeugtes
möchte ich umwandeln zu:
/wasanderesdynamischerzeugtes.html
Damit ich selber dann den Link setzen kann zu: /wasanderesdynamischerzeugtes.html
Ich habs so probiert, klappt aber nicht:
Code: Alles auswählen
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule (.*)\.html$ index.php?s=$1
RewriteRule ^([^.]+)\.html$ $1.php [L]
RewriteCond %{QUERY_STRING} !marker
RewriteCond %{QUERY_STRING} name=([-a-zA-Z0-9_+]+)
RewriteRule ^/?pflanze\.php$ %1? [R=301,L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)$ pflanze.php?id=([-a-zA-Z0-9_+]+)marker&name=$1 [L]
id==([-a-zA-Z0-9_+]+) soll für etw. beliebiges stehen, stimmt wahrscheinlich nicht. Das mit dem marker hab ich auf ner anderen Seite gefunden.
Hingegen: index.php?s=info kann nun ebenfalls unter info.html aufgerufen werden wie gewünscht. Was noch nicht geht, ist z.B. dass suche.php in suche.html aufgerufen werden soll. Also sonst alle *.php in *.html umgewandelt werden sollen.
/EDIT
Ok bin inzwischen etwas weiter, aber habe doch noch eine Frage:
Code: Alles auswählen
RewriteRule ^(.*)-(.*).htm$ /seite.php?id=$1&name=$2 [L]
Klappt einwandfrei. Ich will aber nur das was hinter &name steht ersetzen und in den Link nehmen:
Code: Alles auswählen
RewriteRule ^(.*).htm$ /seite.php?id=.*&name=$1 [L]
Geht nicht mehr! Stimmt .* nicht?[/b]
Verfasst: 14.02.2011, 17:07
von Lavz
Ich muss dazu jetzt sagen, dass der Seitenaufbau schon erheblich verlangsamt ist durch mod_rewrite weiss jemand warum?
Hier das File:
Code: Alles auswählen
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule (.*)\.html$ index.php?s=$1
RewriteRule ^([^.]+)\.html$ $1.php [L]
RewriteRule ^datei-(.*)-(.*).htm$ /datei.php?id=$2&name=$1 [L]
Würde ausserdem gerne letzteres damit nur $1 in der .htm URL übernommen wird.
Verfasst: 14.02.2011, 17:08
von Synonym
Wie gesagt, Du denkst falsch rum und verwechselst auch immer wieder "weiterleiten" und "umschreiben".
Wenn Du in der URL-Zeile suche.html eintippen willst und dann das Script suche.php aufgerufen werden soll, dann brauchst Du:
Das da ruft intern die suche.php auf, wenn in der URL suche.html steht
Code: Alles auswählen
RewriteRule ^suche\.php$ /suche.html [R=301,L]
Das da ist eine Weiterleitung und zwar von suche.php (in der URL-Zeile) nach suche.html (in der URL-Zeile)
Codes sind nur Beispiele, ungetestet.
Und was wir die ganze Zeit schreiben... Damit suche.html in der URL steht (intern wird suche.php) aufegrufen, musst Du natürlich den Link zur Suchfunktion entsprechend ändern. Ebenso alles andere auch.
Verfasst: 14.02.2011, 17:11
von Lavz
Ja sorry das hab ich jetzt verstanden. Könntest du dazu noch was sagen?
Lavz hat geschrieben:Ich muss dazu jetzt sagen, dass der Seitenaufbau schon erheblich verlangsamt ist durch mod_rewrite weiss jemand warum?
Hier das File:
Code: Alles auswählen
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule (.*)\.html$ index.php?s=$1
RewriteRule ^([^.]+)\.html$ $1.php [L]
RewriteRule ^datei-(.*)-(.*).htm$ /datei.php?id=$2&name=$1 [L]
Würde ausserdem gerne letzteres damit nur $1 in der .htm URL übernommen wird.
Verfasst: 14.02.2011, 17:13
von Synonym
verlangsamt....
weil das unfug ist:
RewriteRule (.*)\.html$ index.php?s=$1
Du rufst also bei allem was ***.html in der URL hat, intern die index.php?s=*** auf...
um danach, weil es kein Ende [L] gibt
für alles was wiederum mit .html endet die ***.php aufzurufen (intern)
Ein Aufruf von vogel.html ergibt also über die htaccess
einen internen Aufruf von index.php?s=vogel
und danach gleich einen von vogel.php
Verfasst: 14.02.2011, 17:17
von Synonym
RewriteRule ^datei-(.*)-(.*).htm$ /datei.php?id=$2&name=$1 [L]
Würde ausserdem gerne letzteres damit nur $1 in der .htm URL übernommen wird.
Wie gesagt, das hat mit der URL nichts zu tun, da wird nichts übernommen, das ist ein interner Aufruf eines Files, mehr nicht.
"datei-hunde-haufen.html" ruft intern "datei.php?id=haufen&name=hunde" auf
Mach doch mal ein normales Beispiel, ohne Platzhalter, Sterne oder sonstwas, also eine URL wie sie ist und was daraus werden soll.
Verfasst: 14.02.2011, 17:23
von Lavz
Kann man es so einstellen, dass "datei-hunde.html" intern "datei.php?id=haufen&name=hunde" aufruft?
Ich habe mal einiges umgeschrieben und dazugenommen:
Code: Alles auswählen
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteRule index/(.*)\.htm$ index.php?s=$1 [L]
RewriteRule themen/(.*)\.htm$ themen.php?s=$1 [L]
RewriteRule suche.htm$ suche.php [L]
RewriteRule ^([^.]+)\.html$ $1.php [L]
RewriteRule ^datei-(.*)-(.*).htm$ /datei.php?id=$2&name=$1 [L]
Auf jeden Fall deutlich schneller als vorher .... Ist noch ein Fehler drin?
Verfasst: 14.02.2011, 17:39
von Synonym
Kann man es so einstellen, dass "datei-hunde.html" intern "datei.php?id=haufen&name=hunde" aufruft?
Also Du kannst auf der linken Seite Platzhalter setzen und diese auf der rechten Seite verwenden. Wenn links also "Hunde" steht, dann kannst Du das nach rechts übernehmen. Links steht aber nicht "Haufen", also kannst Du das dann rechts nur fest vorgeben und das zählt dann für alle Zugriffe. Wenn Du das willst, das geht.
RewriteRule ^datei-(.+)\.html$ index.php?id=haufen&name=$1 [L]
-> Haufen ist da dann aber immer, also die ID ist dann immer gleich. Wäre also auch die Frage, was die ID dann überhaupt für einen Nutzen hat.
Man kann nicht sagen ob da ein Fehler drinnen ist, wenn man nicht weiß, was das denn genau tun soll.
Das schaut zumindest schon mal logisch aus:
RewriteRule index/(.*)\.htm$ index.php?s=$1 [L]
RewriteRule themen/(.*)\.htm$ themen.php?s=$1 [L]
Je nach Ordner wird ein anderes File angefordert
RewriteRule suche.htm$ suche.php [L]
suche.html fordert suche.php an.
RewriteRule ^([^.]+)\.html$ $1.php [L]
also alles was mit .html endet und in den vorherigen Rules nicht erfasst wurde, ruft dann intern selbiges File als .php auf.
Wobei Du da natürlich aufpassen musst....
"/ordner/unterordner/file.html" würde dann "/ordner/unterordner/file.php" anfordern. (soll das so sein?)
Verfasst: 14.02.2011, 17:45
von Lavz
Synonym hat geschrieben:Wobei Du da natürlich aufpassen musst....
"/ordner/unterordner/file.html" würde dann "/ordner/unterordner/file.php" anfordern. (soll das so sein?)
Soweit alles okay, ausser dem letzten.
Nein nur "/ordner/file.html" soll "/ordner/file.php" sein, nicht Unterordner!
Danke dir vielmals