Seite 1 von 1

Wie kann ich das beseitigen?

Verfasst: 05.08.2006, 15:39
von Michael1967
Hallo,

ich habe da ein Problem.

Bei mir werden php-Links per mod_rewrite in html-Links umgewandelt. Zusätzlich wird der Titel von einem Eintrag in einen Link umgeandelt.

Beispiel: Es wird ein Eintrag mit dem Titel - Günstig einkaufen - hinzugefügt.

Der Link zum Eintrag schaut dann so aus: https://www.domain.de/eintrag-20-Guenst ... aufen.html

Nun habe ich ein Problem. Googel und auch andere Suchmaschinen rufen Links auf, die es gar nicht gibt. Und das alles, weil ich versehentlich einen falschen Titel/Link hinzugefügt habe.

Der Titel dieses Links schaute so aus: CDU/CSU

Das Zeichen / wurde nicht in - umgewandelt, so dass einige Suchmaschinen nun solche Links aufrufen -

https://www.domain.de/eintrag-1064-CDU/ ... erung.html

Wie kann ich den Aufruf solcher Links unterbinden?

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: 05.08.2006, 16:22
von net(t)worker
zukünftig darauf achten, dass ein / im Titel richtig für die URL umgewandelt wird...

wenn es sich dann auch nur um ein paar wenige URL's handelt, könnteste die über ein 301 auf die richtige URL umleiten... dann vergisst google die fehlerhaften URL's auch mit der Zeit...

ggf. ist es ja auch möglich über ein kleines php script die richtige URL zu erstellen und darauf per 301 weiterzuleiten. in der url hast du die id des Eintrages ja immer dabei... also wäre es evtl. sogar sinnvoll in deinem script die gesamte URL jedesmal zu überprüfen, wenn ok seite ausgeben, wenn nicht 301 auf richtige url... so könntest du später also auch mal einen Titel und somit die url ändern, und google und co bekommen es automatisch mitgeteilt....

Verfasst: 05.08.2006, 17:19
von Michael1967
ggf. ist es ja auch möglich über ein kleines php script die richtige URL zu erstellen und darauf per 301 weiterzuleiten. in der url
Wie müsste man sowas denn angehen? Ich habe keine Vorstellung/Ideen in dieser Richtung.

Verfasst:
von

Verfasst: 05.08.2006, 17:57
von net(t)worker
die software erstellt doch jetzt auch schon die Links aus der db anhand der eintragsid... und die richtige eintragsid hast du bei den schadhaften Links doch auch, oder? Also könntest du die richtigen Links für jede eintragsid aus der db erstellen und darauf weiterleiten lassen...

Verfasst: 05.08.2006, 18:00
von Michael1967
Ja genau das wäre die Lösung. Aber mit meinen Kentnissen wird das wohl nix.

Hast du nicht einen Beispielcode? Nur den Aufbau, die Abfragen bekomme ich bestimmt selbst hin. *freundlichfrag*

Verfasst: 05.08.2006, 21:26
von 800XE

Code: Alles auswählen

function make301($goto)
{
  header("HTTP/1.1 301 Moved Permanently"); 
  header("Location: http://$goto"); // Umleitung des Browsers
  exit;
}

Verfasst: 05.08.2006, 23:30
von Michael1967
Das macht was? Und wie prüfe ich auf die Richtigkeit der URL?

Das geht doch gar nicht. Oder?

Verfasst: 06.08.2006, 00:40
von 800XE
Michael1967 hat geschrieben:Das macht was? Und wie prüfe ich auf die Richtigkeit der URL?

Das geht doch gar nicht. Oder?
mein Code da oben macht eine Weiterleitung

URL überprüfen ... z.B.

Code: Alles auswählen

  $query = "SELECT * FROM datenbank ";
  $query.= " WHERE id=$id";
  $result=mysql_query&#40;$query&#41; or die&#40;"<b>$query</b>&#58;<br> " . mysql_error&#40;&#41;&#41;;
  if&#40; $line = mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41; &#41;
  &#123;
    $viewurl = '/'.$line&#91;rubrik&#93;.'/'.hl2fn&#40;$line&#91;headline&#93;&#41;.'.html';
    if &#40; $_SERVER&#91;REQUEST_URI&#93;
    == $viewurl   &#41;
    $content.=$line&#91;content&#93;;
   else
   make301&#40; 'meinedomain.tld'.$viewurl &#41;;
  &#125;
  else make301&#40; 'meinedomain.tld' &#41;;
so ungefähr

du nimmst die InhaltsID
ermittelst den Datensatz
generierst den dateinamen, vergleichst in mit der Umgebungsvariable $_SERVER[REQUEST_URI]
wenn identisch = COntent ausgeben
wenn unterschiedlich = Weiterleitung durchführen

