2010-11-10 134 views
0

我一直试图让wikipedia风格的语言的东西工作。所以,英文网址为en.example.com,法文网址为fr.example.com ......这样做很好,但是我希望管理区域始终默认为基本语言,即不设置LANGUAGE环境变量。我试过添加RewriteCond %{REQUEST_URI} !^admin [NC],但它似乎没有效果。RewriteCond排除一个目录和它的子目录

我的mod_rewrite代码如下:

# 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] 

感谢您的帮助,我敢肯定这件事情非常愚蠢,这是错误,像往常一样。

+0

请尝试将整个GET重新格式化你的'代码'围绕一个代码块 – superfro 2010-11-10 17:09:24

+0

好吧,怎么样...这很奇怪,因为它在预览中看起来很好 – ianbarker 2010-11-10 17:27:06

回答

2

你的问题是,REQUEST_URI不以管理员开头,它的前面会有一个斜杠......如果你没有重写基地,它可能以/ admin开头......所以你可以改变它!^/admin或只是管理员或管理员/如果所有的代码是在foo.com/admin/*

REQUEST_URI将是像“/foo/bar.html”

+0

我试过所有这些。我也认为它会以a开头。然而,他们似乎都没有停止设置的语言变量,就好像'RewriteCond'被忽略,或者似乎从未匹配。 /admin /中没有代码/整个结构是虚构的 – ianbarker 2010-11-11 09:14:09

+0

为什么不尝试一些简单的...例如 RewriteCond%{REQUEST_URI}!admin [NC] RewriteRule ^(。*)$ $ 1?not_admin = 1 [R,L] 如果它重定向,当你有管理员在那里,而不是当你没有管理员那里时,规则工作正常......也许你需要盲目设置语言环境变量到默认的第一个,也许它保留了自上一个进程以来的值,因为它们被重用了线程? – superfro 2010-11-11 14:59:40

+0

我认为你是正确的,它保留了最后一道工序的价值,如果我删除了'RewriteRule ^(。*)$ - [ENV = LANGUAGE:%1,QSA]'下面的RewriteRule ('RewriteRule ^([\ + a-zA-Z0-9,%\(\)\ _ \ -//] +)$ /index.php [NC,L,QSA]')不运行。看起来我可能不得不检测这是在PHP管理 – ianbarker 2010-11-12 10:25:39