htaccess-multi-language-Website mit sub-Verzeichnisse und default-301
Ich habe einige Probleme meine htaccess zu erlauben, mehrere Sprachen unter Verwendung der sub-directory-Methode z.B.:
http://www.domain.com/en/
http://www.domain.com/sw/
http://www.domain.com/ie/
Auch Dinge zu komplizieren, das Projekt ist derzeit nicht Leben, er ist auf einem dev-server. Zum Beispiel, ich bin gerade auf das Projekt an:
http://dev.domain.com/devname/projectname/
Und ich will die oben automatisch eine 301-Weiterleitung:
http://dev.domain.com/devname/projectname/en/
Hier ist meine htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine on
# ----------------------------------------------------------------------
# MULTI LANGUAGE SUB DIRECTORY
# ----------------------------------------------------------------------
RewriteCond %{REQUEST_URI} !^/(en|sw)/
RewriteRule ^(.*)$ en/$1 [R=301,L]
# ----------------------------------------------------------------------
# Rewrite rules
# ----------------------------------------------------------------------
## CASE STUDIES ##
RewriteRule ^casestudies/([^/\.]+).html$ index.php?controller=contents&method=viewCasestudy&link=$1 [L,QSA]
## PRODUCTS ##
RewriteRule ^products/([^/\.]+).html$ index.php?controller=contents&method=viewProduct&link=$1 [L,QSA]
RewriteRule ^([a-z{2}]+)(/)?$ index.php?controller=contents&method=viewHome&lang=$1 [L,QSA] # Default load
RewriteRule ^(/)?$ index.php?controller=contents&method=viewHome [L,QSA] # Default load
Die oben wird tatsächlich weitergeleitet werden:
http://dev.domain.com/home/webserver_dir/devname/projectname/en/
..und wenn ich RewriteBase scheint es nur springen...
http://dev.domain.com/en/
Also meine Frage: Wie bekomme ich die language-URLs arbeiten korrekt relativ zu dem Verzeichnis sein, in auf meinem dev-server, und klicken Sie dann optimal funktioniert, wenn es live geht, ohne Umwelt bestimmte Regeln.
Bonus-Frage: muss ich hinzufügen ([a-z{2}]+) bit vor all meinen nachfolgenden rewrite-Regeln, oder kann ich eine catch-all das wird Wirkung alle weiteren Regeln?
BEARBEITEN -----------------------------
Ich reduziere es auf den folgenden vorgeschlagen...
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /devname/projectname/
RewriteCond %{REQUEST_URI} !^/(en|sw)(/|$) [NC]
RewriteRule ^(.*)$ en/$1 [R=301,L]
RewriteRule ^([a-z]{2})/?$ index.php?controller=contents&method=viewHome&lang=$1 [NC,L,QSA] # Default load
... aber jetzt ist es umleiten zu http://dev.domain.com/devname/projectname/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/
, irgendwelche Ideen?
dev.domain.com
?/home/webserver_dir/
InformationsquelleAutor Horse | 2013-10-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, die Antwort in dem folgenden link? Es sollte das tun, was Sie zu erreichen versuchen.
Endlose Redirect-Schleife durch htaccess Regeln multi Sprache
InformationsquelleAutor melon
Wenn .htaccess darf nicht geändert werden
Ändern Sie Ihre
<VirtualHost>
Konfiguration für Ihre DEV - server-Projekt alsDiese änderungen würden in der Regel gehen in Ihr httpd-vhosts.conf - Datei. Ihre .htaccess Dateien haben jetzt
markieren root als Ihre Basis - Verzeichnis für Ihre Entwicklung und live Server.
Wenn Sie versuchen, eine version Ihrer Projekte oder testen Sie mehrere Projekte auf den gleichen dev host, dann müssten Sie übernehmen das Namensschema in den domain-Namen statt der URL-Pfad. Zum Beispiel,
Die Quintessenz ist, dass Sie können nicht die gleichen .htaccess Datei Regeln arbeiten unberührt, mit verschiedenen deployment-Verzeichnisse, es sei denn, Sie greifen zu mod-rewrite Weg if-else - mumbo jumbo, die würden nur Hinzugefügt werden, Unordnung, sobald Sie live gegangen.
Die Regeln für die transparente Arbeit, muss der Apache nur sehen, und wenden Sie die Regeln auf, was Los ist live (der Inhalt kommt nach
/devX/projectX/
Verzeichnisse), das ist, was die Verlagerung derDocumentRoot
hat hier für uns.Wenn minimal mods .htaccess sind okay
Nicht jeder hat Zugriff auf die Apache -.conf - Dateien. Bestimmten hosts-mit Recht ablehnen, Anfragen zu Bearbeiten. Das ist, warum, wenn Sie mindestens gehalten mod-rewrite aktiviert, eine Menge von website-Einstellungen können gebastelt werden. Einer von Ihnen ist die Verwendung
RewriteBase
behandeln die verschiedenen deployment-Verzeichnisse.So, wenn Sie halten
RewriteBase /
auf live aber es zu ändernRewriteBase /devX/projectX/
für Entwicklung, die meisten IhrerRewriteRule
s funktionieren sollte, wie Sie ist. Also/devname/projectname/
sollte korrekt umleiten zu/devname/projectname/en/
.Ihre Nutzung des
([a-z{2}]+)
ist falsch. Sie meinte wahrscheinlich([a-z]{2})
zu erfassen genau zwei Buchstaben. Wenn Sie also, zum erfassen von zwei oder mehr ist, wäre es([a-z]{2,})
. So, Ihr default laden umschreiben würdeSind Sie richtig, anzunehmen, dass Sie benötigen würden, diese regex für alle nachfolgenden Regeln, oder Sie würden nicht entsprechen. So, Ihr
RewriteRule
fürcasestudies
wird nicht funktionieren. Ein einfacher Weg, um nicht die Sorge um die Sprache-Präfix ist, fallen die^
starten der URL-Pfad-Anker alsIhre letzten
RewriteRule
passenden^(/)?$
ist nicht erforderlich, da Sie bereits tut eine301
redirect für alle URLs, die keine language-Verzeichnis-Präfix zu/en/$1
oben, die idealerweiseAnsonsten
/en
würde umgeleitet-sowie/en/en
.Ich entschuldige mich. Ich war Weg (Feiern Diwali - einem großen festival hier in Indien :)) und konnte nicht reagieren auf Ihre Kommentare. Lassen Sie mich einen Blick auf Ihre updates und ich werde vorschlagen, eine Lösung in kurzer Zeit. Vielen Dank für Ihre Geduld.
kein problem, happy Diwali 🙂 und ich freue mich auf Ihre Antwort
Die
301
umgeleitet werden mussRewriteRule ^(.*)$ http://%{HTTP_HOST}/en/$1 [R=301,L]
. Dies stellt sicher, dass wir umleiten, ohne anfügen von-ing-Projekt-Pfad der URL.dies funktioniert gut, so ist (z.B. für die live-server), aber auf dem dev-server, die änderung der 301 zu
RewriteRule ^(.*)$ http://%{HTTP_HOST}/devname/projectname/en/$1 [R=301,L]
es noch klemmt in eine redirect-Schleife 🙁InformationsquelleAutor Ravi Thapliyal