Seite 1 von 1

slash hinter Datei Endung führt zu unerwünschten Ergebnis

Verfasst: 30.12.2012, 13:16
von Al-Pi
Hallo zusammen,

seit Wochen bin auf der Suche nach einer Lösung meines Problems bin aber leider nicht fündig geworden, vielleicht kann mir einer weiterhelfen...
Die Ursache des Problems war, dass man meine php Dokumente auch mit einer slash am ende aufrufen konnte, es führte dazu dass das der Inhalt ohne css Deklaration angezeigt wurde.

z.B
example.com/index.php [erwünschtes Ergebnis]
example.com/index.php/ [unerwünschtes Ergebnis]

mit folgendem Code im htaccess Root Verzeichnis konnte ich das Problem beheben.

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.+)(.php|.html)/$ /$1$2 [R=301,L]

doch wenn hinter der slash weitere Zeichen folgen hift der Code nicht weiter, leider ist mir das sehr spät aufgefallen und Google hat fast alle meine Seiten auf dieser art (ohne css) indexiert.

beispiel:
https://www.allaturkaa.de/forum/index.php?page=Index [erwünschtes Ergebnis]
https://www.allaturkaa.de/forum/index.p ... page=Index [unerwünschtes Ergebnis]

google suche
https://www.google.de/#hl=de&tbo=d&scli ... 32&bih=903[/url]

Verfasst:
von

Verfasst: 30.12.2012, 15:14
von Melegrian
Da bin ich mir gerade nicht so sicher, doch wenn Du da einen Punkt in (.+) notierst, so können ja alle beliebigen Zeichen vor (.php|.html) kommen und dadurch wird dann so ein ungewolltes Ergebnis begünstigt. Wollte mir heute keine Testumgebung mehr einrichten, doch so in etwa könnte ich mir das erst einmal vorstellen, um keine weiteren Dopplungen zu erzeugen:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/]+)(\.php|\.html){1}/$ /$1$2 [R=301,L]
Also nur Buchstaben, Ziffern und / aber keinen Punkt vor (\.php|\.html) akzeptieren und (\.php|\.html) muss genau {1} mal vorkommen. Oder {0,1} darf 0 bis 1 mal vorkommen, wäre auch möglich. Ein Punkt muss außerhalb von [Zeichenklassen] mit \ maskiert werden, sonst steht der auch wieder für ein beliebiges Zeichen.

Die Frage ist jetzt aber, wie bekommst Du die bereits vorhandenen Ungetüme wieder aus den Serps?

Damit nicht grundsätzlich ein / hinter URL angehängt wird, lässt sich das auch mit

Code: Alles auswählen

RewriteEngine on 
DirectorySlash Off
unterbinden und eventuell auch bei den Einstellungen von Deinem Forum, nur von letzteren habe ich keine Ahnung.

Verfasst: 13.01.2013, 10:50
von Al-Pi
hallo Melegrian,

erstmal danke für dein Antwort und sorry für die verspätete feedback (bin heute frisch vom Urlaub zurück)

ich habe eben das codestück gegen deine ausgetauscht, doch leider keine Änderung bemerkt, man kann weiterhin urls mit Slash am Documentendung aufrufen
allaturkaa.de/forum/index.php/index.php?page=Portal

Verfasst: 13.01.2013, 14:43
von Melegrian
Dann gehe über Ausschluss. Die zusätzliche Zeile sollte nun dafür sorgen, dass keine URL mehr ausgelöst wird, bei der zweimal index im Pfad enthalten ist. Die nächsten beiden Zeilen sollten Zugriffe von URLs eliminieren, in den zweimal index vorkommt. Falls das nicht klappt, dann ist etwas anderes faul. Cache/Temps muss zwischen zwei Tests gelöscht werden, da sich sonst der Browser die letzte gelungene Verbindung reinzieht, bzw. das ladet, was er für das Produkt der letzten Verbindung hält.

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^.*index.*index.*$
RewriteRule ^([a-zA-Z0-9/]+)(\.php|\.html){1}/$ /$1$2 [R=301,L]
RewriteCond %{REQUEST_URI} ^.*index.*index.*$ 
RewriteRule .* - [F,NS,L]
Statt - [F,NS,L] könnte auch eine Weiterleitung auf eine Fehlerseite genutzt werden oder wie auch immer. Viel wichtiger wäre es aber zu ergründen was da falsch läuft und nicht nur an den Symptomen herum zu doktern.

Verfasst: 13.01.2013, 18:22
von Al-Pi
lieben dank @ melegrian,

nun kann man die seiten mit index.php/... nicht mehr aufrufen

es schein ein generelles problem von woltlab burning board 3.xxx zu sein wenn man nicht zusätzlich den SEO Plugin installiert, kann man jeden forum von woltab mit slash aufrufen.

naja

Verfasst: 13.01.2013, 19:18
von Melegrian
Falls es sich machen lässt, baue in der Fehlerseite eine PHP-Weiterleitung ein. Sollte gleich zu Seitenanfang eingefügt werden.

Edit: Kleine Korrektur war noch erforderlich, so sollte es jetzt gehen.

Code: Alles auswählen

<?php
if &#40;isset&#40;$_SERVER&#91;"REQUEST_URI"&#93;&#41; and !empty&#40;$_SERVER&#91;"REQUEST_URI"&#93;&#41;&#41; &#123;

	$weiter = $_SERVER&#91;"REQUEST_URI"&#93;;
	$weiter = str_replace&#40;"index.php/index.php", "index.php", $weiter&#41;;
	$weiter = preg_replace&#40;"/&#91;^a-z0-9\/_?&=-&#93;/i", "", $weiter&#41;;

	header&#40;"Status&#58; 301 Moved Permanently"&#41;;
	header&#40;"Location&#58; http&#58;//www.allaturkaa.de".$weiter&#41;;
exit;
&#125;
?>