Regel soll auch bei Aufruf ohne Slash funktionieren

Eines der wichtigsten Anwendungsgebiete von mod_rewrite ist das umschreiben von dynamischen in statische URLs um "suchmaschinenfreundliche URLs" zu erzeugen. Aber was ist besser fürs Ranking? http://www.url.com/12_2.htm, http://www.url.com/url,12,2.htm oder doch lieber http://www.url.com/12/2/url/ Fragen zum URL-Design werden hier diskutiert.

Moderator: Super-Mod

Regel soll auch bei Aufruf ohne Slash funktionieren

Beitragvon Bazooka » 06.06.2005 01:20

Hi,

ich habe Regeln a la:

RewriteRule autos/kleinwagen/(.*)/$ /autos/kleinwagen\.php?carname=$1

Folgender Aufruf funktioniert:

http://www.domain.de/autos/kleinwagen/polo/

und folgende funktioniert nicht (sollte aber auch):

http://www.domain.de/autos/kleinwagen/polo


Wie müsste ich die Regel ändern?

Desweiteren würde ich gerne nicht unterscheiden zwischen Groß- und Kleinbuchstaben d.h. beides sollte funktionieren.

Kann jemand helfen?

Vielen Dank
Bazi
Bazooka
.
.
 
Beiträge: 17
Registriert: 15.02.2005 11:06

Beitragvon bruno » 06.06.2005 12:20

ich bin mir jetzt nicht ganz sicher, aber versuch mal:

Code: Alles auswählen
RewriteRule autos/kleinwagen/(.*)/?$ /autos/kleinwagen\.php?carname=$1


Desweiteren würde ich gerne nicht unterscheiden zwischen Groß- und Kleinbuchstaben d.h. beides sollte funktionieren.


siehe mod_rewrite Syntax Stichwort [NC] Flag

Gruß
bruno
bruno
Admin
Admin
 
Beiträge: 198
Registriert: 24.05.2004 14:44
Wohnort: nähe Nürnberg

Beitragvon Bazooka » 07.06.2005 11:58

Hi bruno,

danke für Deine Antwort, das funktioniert tatsächlich aber ich bekomme nun einen Konflikt mit einer anderen Regel:

RewriteRule autos/kleinwagen/ /autos/kleinwagenindex.php

Diese hatte ich noch angegeben um die Seitenübersicht anzuzeigen, rufe ich nun www.domain.de/autos/kleinwagen/ auf, so befindet sich das script anscheinend in der kleinwagen.php (hat dann jedoch keine ID). Muss ich da die zweite irgendwie anpassen?

Gruß
Bazi
Bazooka
.
.
 
Beiträge: 17
Registriert: 15.02.2005 11:06

Beitragvon bruno » 07.06.2005 12:03

poste mal die komplette .htaccess

vielleicht stimmt was mit der Reihenfolge nicht.

Gruß
bruno
bruno
Admin
Admin
 
Beiträge: 198
Registriert: 24.05.2004 14:44
Wohnort: nähe Nürnberg

Beitragvon Bazooka » 08.06.2005 12:08

Hi,

im Grunde sieht die Datei so aus:

-------------------------------------------
Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# Umschreiben dynamische Produktseiten
RewriteRule autos/kleinwagen/(.*)/$ /autos/kleinwagen\.php?carname=$1
RewriteRule autos/mittelklasse/(.*)/$ /autos/mittelklasse\.php?carname=$1
...

# Umschreiben als Ordner
RewriteRule autos/kleinwagen/ /autos/kleinwagenindex.php
RewriteRule autos/mittelklasse/ /autos/mittelklasseindex.php
...

RewriteRule impressum/ /statisch/impressum.php
RewriteRule AGB/ /statisch/agb.php
-------------------------------------------

Das ganze passiert für mehrere Kategorien ist aber im Prinzip immer gleich aufgebaut...

So wie das nun hier steht, geht es wie gesagt solang der Slash vorhanden ist, wenn ich vor das $ ein Fragezeichen mache, geh die obere Regel auch ohne Slash aber dann erhalte ich wie gesagt den anderen Konflikt...

Hilft das weiter?

Vielen Dank
Bazi
Bazooka
.
.
 
Beiträge: 17
Registriert: 15.02.2005 11:06

Beitragvon pumpnet » 08.06.2005 14:07

Hallo Bazooka

Bazooka hat geschrieben:RewriteRule autos/kleinwagen/(.*)/$ /autos/kleinwagen\.php?carname=$1 [L]
...
RewriteRule autos/kleinwagen/$ /autos/kleinwagenindex.php [L]
RewriteRule autos/kleinwagen$ /autos/kleinwagenindex.php [L]


