url rewrite mit .htaccess?

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Antworten
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

url rewrite mit .htaccess?

Beitrag von dutch »

Hallo zusammen,

ich bekomme immer wieder die Frage von Kunden nach SEO freundlichen URLs.

Aus z.B.

Code: Alles auswählen

http://meinseite.de/cpo/verzeichnis/index.php?rubric=Rubrikname
soll dann eben das werden:

Code: Alles auswählen

http://meinseite.de/verzeichnis/rubrikname
Ich habe inzwischen einige .htaccess scripts ausprobiert, bekomme das aber nicht so richtig hin.

Hat jemand vielleicht schon ein für CPO erprobtes script?

Vielen Dank!

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ein grundsätzlicher Fehler ist ja schon mal überhaupt ein Verzeichnis "cpo" zu erstellen. Am besten ConPresso in root-Verzeichnis der Domain bzw. die Domain direkt auf ConPresso-Verzeichnis zeigen lassen.

Ansonsten sollte

Code: Alles auswählen

RewriteEngine on
RewriteRule ^(.*)/(.*)$ cpo/$1/index.php?rubric=$2 [R=301]
doch zum gewünschten Ergebnis führen.

Das [R=301] kannst Du nach dem Testen wegnehmen, damit die Suchmaschinen nicht die Umleitung sehen, sonst wäre es ja kein SEO.

Dann sind aber Detailseiten und Archiv noch außen vor...
... und Module, Suche, etc.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Eine URL wie
http://meinseite.de/verzeichnis/index.p ... Rubrikname
ist übrigens bereits suchmaschinenfreundlich, das Gegenteil behaupten nur die üblichen SEO-Nervensägen, die einem sagen wollen, wie schlecht die Seite doch ist... selbst aber bei Google auf Seite 10 stehen während die bemängelte Seite auf Seite 1 "nur" auf Platz 5 steht...

Viel suchmaschinenfeindlicher sind nicht aktuelle Seiten, die erkennbar kaum Änderungen erfahren.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

danke für das script, werde ich gleich einmal testen.

Dass das Verzeichnis cpo nicht ideal ist, ist schon klar, und probiere ich auch wenn möglich zu vermeiden. Ich habe das eher als worst case in die url mit reingeschrieben, da ich bei einigen Kunden mit recht chaotischen Serverzuständen kämpfe. Dann ist es mir doch lieber, das System in einem separaten Ordner unterzubringen.

Was die Suchmaschinenfreundlichkeit angeht, da glaube ich auch, dass die Leute oft SEO freundlich mit human readable verwechseln.
Wie auch immer, wenn sie SEO sagen und human readable meinen, dann habe ich jetzt wenigsten was, das ich ihnen anbieten kann ;)

Danke sehr!

Gruß,
dutch
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Habe es eben getestet, aber dabei scheint zu dem bestehenden /cms nochmal eine /cms in den Pfad eingebaut zu werden, anstatt das bestehende rauszuschmeißen... :shock:
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Wo liegt die htaccess denn? Im Root oder im CPO-Verzeichnis?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Ich hatte sie erst in root und als das nicht funzte auch einmal in cpo, aber bei beiden Varianten wurde eine Fehlerseite ausgegeben mit einem Pfad, der u.a. /cms/cms/... enthielt.

EDIT:
Damit keine Missverständnisse entstehen: Ich habe das cpo in deinem Script in cms geändert, da eben das Verzeichnis im vorliegenden Fall so heißt...
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Kommt wohl immer auf den Server drauf an. Probiere doch mal

Code: Alles auswählen

RewriteEngine on 
RewriteRule ^(.*)/(.*)$ http://meinseite.de/cms/$1/index.php?rubric=$2 [R=301]
Wobei klar sein sollte, dass es darum geht das "cms" da einzubauen!

Es soll ja eine URL in der Form
http://meinseite.de/verzeichnis/rubrikname
eingegeben werden und daraus
http://meinseite.de/cms/verzeichnis/ind ... Rubrikname
werden, damit CPO weiß was es zu tun gibt!

Auf http://meinseite.de/verzeichnis/rubrikname kann CPO ja gar nicht reagieren!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Ja, ist schon klar.
Aber was macht man, wenn jemand schon mit der richtigen (kompletten) URL aufruft?
Dann wird das cms, wie gesagt, nochmal eingebaut und verhaut damit die URL.

Leider baut das Script bei mir kein cms ein, wenn die verkürzte URL aufgerufen wird...
Weder in der ersten noch in der zweiten Variante.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Falls Du das direkt mit dem eigenen Browser probiert wirst Du ggf. durch dessen DNS-Speicher überlistet.

