Du bist hier: Seitenreport    Forum    Webserver    Sonstige    Alternative zu RewriteEngine On

Alternative zu RewriteEngine On

Verfasst am: 04. 08. 2010 [13:41]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo Forum,

gibt es eine Alternative zu RewriteEngine On in der htacces, wenn dies vom Provider nicht Unterstützt wird ? Wollte nur für einen Bekannten eine 3-Seiten-Ferienwohnung-HP basteln, und habe einen Tarif wo RewriteEngine On fehlt ..... Wenn es keine vernünftige Alternative gibt, müsste ich den nächst höheren nehmen, der eigentlich wiederum zu viel von allem beinhaltet ...

Danke
 
Verfasst am: 04. 08. 2010 [14:00]
Matthes
Dabei seit: 08.05.2010

174 Beiträge
Beitrag hilfreich?

Theoretisch ja.

Du definierst in der .htaccess die ErrorDocument-Einträge für nicht gefundene URLs (404) und lenkst sie auf irgendeine Datei, nehmen wir einfach die index.php an.
Also:
ErrorDocument 404 /index.php

Wenn jetzt also jemand www.domain.example/tollsteferienwohnungwogibt.html aufruft, die es als Datei nicht gibt, landet er auf der index.php.
Dort überprüfst Du, ob es diese Seite geben soll und bindest per include* den gewünschten Inhalt ein.
Gibt es diese Seite nicht, setzt Du den entsprechenden Header*² und gibst eine Fehlermeldung aus.

*: aufpassen, nicht einfach
PHP
include $_SERVER['REQUEST_URI'].'php';

*²:
PHP
header("HTTP/1.0 404 Not Found");

Wichtig für Suchmaschinen, nicht vorhandene Seiten sollten auch den richtigen HTTP-Header zurückgeben.

PS: Ja, ich habe eben den PHP-Tag entdeckt. Bzw. Jörg hat mich mehr oder weniger zufällig darauf hingewiesen. icon_smile.gif
PPS: Die index.php sollte entsprechend im Falle eines existierenden Inhaltes auch den Status 200 zurückgeben, um ggf. einen 404 vom Server zu überschrauben.
PPPS: überschreiben

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 04.08.2010 um 14:06.]

Mal: "May have been the losing side. Still not convinced it was the wrong one."
 
Verfasst am: 04. 08. 2010 [14:47]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

Hallo Sven

Darf ich erstmal fragen was du überhaupt umschreiben willst?
Mit www. und ohne ist kein Problem bei Verwendung von PHP.

Dann könnte ich mir eine Lösung per PHP vorstellen.

Mit $_SERVER['REQUEST_URI'] die eingabe feststellen.

Wenn dann www. enthalten ist mit header() einen 301 senden und mit header location auf ohne www. umleiten.

Sicher bin ich mir jetzt 100%ig nicht das nicht schon ein Header mit 200 gesendet worden dann ist.
Das kannst du dann aber mit diesem Tool http://floern.com/tools/getheader überprüfen.

Müsste so ungefähr lauten.

PHP
<?php
if (preg_match('#^http://www.#i',$_SERVER['REQUEST_URI'])
{
$url = preg_replace('#^http://www.#i','#^http://#i',$_SERVER['REQUEST_URI']);
header("Status: 301");
header('Location: '.$url);
}
?>


Und was ich jetzt nicht genau weiss ist wie sieht es aus wenn die Angabe im Browser ohne http:// gemacht worden ist.
Dann müsste man wohl ^http:// aus dem Skript rausnehmen.

Und wenn das Skript einen Fehler haben sollte hoffe ich mal das die PHP Experten mich korrigieren.

Was ich auch nicht weiss wie Seitenreport bei der Analyse darauf reagieren würde wenn es funktioniert.

Also ein absoluter Testfall.

Und nur wegen Duplicate Content würde ich nicht zu einem teurerem Paket greifen. Das ist es einfach nicht wert.

Gruß
Jörg

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 04.08.2010 um 14:48.]

 
Verfasst am: 04. 08. 2010 [15:16]
Matthes
Dabei seit: 08.05.2010

174 Beiträge
Beitrag hilfreich?

Wenn es nur um die Vermeidung von Duplicate Content geht, ist folgende Variante wesentlich einfacher:
PHP
<?php if (!strstr($_SERVER['HTTP_HOST'],'www'))
{
     header('Location:http://www.domain.example',true,301);
}
?>

(Diese Variante gilt für Domains, bei denen "www." erwünscht ist, soll es ohne "www" sein, das Ausrufezeichen vor dem strstr und das "www." in dem header-Aufruf entfernen - und es funktioniert natürlich nur für Domains, die kein "www" im Namen haben wink.gif)

Da muss man auch keine weiteren Header mehr senden, das reicht völlig.


@Jörg: REQUEST_URI enthält nur den relativen Pfad, HTTP_HOST oder SERVER_NAME wären die richtige Wahl.
Und ob http:// eingegeben wurde oder nicht ist völlig egal, das enthalten die Variablen ohnehin nicht.

Dauernd vergesse ich was... Für die Analyse bei Seitenreport sollte es keinen Unterschied machen, ob man per .htaccess oder per PHP umleitet, die Antwort vom Server ist in beiden Fällen gleich.

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 04.08.2010 um 15:22.]

Mal: "May have been the losing side. Still not convinced it was the wrong one."
 
Verfasst am: 04. 08. 2010 [15:47]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

Hallo Matthias

Dann sollten wir diesen Gedanken aber auch so weitertreiben das jede Seite wieder auf dieselbe Seite umleitet halt eben ohne oder mit www. .

