2012-03-26 9 views
0

Ich versuche nur bestimmte Regeln zu entsprechen, wenn es keine „locale“ in der Abfragezeichenfolge istHTAccess Zustand

Hier ist, wie ich es tue:

RewriteCond %{QUERY_STRING} !locale 
RewriteRule ^acceuil$ home.php?locale=fr [NC,L] 
... (More rewrite rules) 

Grundsätzlich i /acceuil wollen gehen home.php?locale=fr (Arbeits perfekt)

Abgesehen davon, dass, wenn irgendwie eine Verbindung wie diese /acceuil?locale=en war Ich mag wäre es stattdessen zu /home gehen lassen, die zu home.php?locale=en entspricht

Jede Chance, neu zu schreiben, kann in der folgenden Art und Weise „/acceuil“ sagen:

if(isset($locale)) { 
     go to home.php?locale=$locale 
} 
else{ 
     go to home.php?locale=fr 
} 

Auch soll ich frage mich, ob der Zustand vor jeder Regel eingefügt Kopie werden?

Bitte lassen Sie mich wissen, ob dies möglich ist, und, wie ich bekommen kann es gehen, wenn Sie einige nützliche Referenz für .htaccess haben umschreibt bitte teilen :)

Dank

+0

Wenn es Französisch ist dann ist es ** 'Accueil' **, * nicht *' Accueil' :) –

Antwort

1

Hier ist eine allgemeine Regel, die funktionieren sollte, und das stellt sicher, dass die Variable in der GET ist locale (nicht localeee weder llllocale):

RewriteCond %{QUERY_STRING} (^|&)locale=([a-zA-A]+)(&|$) 
RewriteRule ^acceuil$ home.php?locale=%1 [L,NC,QSA] 

# if locale = en ... 
RewriteCond %{QUERY_STRING} (^|&)locale=en(&|$) 
# ... and it goes to home.php then go back to /home: 
RewriteRule ^home.php$ /home [L,NC,QSA] 

Hinweis: wenn es Französisch ist, dann ist es Accueil, nicht Acceuil :)

+0

danke ich schätze deine Hilfe und thx für das Abfangen des Tippfehlers :) –

+0

Sie begrüßen, mein Vergnügen ** ':)' ** –

1
RewriteCond  %{QUERY_STRING} !locale 
RewriteRule  ^acceuil$    home.php?locale=fr [L,NC] 
RewriteCond  %{QUERY_STRING} locale=([a-zA-Z]{2}) 

RewriteRule  ^acceuil$    home.php?locale=%1 [L,NC] 

Edit:
Zuerst Bedingung überprüfen Sie einfach das Vorhandensein von local in Query-String. Wenn nicht, überschreiben Sie die URL in home.php?locale=fr und wenn es locale= gibt, nimmt es alles, was danach ist (nur zwei Zeichen) und setzen Sie sie in home.php?locale=%1, also acceuil?locale=fr bedeutet home.php?locale=fr. Und acceuil?locale=en bedeutet home.php?locale=en.

Es gibt zwei Bedingungen und zwei Schreibregel: -D

+0

danke für die schnelle Antwort! Durch diese Logik habe ich verstanden, dass Bedingungen nur für die eine Regel gelten, habe ich Recht? –

+0

lesen Sie das Teil – undone

+0

danke! wirklich hart, beste Antwort zu wählen –