Probiere Deine URLs besser hier aus: http://web-sniffer.net/

Wenn nun die echte URL benutzt wird, dann müssen da eben noch Bedingungen reingebaut werden.
Aber das ist eben das Problem, dass es ja nicht nur einen URL-Aufbau gibt sondern viele, und die müssen alle berücksichtigt werden.

Ich habe da auch kein Rezept, habe nur in einem Auftritt einzelne URLs umgeleitet.
Mit genügend Bedingungen und Regeln kriegt man das aber hin, bringen tut es nur gar nichts.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Dann ist es vielleicht doch wieder an der Zeit, lieber auf Überzeugungsarbeit beim Kunden zu setzen, als auf sinnlose Arbeit an der URL :lol: :lol:

Aber auf jedenfall danke für die Mühe. Jetzt weiß ich auf jeden Fall wieder etwas mehr!

Gruß,
dutch
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Ich lasse schon seit Jahren die URLs umschreiben von

http://meinseite.de/cms/index.php?rubric=Rubrikname

nach

http://meinseite.de/cms/Rubrikname.html

klappt einwandfrei.
Günther Ludwig
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Mr. Magpie,

klingt gut! Wie sieht denn deine .htaccess aus?
Der SEO Fachmann meines Kunden ist weiterhin überzeugt, dass eine URL ohne Parameter besser ist für Suchmaschinen als eine mit, auch wenn ich da MarkusR recht gebe, dass das eigentlich irrelevant sein sollte.

Aber human readable ist ja auch schon ein gewisser Vorteil.

Gruß,
dutch
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Folgendermaßen sieht der relevante Teil meiner .htaccess aus, sodass Rubrikadressen immer die Form http://www.domain.tld/Rubrikverzeichnis/Rubrikname.html haben:

Code: Alles auswählen

RewriteEngine on

# Rewriting nicht für Modulverzeichnisse
RewriteCond %{REQUEST_URI} !^/mod_
# Hier die "legalen" Rubrik-Verzeichnisse auflisten, um Soft-404-Fehler zu vermeiden (ODER-verküpft, wenn mehrere!)
RewriteCond %{REQUEST_URI} ^/Kontakt [OR]
RewriteCond %{REQUEST_URI} ^/cms
# Rewriting nicht für Unterverzeichnisse der Rubrik-Verzeichnisse
RewriteCond %{REQUEST_URI} !^/[^_].+/.*/
# Beachte: Rewriting nicht für alle Verzeichnisse, die mit Unterstrich beginnen - wird _rubric verwendet, dann eckige Klammer in obiger RewriteCond und der RewriteRule entfernen
RewriteRule  ^([^_].+)/(.+)\.html$ /$1/index.php?rubric=$2


RewriteCond %{REQUEST_URI} !^/mod_
# mod_form-Verzeichnis "Kontakt" muss hier mit angegeben werden, damit Captcha sichtbar
RewriteCond %{REQUEST_URI} !^/Kontakt
RewriteCond %{REQUEST_URI} ^/[^_].+/.*/
RewriteRule ^(.*)$ http://www.domain.tld/404.php [R=404]
Um "Duplicate Content" zu vermeiden, muss dafür gesorgt werden, dass ConPresso selbst und die Module nur Rubriklinks in der Form http://www.domain.tld/Rubrikverzeichnis/Rubrikname.html erzeugen.
Hier ein paar Beispiele für Änderungen, die ich bei CPO 4.0.x und Modulen einsetze:

Code: Alles auswählen

..\_editor\editor.php
=====================

// ********** Links auf Rubriken mit mod_rewrite ********** Teil 1/1 ***** Anfang *****
/* Originalzeile
htmlspecialchars(BASE_ABS.$db->v('directory').'/index.php?rubric='.urlencode($db->v('name'))),
   geändert zu */
htmlspecialchars(BASE_ABS.$db->v('directory').'/'.urlencode($db->v('name')).'.html', ENT_COMPAT, 'ISO-8859-15'),
// ********** Links auf Rubriken mit mod_rewrite ********** Teil 1/1 *****  Ende  *****



..\_include\form_fields.inc.php
===============================

// ********** Links auf Rubriken mit mod_rewrite ********** Teil 1/1 ***** Anfang *****
/* Originalzeile
htmlspecialchars(BASE_ABS.$db->v('directory').'/index.php?rubric='.urlencode($db->v('name'))),
   geändert zu */