PHP
<?php
header('Location: http://www.'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'],true,301);
?>


wobei man dann wenn die index Datei aufgerufen wird diese dann noch per preg_replace aus dem Pfad rausnehmen sollte oder stattdessen nur die Verzeichnisse mit der Funktion die mir jetzt nicht einfällt vom Pfad ermittelt

Nein besser noch Die Datei daraufhin prüfen ob sie index.php ist und dann einfügen wenn sie es nicht ist. Und halt eben auch die Verzeichnisse davor angeben.

Bevor wir da aber die perfekte Lösung schreiben sollte Sven doch erst mal ganz genau angeben was er möchte. Sonst verschwenden wir hier nur Zeit.

Und was die Antwort vom Server angeht da war ich mir nicht 100% ig sicher.
Lieber gebe ich zu das ich es nicht genau weiss anstatt Leute in die Irre zu leiten.

Und ganz sicher würde ich nur sein wenn ich das testen würde und meine htaccess ändere ich deswegen nicht ab.

Gruß
Jörg

Nachtrag

Das sollte dann aber in beiden Richtungen jetzt richtig sein.
Matthias du hattest vollkommen recht damit das request uri nur den Pfad beinhaltet.
Obwohl man das testen und ersetzen auch anders vornehmen kann.

PHP
<?php
//Duplicate Content per PHP verhindern
//Von ohne www. nach www. umleiten
if (!strstr($_SERVER['HTTP_HOST'],'www'))
{
     header('Location: http://www.'.$_SERVER['HOST'].$_SERVER['REQUEST_URI'],true,301);
}
//Von www. nach ohne umleiten
if (strstr($_SERVER['HTTP_HOST'],'www'))
{
    $host = str_replace('www.','',$_SERVER['HTTP_HOST']);
    header('Location: http://$host.$_SERVER['REQUEST_URI'],true,301);
}
?>


[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 04.08.2010 um 16:38.]

 
Verfasst am: 04. 08. 2010 [17:46]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo Ihr Beiden,

Ihr seid ja wieder so gut zu mir icon_smile.gif

Mit Eurem PHP-Code muss ich mich dann mal mehr auseinandersetzen. Beim googeln habe ich jetzt wat von einem neuen Meta-Tag "Canonical" gefunden.

Habe da http://www.canonical-tag.de/ jetzt aber noch nicht alles genau gelesen, wäre doch aber wohl auch möglich oder ?

Danke und Gruß
 
Verfasst am: 04. 08. 2010 [18:02]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

Hallo Sven

Ja die Lösung mit dem Canonical Attribut wollte ich gerade noch nachschieben.

http://www.golem.de/0902/65259.html

Der Vorteil ist halt eben du kannst das auch bei html Seiten verwenden.

Der Nachteil du musst das bei jeder Seite manuell ändern oder du wendest wieder PHP an mit den selben Variablen nur halt eben mit einer Ausgabe die so lauten könnte.

PHP
<?php
if (!strstr($_SERVER['HTTP_HOST'],'www'))
{
echo '<link rel="canonical" href="http://www.'.$_SERVER['HOST'].$_SERVER['REQUEST_URI'].'" / >',
}
?>


Dabei passiert dann folgendes Wenn die Seite ohne www aufgerufen wird wird dann der Canonical eingefügt und sonst nicht. Die andere Variante kannst du dir entsprechend der PHP Umleitung auch entwickeln.

Das müsstest du dann im head Bereich deiner Seite platzieren.

Gruß
Jörg

 
Verfasst am: 04. 08. 2010 [21:16]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo Jörg,

danke für die Info und Codebeispiel. ich muss mal sehen wie das so klappt. Am einfachsten wäre halt die .htaccess - muss da nochmal nachfragen ab das nicht doch beim kleinen "Visitenkartentarif" geht, oder halt doch etwas mehr investieren. Muß da halt auch nochmal mit meinem Bekannten sprechen.

Ist jetzt aber nicht so eilig - werde mich ggf. nochmal hier melden.

Gruß
 
Verfasst am: 04. 08. 2010 [22:40]
Raptor
Dabei seit: 10.05.2009

1159 Beiträge
Beitrag hilfreich?

Ich möchte da noch kurz eine Korrektur zu Jörg's Skript beifügen:
PHP
<?php
if(substr($_SERVER['HTTP_HOST'], 0, 4)!=='www.'){
  // wenn der Host kein "www." vorne dran hat, dann:
  echo '<link rel="canonical" href="http://www.',$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI'],'" />';
}
?>


 
Verfasst am: 04. 08. 2010 [23:02]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

Danke Florian

Autsch da ist mir ab und zu ein HTTP_ abgekommen.

Dein Weg ist noch intelligenter um auch für SubDomains geeignet zu sein.

Gruß
Jörg

 




Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:



6 Mitglieder waren innerhalb der letzten 15 Minuten online (145 heute gesamt):
DieWebAG, fotopalm, Legasthenie, moot64, powerpeter, saalekreis

Administratoren und Moderatoren:
[keine]

Seitenreport hat 18155 registrierte Mitglieder, 3003 Themen und 29113 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 13 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 7 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Partnerprogramm

12% Lifetime Provision auf alle Buchungen von Dir geworbener Mitglieder sowie 0,50 € für jede Registrierung. Eines der besten deutschen Partnerprogramme laut den appCharts von 100partnerprogramme.de. Nimm jetzt teil am Seitenreport Partnerprogramm und verdiene gutes Geld dabei!

* = Partnerlinks