2017-12-26 36 views
3

Wir haben eine Website mit der folgenden Dateistruktur:.htaccess RewriteRule nicht funktioniert, <name> .php statt index.php Seite geladen = <name>

/www 
    /nl 
     index.php 
     contact.php 
     ... 
    /fr 
     index.php 
     contact.php 
     ... 
    /de 
     index.php 
     contact.php 
     ... 
    index.php 
    .htaccess 

Die index.php Datei im Ordner www ist eine Sprache Auswahlseite, die auf die index.php Dateien in den Ordnern nl, fr und de verweist. Die letzteren index.php-Seiten erstellen die Webseite und laden den Seiteninhalt von <page>.php. Dies würde laden den Inhalt /nl/contact.php in die Websites Struktur

http://www.ourdomain.com/nl/index.php?page=contact 

:

In der Vergangenheit wurden die Seiten wie diese geladen.

Um die Website mehr SEO freundlicher zu machen, änderten wir dies:

http://www.ourdomain.com/nl/contact 

Diese tief gehen kann (/nl/nav-level1/nav-level2/nav-level3)

Die index.php Dateien im nl, fr auf 3 Ebenen und de Ordner, haben einen Algorithmus, der 301 die alte URL der Seite auf die neue URL der Seite leitet, für Leute, die die Website von den alten URLs besuchen.

header('HTTP/1.1 301 Moved Permanently'); 
header('location:' . $newurl); 
exit; 

Die .htaccess-Datei im Verzeichnis root www sieht wie folgt aus:

RewriteEngine On 

# RewriteBase wijzigen in/(online) 
RewriteBase/

# PDF: redirect pdf file in wrong directory to root language directory (nl/fr/en) 
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/([a-zA-Z0-9\-]+.pdf)/?$ $1/$3 [NC,L,R=301] 

# pages: redirect index.php in wrong directory to the correct language directory (nl/fr/en) 
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/(index.php)/?$ $1/$3 [NC,L] 

# pages: convert SEO friendly url to index.php?page=<page> 
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)*/([a-zA-Z0-9\-]+)/?$ $1/index.php?page=$3 [NC,L] 

Das funktionierte gut, bis ich diese Seite mit den Servern von unserem neuen Hosting-Provider bewegt.

Jetzt, wenn ich zu http://www.ourdomain.com/nl/contact gehe, wird http://www.ourdomain.com/nl/index.php?page=contact geladen, http://www.ourdomain.com/nl/contact.php wird direkt geladen. Das bedeutet, dass ich den Inhalt der Seite sehen kann, aber ohne die andere Struktur und das Layout unserer Website.

ich, ob die .htaccess Datei Werke geprüft, von

  • auf http://htaccess.mwl.be/ meine .htaccess-Inhalte in der .htaccess-Tester setzen und Testen der Urls meiner Website: dies ergab die erwarteten Urls
  • etwas in die .htaccess-Datei ungültig setzen: Dies gibt einen Serverfehler zurück, wie erwartet
  • umleiten alles auf eine Testseite: Dies leitet alle URLs zur Testdatei um.

entdeckte ich dann, dass ich durch das Erstellen von Ordnern in den Sprachordner (nl, fr, de) mit den gleichen Namen wie die PHP-Dateien, um das Problem funktionieren könnte. Dadurch haben die SEO-freundlichen URLs die Seite wie erwartet geladen, aber irgendwie werden die Get-Variablen immer noch zu den SEO-freundlichen URLs hinzugefügt.

/www 
    /nl 
     /contact 
     /... 
     index.php 
     contact.php 
     ... 
    /fr 
     /contact 
     /... 
     index.php 
     contact.php 
     ... 
    /de 
     /contact 
     /... 
     index.php 
     contact.php 
     ... 
    index.php 
    .htaccess 

Statt http://www.ourdomain.com/nl/contact ich immer http://www.ourdomain.com/nl/contact/?page=contact

weitergeleitet Wenn ich http://www.ourdomain.com/nl/contact/ gehen Die Variablen erhalten werden an die URL hinzugefügt.

Ich habe stundenlang an diesem Problem gearbeitet und gesucht und ich verstehe es nicht. Jeder wertvolle Beitrag wäre willkommen.

+1

haben Sie 'AllowOverride FileInfo Options' eingestellt? – Ben

Antwort

0

Ich habe gerade die Antwort auf mein Problem gefunden.

Anscheinend wurde MultiViews auf dem neuen Server festgelegt. Daher wurden Dateinamen ohne Erweiterung mit Dateien mit Erweiterungen abgeglichen, wodurch http://example.com/nl/contact geladen wird http://example.com/nl/contact.php.