2012-04-03 2 views
2

Ok, also im Grunde habe ich diesen Teil der .htaccess teilweise funktionstüchtig, aber noch nicht ganz ganz eben. Ich habe zwei Unterverzeichnisse auf meinem Server für eine englische und eine französische Seite (die Unterverzeichnisse sind en bzw. fr). Wenn ein Benutzer etwas in die URL-Leiste eingibt, möchte ich, was immer er eingegeben hat, zu en oder fr hinzugefügt werden (abhängig von der Standardsprache des Benutzers auf seinem Computer)..htaccess Multiple Language Site

Wenn sie domain.com/test eingeben (und ihre Sprache auf Englisch eingestellt ist), möchte ich, dass sie auf domain.com/en/test/ umleitet. Ich möchte nur, dass dies geschieht, wenn der Test kein Ordner, Verzeichnis, Datei oder irgendetwas im Stammverzeichnis ist.

Hier ist mein .htaccess-Code so weit, dass Art der Arbeiten:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteCond %{HTTP:Accept-Language} ^en [NC] 
RewriteRule ^(.*)$ /en/$1/ [R=301,L] 

Das Problem mit meinem Code aber ist jedoch, dass, wenn ein Benutzer eingegeben in so etwas wie domain.com/test/ (MIT der Schrägstrich), wird es nicht funktionieren, weil ich einen anderen Teil in meinem .htaccess habe, der am Ende von allem einen Schrägstrich erzwingt. Wenn ein Benutzer in domain.com/test.html eingetragen ist (und das ist eine Datei im Stammverzeichnis der Domäne), wird es nicht funktionieren, weil ich ein anderes Teil in meinem .htaccess habe, das .html-Erweiterungen entfernt.

Grundsätzlich brauche ich diese Umleitung in absolut allen Situationen zu arbeiten, außer wo es logisch nicht sollte.

Wie auch immer, wenn jemand von euch mir helfen könnte, würde ich es sehr schätzen.

Antwort

2

OK. Dies ist, wie ich es mache:

Immer die Sprache Suffix/en,/fr usw. egal was. Also setze das als URL GET. Mit PHP können Sie erzwingen, dass es eingefügt wird.

RewriteRule ^([a-z]{2})/?$ index.php?language=$1 
RewriteRule ^([a-z]{2})/register/?$ register.php?language=$1 

Mit PHP oder was auch immer scripting Sie verwenden, können Sie die IP überprüfen, setzen Sie das Land automatisch GET, &/oder eine Sitzung festgelegt. Erstellen Sie die Sitzung in alle Ihre URLs, so dass alle Ihre Links haben

Machen Sie den Schrägstrich optional mit /? wie in den obigen Beispielen.

Ich benutze {REQUEST_FILENAME} nicht, stattdessen habe ich eine Liste aller möglichen Haupt-URLs - aber Sie können {REQUEST_FILENAME} auch verwenden, wenn Sie möchten, aber Sie müssen echte Verzeichnisse berücksichtigen.

+0

Ich möchte PHP überhaupt nicht verwenden, ich bin nur interessiert an .htaccess-Datei. Wie ich im OP gesagt habe, ich habe es teilweise funktioniert. Es fügt hinzu/en/wenn die eingegebene URL am Ende keinen Schrägstrich hat. Aber es schreibt auch die URL in einigen Fällen, wo ich es nicht möchte ... Wie: wenn die Datei bereits im Stammordner ist. – shootingrubber

+0

Es gibt auch ein anderes Problem mit meinem ursprünglichen Code. Wenn ich mich tatsächlich in der en/subdomain befinde, fügt es ein weiteres en/auf die URL hinzu. Wenn ich also auf domain.com/de/test stehe und dann auf das Beispiel klicke, wird es auf domain.com/en/example gehen. – shootingrubber

+0

Danke, es hat mir geholfen. – Elkas