htmlspecialchars(BASE_ABS.$db->v('directory').'/'.urlencode($db->v('name')).'.html', ENT_COMPAT, 'ISO-8859-15'),
// ********** Links auf Rubriken mit mod_rewrite ********** Teil 1/1 *****  Ende  *****



..\_include\parser_r_value.inc.php
==================================

// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 ***** Anfang *****
/* Originalzeilen:
    $_t = sprintf('<a href="../%s/index.php?rubric=%s">%s</a>', 
        htmlspecialchars($content[$key]['rubricdirectory']), 
        urlencode($content[$key]['rubricid']), 
        htmlspecialchars($content[$key]['rubrictitle']) 
    ); 
   ersetzt durch: */
    $_t = sprintf('<a href="../%s/%s.html">%s</a>', 
        htmlspecialchars($content[$key]['rubricdirectory'], ENT_COMPAT, 'ISO-8859-15'), 
        urlencode($content[$key]['rubricname']), 
        htmlspecialchars($content[$key]['rubricname'], ENT_COMPAT, 'ISO-8859-15') 
    ); 
// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 *****  Ende  *****



..\_include\printnavigation.inc.php
===================================

// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 ***** Anfang *****
/* Originalzeile:
            $link = BASE_ABS.$v['rubric']['directory'].'/index.php?rubric='.urlencode($v['rubric']['name']);
   ersetzt durch: */
            $link = BASE_ABS.$v['rubric']['directory'].'/'.urlencode($v['rubric']['name'].'.html');
// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 *****  Ende  *****



..\mod_search\includes\parser.inc.php
=====================================

// ********** Modifikation für SEO-gemäße Suchergebnis-Links ********** Teil 1/1 ***** Anfang *****
/* Die Zeile:
            $link = BASE_REL . $rubrics[$v['rubric_id']]['directory'] . '/index.php?rubric=' . urlencode($rubrics[$v['rubric_id']]['name']) . '&nr='.(int)$v['nr'].'#'.(int)$v['nr'];
   ersetzt durch: */
            $link = htmlspecialchars(BASE_REL . $rubrics[$v['rubric_id']]['directory'] . '/' . urlencode($rubrics[$v['rubric_id']]['name']) . '.html', ENT_COMPAT, 'ISO-8859-15') . '#'.(int)$v['nr'];
// ********** Modifikation für SEO-gemäße Suchergebnis-Links ********** Teil 1/1 *****  Ende  *****

   
   
..\mod_breadcrumbnavi\_include\function.php
===========================================

// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 ***** Anfang *****
/* Originalzeile:
            $link = BASE_URL.$v['rubric']['directory'].'/index.php?rubric='.urlencode($v['rubric']['name']);
   ersetzt durch: */
            $link = BASE_URL.$v['rubric']['directory'].'/'.urlencode($v['rubric']['name'].'.html');
// ********** Rubrik-Link für mod_rewrite erzeugen  ********** Teil 1/1 *****  Ende  *****

   
   
..\mod_sitemap\functions.inc.php
================================

// PATH_INFO disabled
if (isset($v['rubric']['directory']) && !$GLOBALS['cpoSystem']['PATH_INFO']) {
// ********** Modifikation für SEO-gemäße Links ********** Teil 1/1 ***** Anfang *****
/* Die Zeile:
       $link = BASE_URL.$v['rubric']['directory'].'/index.php?rubric='.urlencode($v['rubric']['name']);
   ersetzt durch: */
       $link = BASE_URL.$v['rubric']['directory'].'/'.urlencode($v['rubric']['name'].'.html');
// ********** Modifikation für SEO-gemäße Links ********** Teil 1/1 *****  Ende  *****
}
Günther Ludwig
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Noch was vergessen: Die index.php im Hauptverzeichnis von ConPresso sieht im laufenden Betrieb bei mir folgendermaßen aus, damit auch hier Google und Konsorten die Human Readable-Adresse bekommen:

Code: Alles auswählen

<?php
define('CPO', true);
require_once('_include/common.inc.php');
header("HTTP/1.1 301 Moved Permanently");
/* if (SID!='')
    header('Location: '.BASE_ABS.$cpoSystem['homepage'].(stristr(BASE_ABS.$cpoSystem['homepage'], '?')===FALSE ? '?'.SID : '&'.SID));
else
    header('Location: '.BASE_ABS.$cpoSystem['homepage']);
*/
header("Location: http://www.domain.tld/Rubrikverzeichnis/Home.html");
?>
Günther Ludwig
Antworten