Verfasst: 06.08.2006, 00:43
von Michael1967
Das werde ich gleich mal ausprobieren.

Vielen Dank für deine Hilfe. :D

Verfasst: 06.08.2006, 00:49
von 800XE
Michael1967 hat geschrieben:Das werde ich gleich mal ausprobieren.

Vielen Dank für deine Hilfe. :D
ok, ergänzent ....
hab daoben eine Funktion mit drin die ich mir mal gebastelt habe
(geht auch per Regexpresion, wenn man sich damit auskennt)

Code: Alles auswählen

/***********************************************************************
 *   Headline 2 FileName -- umwandeln
 **********************************************************************/
function hl2fn&#40;$headline, $low=0&#41;
&#123;
              $headline = hl2fn2&#40;trim&#40;$headline&#41;&#41;;
  if &#40; $low &#41; $headline = strtolower&#40; $headline &#41;;
  return&#40;     $headline                         &#41;;
&#125;

/***********************************************************************
 *   Headline 2 Subdomain -- umwandeln
 **********************************************************************/
function hl2fn2&#40;$headline&#41;
&#123;
//        $headline= strtok&#40;$headline, " "&#41;;
        $headline= str_replace&#40;chr&#40;153&#41;, " TM", $headline &#41;;
        $headline= str_replace&#40;chr&#40;232&#41;, "e", $headline &#41;;
        $headline= str_replace&#40;chr&#40;233&#41;, "e", $headline &#41;;
        $headline= str_replace&#40;chr&#40;234&#41;, "e", $headline &#41;;
        $headline= str_replace&#40;chr&#40;235&#41;, "e", $headline &#41;;
        $headline= str_replace&#40;chr&#40;174&#41;, "R", $headline &#41;;
        $headline= str_replace&#40;"¤", "e", $headline &#41;;
        $headline= str_replace&#40;"`", " ", $headline &#41;;
        $headline= str_replace&#40;"²", "2", $headline &#41;;
        $headline= str_replace&#40;"_", " ", $headline &#41;;
        $headline= str_replace&#40;'"', " ", $headline &#41;;
        $headline= str_replace&#40;"*", " ", $headline &#41;;
        $headline= str_replace&#40;"?", " ", $headline &#41;;
        $headline= str_replace&#40;"!", " ", $headline &#41;;
        $headline= str_replace&#40;"&", " ", $headline &#41;;
        $headline= str_replace&#40;"%", " ", $headline &#41;;
        $headline= str_replace&#40;"@", " ", $headline &#41;;
        //$headline= str_replace&#40;"|", " ", $headline &#41;;
        $headline= str_replace&#40;",", " ", $headline &#41;;
        $headline= str_replace&#40;"=", " ", $headline &#41;;
//        $headline= str_replace&#40;"-", "", $headline &#41;;
        $headline= str_replace&#40;"<", " ", $headline &#41;;
        $headline= str_replace&#40;">", " ", $headline &#41;;
        $headline= str_replace&#40;"&#40;", " ", $headline &#41;;
        $headline= str_replace&#40;"&#41;", " ", $headline &#41;;
        $headline= str_replace&#40;"+", " ", $headline &#41;;
        $headline= str_replace&#40;"'", " ", $headline &#41;;
        $headline= str_replace&#40;";", " ", $headline &#41;;
        $headline= str_replace&#40;"&#58;", " ", $headline &#41;;
        $headline= str_replace&#40;"ß", "s", $headline &#41;;
        $headline= str_replace&#40;"ä", "ae", $headline &#41;;
        $headline= str_replace&#40;"ö", "oe", $headline &#41;;
        $headline= str_replace&#40;"ü", "ue", $headline &#41;;
        $headline= str_replace&#40;"Ä", "AE", $headline &#41;;
        $headline= str_replace&#40;"Ö", "OE", $headline &#41;;
        $headline= str_replace&#40;"Ü", "UE", $headline &#41;;
        
        $headline= str_replace&#40;"à", "a", $headline &#41;;

        $headline= str_replace&#40;"\n", " ", $headline &#41;;
        $headline= str_replace&#40;"\r", " ", $headline &#41;;
        $headline= str_replace&#40;"\", " ", $headline &#41;;
        $headline= str_replace&#40;"/", " ", $headline &#41;;
        $headline= str_replace&#40;"#", " ", $headline &#41;;
        $headline= trim       &#40;          $headline &#41;;
        $headline= str_replace&#40;" ", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;
        $headline= str_replace&#40;"--", "-", $headline &#41;;

  return&#40;$headline&#41;;
&#125;
function hl2sub&#40;$headline&#41;
&#123;
        $headline=hl2fn2&#40;$headline&#41;;
        $headline= str_replace&#40;".", "-", $headline &#41;;
  return&#40;$headline&#41;;