So sollte es sowohl mit als auch ohne gehen. Das [L] bewirkt, dass die weitere Regelverarbeitung abgebrochen wird, du also nicht in die nächste Umwandlung reinläufst, dass $, dass nach dem "kleinwagen", auch wirklich nicht noch etwas anderes folgt, zB ein "index.php".
Ob Du in der ersten Regel das ...\.php?... benutzen musst, oder mit einem einfachen ....php?... auskommst, musst Du ausprobieren.

Best,
pumpnet
--
http://www.pumpnet.de
pumpnet
.
.
 
Beiträge: 14
Registriert: 06.09.2004 15:34

Beitragvon Bob » 08.06.2005 15:03

Ob Du in der ersten Regel das ...\.php?... benutzen musst, oder mit einem einfachen ....php?... auskommst, musst Du ausprobieren.
Der Punkt muss dort nicht escaped werden, da auf der rechten Seite keine RegEx steht ;)

Die Schrelfe entsteht durch autos/kleinwagen/(.*)/?$, da auch das PHP-URL resultat auf diese regEx matched
Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# Umschreiben dynamische Produktseiten
RewriteRule ^autos/(kleinwagen|mittelklasse)/([^./]+)/?$ /autos/$1.php?carname=$2 [L]

...

# Umschreiben als Ordner
RewriteRule ^autos/(mittelklasse|kleinwagen)/?$ /autos/kleinwagenindex.php [L]
...

RewriteRule ^impressum/?$ /statisch/impressum.php
RewriteRule ^AGB/?$ /statisch/agb.php [L]


Von einem optionalen Spash würde ich absehen; vielmehr einen 301 externen redirect auf die URL mit Slash senden (-> doppelter content)
Bob
Moderator
Moderator
 
Beiträge: 5050
Registriert: 01.10.2004 13:10

Beitragvon pumpnet » 08.06.2005 15:34

Caterham hat geschrieben:
Ob Du in der ersten Regel das ...\.php?... benutzen musst, oder mit einem einfachen ....php?... auskommst, musst Du ausprobieren.
Der Punkt muss dort nicht escaped werden, da auf der rechten Seite keine RegEx steht ;)


Sagt' ich doch ;-)

Caterham hat geschrieben:Von einem optionalen Spash würde ich absehen; vielmehr einen 301 externen redirect auf die URL mit Slash senden (-> doppelter content)


Hm, meinst Du die SUMAs sind so kindisch gleichen Inhalt auf verz und verz/ doppelt in den index zu nehmen? Ich glaube nicht.
Fakt ist doch, dass nur verz eigentlich gar keinen Dateitypen hat, es als Verzeichnis vom Client erfragt wird, der Server sagt, "okay, das ist ein Verzeichnis, hier ist die index.??? dazu"
Dh, die SUMA geht in beiden Fällen verz und verz/ davon aus, dass es ein Verzeichnis ist, die angezeigeten Infos aus einer entsprechenden Datei kommen. Warum also sollten die SUMAs zwischen verz und verz/ unterscheiden?
pumpnet
.
.
 
Beiträge: 14
Registriert: 06.09.2004 15:34

Beitragvon Bob » 08.06.2005 15:47

Warum also sollten die SUMAs zwischen verz und verz/ unterscheiden?
Das sind unteschiedliche Seiten. Dabei wird nicht auf den Inhalt der Seiten sondern alleine auf die URL abgestellt. Und die ist unterschiedlich.

Wenn es ein reales Verzeichnis ist, wird der Server automatisch einen 301 ext. Redirect auf verz/ senden.
Bob
Moderator
Moderator
 
Beiträge: 5050
Registriert: 01.10.2004 13:10

Beitragvon Bazooka » 08.06.2005 17:20

Hi,

vielen Dank für Eure Mühe und Hilfe, also bis jetzt habe ich es hinbekommen und benutz nun diese Regel(n):
RewriteRule ^autos/(kleinwagen)/([^./]+)/?$ /autos/kleinshow.php?carname=$1 [L]
...

Caterham hat geschrieben:Von einem optionalen Spash würde ich absehen; vielmehr einen 301 externen redirect auf die URL mit Slash senden (-> doppelter content)


