2016-09-08 3 views
1

Ich habe eine mehrsprachige Website mit dieser Struktur http://www.url.com/en/, http://www.url.com/it/, http://www.url.com/pt/ usw. jetzt Mein Problem ist, dass, wenn Sie auf den Link url.com zugreifen I 3 Umleitungen haben.Redirect Website innere Links

  1. Um http://url.com
  2. Um http://www.url.com
  3. Um http://www.url.com/en/

Wie kann ich nur 2 Umleitungen haben? Wenn Sie auf http://url.com zugreifen, um zu http://www.url.com/en/ umzuleiten, habe ich in dieser Zeile die Zeilen.

RewriteCond %{HTTP_HOST} ^url.com [NC] 
RewriteRule ^(.*)$ http://www.url.com/$1 [L,R=301] 

Dieser leitet von url.com zu http://www.url.com um. Danach eine PHP-Datei Skript umgeleitet wird erkannt, die Domäne und leitet es automatisch wieder auf/en/

$url= strpos($_SERVER['REQUEST_URI'],"/".$lang."/"); 
if($url!==0){ Header("HTTP/1.1 301 Moved Permanently"); 
Header("Location: http://www.url.com/en/"); } 

Danach habe ich einige Bedingungen zu überprüfen, ob Sie in einer anderen Sprache sind.

if($lang == "pt"){$langcheck = "pt"} 

Meine Links werden wie folgt erstellt:

RewriteRule ^([_A-Za-z0-9-]+)\/$ index.php?page=index&lang=$1 [L] 

Also, was soll ich in .htaccess schreibe dies für jede Sprache zu arbeiten. Wenn ich die RewriteRule zu url.com/en/ ändere, funktioniert die anderen Sprachen nicht mehr.

+0

Es tut mir leid, ich kann es nicht bekommen, wie man Sprache tun bekommen und wie Umleiten Sie. –

+0

Wenn du auf url.com eingibst, checke ich in functions.php ein, wenn die URL von url.com/en/ abweicht. Wenn das anders ist, leite ich auf die URL url.com/en/ um. Diese Bedingung gilt nur, wenn Sie den Link url.com aufrufen, aber wenn Sie url.com/it/ eingeben, sehe ich, dass es eine andere Sprache gibt. Mein Problem ist, wenn Sie auf url.com zugreifen (ich möchte zum ersten Mal zu url.com/en/ weitergeleitet werden, nicht zu www.url.com und danach zu www.url.com/en/. –

Antwort

0

Wie Sie dies erreichen, hängt davon ab, woher Sie die Sprachzeichenfolge erhalten, wie viele Sprachen Sie unterstützen möchten und wie komplex diese Interaktion sein soll.

Wenn es nur ein paar Sprachen sind und Sie die Browsereinstellungen dafür verwenden möchten, können Sie möglicherweise htaccess rewrites dafür verwenden.

Wenn Sie jedoch mehr als nur ein paar Sprachen haben, möchten Benutzer ihre eigene Sprache auf der Website selbst auswählen lassen, oder etwas, das komplexer ist als das oben genannte. Nun, dann musst du alles in PHP machen.
Das bedeutet, dass Sie die htaccess-Weiterleitung für die fehlende "www" -Domain entfernen und dann im PHP-Code nachsehen müssen. Vor oder nach der Suche nach der ausgewählten Sprache. Verwenden Sie beide Prüfungen, um den Link zum Weiterleiten zu bestimmen, bevor Sie tatsächlich umleiten.

Meta Beispiel:

// We want all users to use the domain with www. 
$redir = ''; 
if (substr ($url, 0, 3)) != 'www') { 
    $redir .= 'www.'; 
} 

// If user has selected a different language, we need to redirect for that too. 
if (!empty ($lang)) { 
    $redir .= "{$base_url}/{$lang}/"; 
} 

// If $redir isn't empty, redirect the user. 
// PS: Always remember to use `die()` after a `header()` redirect! 
+0

Vielen Dank Du! Ich habe getestet und ich habe die Umleitung von htaccess entfernt und am ersten Byte funktioniert es einwandfrei, aber in meinen inneren Links funktioniert das nicht (arbeitet mit http://url.com/innerl und mit www.url.com/ Innerl) Es ist eine Menge Arbeit für meine Website, um die Umleitung für alle Links zu machen, ich versuche, einen Weg zu finden, dies mit htaccess zu tun. –

+0

Sie müssen keine Umleitung für alle Links einzeln mit PHP vornehmen. Das einzige, was Sie brauchen, ist etwas Ähnliches wie oben, das alle Anfragen an die Site testet. Wenn Sie mehrere Einstiegspunkte haben, können Sie einfach eine Funktion des obigen Codes erstellen, sie auf jeder Seite einfügen und ausführen. DRY, immerhin. – ChristianF

+0

Danke! Ich werde es versuchen! –