&#125;

hl2fn
= Headline to Filename
Umlaute werden umgewandelt ä=ae
und so sachen

wenn als 2ter Parameter eine 1, dann wird alles noch in Kleinbuchstaben umgewandelt .... aber da mußt du dich eh nach deinem bisherigen richten .... und erstmal im phpcode suchen

Verfasst: 06.08.2006, 00:57
von Michael1967
Das ist schon viel zu viel für mich *gg*

Sonderzeichen und Umlaute werden bei mir so

Code: Alles auswählen

function strip_specialchars &#40; $my_title &#41; &#123;

$transfertitle = str_replace &#40;" ", "-", $my_title&#41;;

$transfertitle = str_replace &#40; array &#40; 'ö','ü','ä','Ö','Ü','Ä','.de', '.at', '.com', '.info', '.ch', '.net', '.org', '.br', '.ag','`','ß','---',',','/'&#41;, array &#40; 'oe','ue' ,'ae','Oe','Ue','Ae' ,'', '', '', '', '', '', '', '','','','ss','-','','-'&#41;, $transfertitle &#41;;

$transfertitle = stripslashes&#40;$transfertitle&#41;;

return $transfertitle;

&#125;
umgewandelt.

Aber auch das werde ich mir genau anschauen. Vielen Dank auch dafür!

Verfasst: 06.08.2006, 01:16
von 800XE
ja, in php geht "strreplace" auch mit array

früher in c ging das nicht .... meinem php sieht man meine c Vergangenheit an .... steig erst langsam auf die php möglichkeiten um


wenn du dich wunderst, das bei mir eine Zeile mehrfach ist

$headline= str_replace("--", "-", $headline );


das muß so sein
sonsd werden 5- nicht zu 1- sondern zu 2- (oder auch 3?)

wahrscheinlich ...

Test-----Text

der strreplace durchläuft den STring
damits leichter zu erzählen ist
testABCDEFtext .... das ABCDEF sind -

strreplace "--","-" findet AB (=-- ) und ändert nach - = testACDEFtext

er wahr auf Position des A ... und macht jetzt auf der nächsten Position weiter
findet wieder 2- ... CD ...strreplace = testADEFtext
eine Position weiter, wieder strreplace = testADFtext = test---text ... wollte aber test-text
deswegen ist der replace mehrfach

Re: Wie kann ich das beseitigen?

Verfasst: 06.08.2006, 03:03
von net(t)worker
gut...

wenn ihr das jetzt gelöst habt, eleminieren wir noch eine weitere fehlerquelle für missgestaltete URL's

wenn ich mir deine vorgegebene URL so ansehe
Michael1967 hat geschrieben: https://www.domain.de/eintrag-1064-CDU/ ... erung.html
kann ich erkennen, dass dein script relativ verlinkt nicht absolut zum webroot, dh. deine Links sehen wohl so aus:

<a href="eintrag-blabla.html">bla bla</a>

besser wäre:

<a href="/eintrag-blabla.html">bla bla</a>

wenn du jetzt eine url mit einem / zuviel hast, also als beispiel

https://www.domain.de/eintrag-1064-CDU/CSU.html

und du verlinkst von dieser Seite aus mit einem relativen Link, wird das neue Dokument im aktuellen Ordner gesucht, und der aktuelle Ordner wäre in diesem Fall ja

https://www.domain.de/eintrag-1064-CDU/

also alle Links in absolute Links zum webroot umwandeln.... besser wäre ggf. noch mit der kompletten url

so gesehen könntest du anstatt mit dem php script das problem ggf. auch mit einer einfachen mod_rewrite Regel erledigen.... einfach mit dem regexpr prüfen ob ein / enthalten ist, wenn ja ein 301 auf das nach dem /..

RewriteRule ^.+/([^/]+)$ https://www.domain.de/$1 [L,R=301]

ggf. musste das so schreiben: ^.+\/([^\/]+)$


jaja, ich weis, das hätte ich auch gleich sagen können... :roll:

aber durch den Umweg über das php script haste nu auch gleich noch etwas gelerrnt... :wink:

Verfasst: 06.08.2006, 11:03
von Michael1967
Also ein Link schaut bei mir so aus -


domain/eintrag-36-Webdesign-Wien.html

Nun müsste es doch möglich sein, dass er blockiert, wenn ein / im Link enthalten ist.

Bei mir gibt es nur ein / nach der Domain, sonst wird da nirgendwo ein / erzeugt.




[/code]

Verfasst: 06.08.2006, 14:25
von net(t)worker
nenn doch einfach mal die betroffene domain, dann kann man sich das auch mal näher ansehen...