Das ist ein sehr interessanter Einwand, ich habe das Problem eigentlich auch nur weil zwar auf der Seite die Links alle mit abschließenden Slash erzeugt werden, Yahoo allerding diesen dann weglässt wodurch die Seite (über die Suchmaschine) nicht erreichbar ist. Meine Frage ist nur wie soll ich das umsetzen, kann ich mir nun die vorige Regel wieder sparen und mach eine neue für alle Links ohne Slash oder mache ich einfach eine zusätzliche? In beiden Fällen habe ich keine Ahnung von der Umsetzung, oder reichen dann Regeln a la:

RewriteRule autos/kleinwagen/(.*) autos/kleinwagen/(.*)/$ [R=301,L]
RewriteRule autos/kleinwagen autos/kleinwagen/ [R=301,L]

?

Vielen Dank
Bazi
Bazooka
.
.
 
Beiträge: 17
Registriert: 15.02.2005 11:06

Beitragvon Bob » 09.06.2005 00:18

per:

Code: Alles auswählen
RewriteRule ^autos/kleinwagen/([^./]+)$ /autos/kleinwagen/$1/ [R=301,L]
RewriteRule ^autos/kleinwagen/([^./]+)/$ /autos/kleinshow.php?carname=$1 [L]
Bob
Moderator
Moderator
 
Beiträge: 5050
Registriert: 01.10.2004 13:10

Beitragvon pumpnet » 09.06.2005 10:19

Caterham hat geschrieben:
Warum also sollten die SUMAs zwischen verz und verz/ unterscheiden?
Das sind unteschiedliche Seiten. Dabei wird nicht auf den Inhalt der Seiten sondern alleine auf die URL abgestellt. Und die ist unterschiedlich.

Was Du sagst in Ehren, aber ich kann es immer noch nicht gauben. Hast Du ein Beispiel, dass eine SUMA eine Url mit und ohne End-Slash in den Suchergebnissen hat? Ist mir noch nicht unter gekommen.

Caterham hat geschrieben:Wenn es ein reales Verzeichnis ist, wird der Server automatisch einen 301 ext. Redirect auf verz/ senden.


Einverstanden.
pumpnet
.
.
 
Beiträge: 14
Registriert: 06.09.2004 15:34

Beitragvon bruno » 09.06.2005 11:22

pumpnet hat geschrieben:Was Du sagst in Ehren, aber ich kann es immer noch nicht gauben. Hast Du ein Beispiel, dass eine SUMA eine Url mit und ohne End-Slash in den Suchergebnissen hat? Ist mir noch nicht unter gekommen.


Interessante Frage - Sieht so aus, als ob Google bei (realen?) Verzeichnisen hinten immer einen Slash anhängt: hier

Sicher ist: primitiver Duplicate Content wird in den Index aufgenommen, ob es schadet - sieht nicht so aus: hier

Gruß
bruno
bruno
Admin
Admin
 
Beiträge: 198
Registriert: 24.05.2004 14:44
Wohnort: nähe Nürnberg

Beitragvon pumpnet » 09.06.2005 11:49

bruno hat geschrieben:
pumpnet hat geschrieben:Was Du sagst in Ehren, aber ich kann es immer noch nicht gauben. Hast Du ein Beispiel, dass eine SUMA eine Url mit und ohne End-Slash in den Suchergebnissen hat? Ist mir noch nicht unter gekommen.


Interessante Frage - Sieht so aus, als ob Google bei (realen?) Verzeichnisen hinten immer einen Slash anhängt: hier


Bei existierenden Verzeichnissen hat Caterham ja ein plausible Erklärung geliefert, dass der Webserver das selbst anstößt. Google zeigt aber alle Urls mit End-Slash an, auch wenn man direkt nach ohne-Slash sucht, wie in Deinem Beispiel.

bruno hat geschrieben:Sicher ist: primitiver Duplicate Content wird in den Index aufgenommen, ob es schadet - sieht nicht so aus: hier


Weder die Ersten Zwei sind per Definition Duplicate Content (Anderes Datum im Abstract), noch die zweiten Zwei (unterschiedliche Dateigröße im Cache).

Das index.php nicht gleichbedeutend ist mit verz/ liegt daran, dass man in der .htaccess ja einen anderen DirectoryIndex einstellen kann (zB default.html), sprich index.* könnte einen völlig normale Seite sein, die sich formal in nichts von Seite.* unterscheidet.
pumpnet
.
.
 
Beiträge: 14
Registriert: 06.09.2004 15:34

Beitragvon Bob » 13.07.2005 19:38

Google zeigt aber alle Urls mit End-Slash an
indiziertwerden aber beide Seiten.

kurzzeitig anwesend grüßt
Robert
Bob
Moderator
Moderator
 
Beiträge: 5050
Registriert: 01.10.2004 13:10

Nächste

Zurück zu URL-Design

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste