gelöschter Benutzer

Alternative zu RewriteEngine On

am 04.08.2010, 13:41 Uhr eröffnete folgenden Thread
Sonstige    3970 mal gelesen    9 Antwort(en).

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


matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 04.08.2010, 14:00 Uhr schrieb matthes

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 include $_SERVER[\'REQUEST_URI\'].\'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.
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


Make Seitenreport great again!

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 04.08.2010, 14:47 Uhr schrieb joerg

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 floern.com/tools/getheader überprüfen.



Müsste so ungefähr lauten.


<?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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

matthes
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 04.08.2010, 15:16 Uhr schrieb matthes

Wenn es nur um die Vermeidung von Duplicate Content geht, ist folgende Variante wesentlich einfacher:
<?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 )

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.


Make Seitenreport great again!

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 04.08.2010, 15:47 Uhr schrieb joerg

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

header(\'Location: 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
//Duplicate Content per PHP verhindern
//Von ohne www. nach www. umleiten
if (!strstr($_SERVER[\'HTTP_HOST\'],\'www\'))
{

header(\'Location: 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: $host.$_SERVER[\'REQUEST_URI\'],true,301);


}
?>


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 04.08.2010, 17:46 Uhr schrieb

Hallo Ihr Beiden,

Ihr seid ja wieder so gut zu mir

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 www.canonical-tag.de jetzt aber noch nicht alles genau gelesen, wäre doch aber wohl auch möglich oder ?



Danke und Gruß


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 04.08.2010, 18:02 Uhr schrieb joerg

Hallo Sven

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

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
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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 04.08.2010, 21:16 Uhr schrieb

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ß


Raptor
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 04.08.2010, 22:40 Uhr schrieb Raptor

Ich möchte da noch kurz eine Korrektur zu Jörg\'s Skript beifügen:
<?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\'],\'">\';
}
?>


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 04.08.2010, 23:02 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

  • 1


« zurück zu: Sonstige

Das Seitenreport Forum hat aktuell 5276 Themen und 36111 Beiträge.
Insgesamt sind 48364 Mitglieder registriert.