2010-11-10 3 views
0

J'ai essayé de faire fonctionner un langage de style wikipedia. Donc, l'url sera en.example.com pour l'anglais, fr.example.com pour le français, etc ... Cela fonctionne très bien mais je voudrais que la zone d'administration par défaut toujours à la langue de base, c'est-à-dire ne pas définir la variable d'environnement LANGUAGE. J'ai essayé d'ajouter RewriteCond %{REQUEST_URI} !^admin [NC] mais il semble n'avoir aucun effet.RewriteCond pour exclure un répertoire et ses sous-répertoires

Mon code mod_rewrite est la suivante:

# Handle languages 
# Picks up the language code from the browser accept-language parameter 
RewriteCond %{HTTP:Accept-Language} ^([a-z]{2}).*$ [NC] 
RewriteCond %{HTTP_HOST} !^[a-z]{2}\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ http://%1.%{HTTP_HOST}/$1 [R=301] 

RewriteCond %{REQUEST_URI} !^admin [NC] 
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ - [ENV=LANGUAGE:%1,QSA] 

# Redirecting all requests to one script 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\+a-zA-Z0-9,%\(\)\_\ -/]+)$ /index.php [NC,L,QSA] 

Merci pour toute aide, je suis sûr qu'il est quelque chose de vraiment stupide qui ne va pas, comme d'habitude.

+0

S'il vous plaît essayer de reformate ton 'code' autour d'un bloc de code – superfro

+0

ok, comment c'est ... c'est bizarre parce que ça paraissait bien dans l'aperçu – ianbarker

Répondre

2

Votre problème est que REQUEST_URI ne commence pas par admin, il va avoir une barre oblique ... il pourrait commencer par/admin si vous n'avez pas de base de réécriture ... donc vous pouvez le changer en! ^/admin ou tout simplement! admin ou! admin/si tout votre code est en foo.com/admin/*

REQUEST_URI va être l'ensemble comme GET "/foo/bar.html"

+0

J'ai essayé tout ça. J'ai aussi supposé que cela commencerait par un /. Cependant, aucun d'entre eux ne semble arrêter la variable de langage définie, c'est comme si le 'RewriteCond' était ignoré, ou ne semblait jamais correspondre. Il n'y a pas de code dans/admin/la structure entière est imaginaire – ianbarker

+0

Pourquoi ne pas essayer quelque chose de plus simple ... comme RewriteCond% {REQUEST_URI}! Admin [NC] RewriteRule^(. *) $ $ 1? Not_admin = 1 [R, L] S'il redirige quand vous avez un admin dedans, et non quand vous n'avez pas d'admin dedans alors la règle fonctionne bien ... peut-être vous devez définir aveuglément la variable d'environnement de langue à la valeur par défaut d'abord, peut-être son maintien de sa valeur du dernier processus, car ils sont réutilisés threads? – superfro

+0

Je pense que vous avez raison à ce sujet en gardant sa valeur du dernier processus, la règle semble fonctionner, si je supprime 'RewriteRule^(. *) $ - [ENV = LANGUAGE:% 1, QSA]' la RewriteRule ci-dessous ('RewriteRule^([\ + a-zA-Z0-9,% \ (\) \ _ \ - /] +) $ /index.php [NC, L, QSA]') ne s'exécute pas. On dirait que je pourrais avoir à détecter que c'est dans l'admin avec PHP – ianbarker

Questions connexes