Zur Navigation

Suchmaschinenfreundliche Url´s mod_rewrite

1 Klick4

Hallo, da ich nicht so viel plan von der .htacces habe, dache ich, ich kann mein Problem mal in diesem Forum stellen.
Also ich habe volgenden Link in meiner Browserleiste:
http://www.klick4.de/?content=/intern/anmelden
Nun wollte ich einige urls, die ja nur im ausgeloggten zustand für suchmaschinen sichtbar sind, freundlicher gestallten. Also habe ich mir eine .htaccess mit folgendem Inhalt angelegt.
RewriteRule ^anmelden$ /index.php?content=/intern/anmelden
Dann habe ich den Link noch in der php Datei angepasst also
<a href="anmelden">
Mein problem ist jetzt, dass ich alle Links anpassen muss, da ja sonst folgendes passiert:
http://www.klick4.de/anmelden?content=/intern/faqs
und das will ich umgehen. Gibts da vieleicht eine Lösung dafür oder eventuell auch eine ganz andere Vorgehensweise? Wäre für Hilfe wirklich dankbar.

06.05.2010 14:16

2 Jörg Kruse

Zitat von Klick4
Also habe ich mir eine .htaccess mit folgendem Inhalt angelegt.
RewriteRule ^anmelden$ /index.php?content=/intern/anmelden

Ich würde den Slash am Anfang weglassen:

RewriteRule ^anmelden$ index.php?content=/intern/anmelden

Dann habe ich den Link noch in der php Datei angepasst also
<a href="anmelden">
Mein problem ist jetzt, dass ich alle Links anpassen muss, da ja sonst folgendes passiert:
http://www.klick4.de/anmelden?content=/intern/faqs
und das will ich umgehen.

Das kann ich nicht nachvollziehen - wann passiert das, d.h. welche URL rufst du auf? und wieso musst du alle Links anpassen? die RewriteRule betrifft doch nur die URL "/anmelden"?

06.05.2010 17:20

3 Klick4


Ich würde den Slash am Anfang weglassen:
Wenn ich diesen weg lasse, bekomme ich einen 404error.
Nochmal meine .hatccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^klick4.de$ [NC]
RewriteRule ^(.*) http://www.klick4.de/$1 [R=301]

RewriteRule ^anmelden$ /index.php?content=/intern/anmelden
Wenn ich jetzt einen Link öffne, den ich NICHT in der php Datei umgeschrieben habe erhalte ich folgenden Link im Browser: http://www.klick4.de/anmelden?content=/intern/mediadaten
<a href="?content=/intern/mediadaten"><span>Mediadaten</span></a>

Dieser ist aber falsch, da ja nur ?content=/intern/mediadaten hinter http://www.klick4.de/anmelden geschrieben wird.

Richtig müsste es also lauten:http://www.klick4.de/?content=/intern/mediadaten.
Denn ich möchte ja nicht alle links umschreiben müssen, da das in allem über 100links wären.

Gerne können sie das auch selbst einmal auf der Seite testen. Klicken sie erst auf registrieren in der navigationsleiste und dann auf Mediadaten um zu verstehen was ich meine.

06.05.2010 18:30 | geändert: 06.05.2010 18:44

4 Jörg Kruse

<a href="?content=/intern/mediadaten"><span>Mediadaten</span></a>

Das ist natürlich doof verlinkt, weil damit immer die aktuelle Seite aufgerufen wird - und wenn diese sich ändert, ändert sich auch das Linkziel. Besser ist es immer, absolut zu verlinken, also z.B. so:

<a href="/?content=/intern/mediadaten"><span>Mediadaten</span></a>

Dann stimmen die Links, egal von welcher Seite sie aufgerufen werden. Um das Ändern der Links wirst du hier wohl leider nicht herumkommen.

06.05.2010 20:47 | geändert: 06.05.2010 20:50

5 Klick4

Okay, erstmal vielen dank für deine Hilfe. Habe jetzt mal die Links alle geändert und stoße gleich aufs nächste Problem.

Jetzt ist die Url über http://www.klick4.de/mediadaten.html
und http://www.klick4.de/?content=/intern/mediadaten
erreichbar.

Dadurch habe ich dann doppelten content und kann passieren, dass meine Seite dann abgestraft wird. Kann man in der .htaccess dann auch definieren, dass der link nur über http://www.klick4.de/mediadaten.html erreichbar ist?

06.05.2010 22:24

6 Jörg Kruse

Ich würde es so probieren (die Rule möglichst weit oben einfügen):

RewriteCond %{THE_REQUEST} \?content=
RewriteCond %{QUERY_STRING} content=/intern/(.+)
RewriteRule ^$  http://www.klick4.de/%1.html?[R=301,L]

Das sollte pauschal von http://www.klick4.de/?content=/intern/irgendwas nach http://www.klick4.de/irgendwas.html weiterleiten

06.05.2010 22:40

7 Klick4

Naja fast, gebe ich im Browser jetzt
http://www.klick4.de/?content=/intern/anmelden
ein, fügt er dann
http://www.klick4.de/anmelden.html?%5bR=301,L%5d in die adresszeile.
Und wenn ich
http://www.klick4.de/index.php?content=/intern/anmelden
eingebe, so bleibt der link im Browser. Also habe ich jetz 3 fachen content.

1. http://www.klick4.de/?content=/intern/anmelden
2. http://www.klick4.de/anmelden.html?%5bR=301,L%5d
3. http://www.klick4.de/anmelden.html

Hier nochmal meine .htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^klick\4.de$
RewriteRule ^/?$ "http\:\/\/www\.klick\4\.de" [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?klick4.de$ [NC]

RewriteCond %{THE_REQUEST} \?content=
RewriteCond %{QUERY_STRING} content=/intern/(.+)
RewriteRule ^$  http://www.klick4.de/%1.html?[R=301,L]
 
RewriteRule ^anmelden.html$   /index.php?content=/intern/anmelden [L]
RewriteRule ^mediadaten.html$ /index.php?content=/intern/mediadaten [L]
RewriteRule ^agbs.html$       /index.php?content=/intern/agbs [L]
RewriteRule ^faqs.html$	      /index.php?content=/intern/faqs [L]
RewriteRule ^impressum.html$  /index.php?content=/intern/impressum [L]

06.05.2010 22:56 | geändert: 06.05.2010 22:59

8 Jörg Kruse

Jups, da habe ich ein Leerzeichen vor dem Weiterleitungs-Flag unterschlagen:

RewriteCond %{THE_REQUEST} \?content=
RewriteCond %{QUERY_STRING} content=/intern/(.+)
RewriteRule ^$  http://www.klick4.de/%1.html? [R=301,L]

... und so sollte auch /index.php erfasst werden:

RewriteCond %{THE_REQUEST} \?content=
RewriteCond %{QUERY_STRING} content=/intern/(.+)
RewriteRule ^(index\.php)?$  http://www.klick4.de/%1.html? [R=301,L]

06.05.2010 23:06

9 Klick4

1000 Dank für deine Hilfe. Hast mir echt weiter geholfen, nettes Forum :-)

06.05.2010 23:18

10 Klick4

Ach misst, jetzt funktioniert das ausloggen nicht mehr.
<a href="/?content=/intern/startseite&amp;logout=true">
In der Browserzeile steht dann
http://www.klick4.de/startseite&logout=true.html
und ist ein 404 fehler.

06.05.2010 23:57