2011-07-30 59 views
1

我试图让我的.htaccess文件工作。它已经可以工作了,但现在有点烦人了。.htaccess rewritecond匹配的东西除了

我已经modyfied我的.htaccess支持多语言网站有以下:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_URI} !^/public/[a-z]{2}/ [NC] 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

# match those that DO have a language code 
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

这就像一个魅力。当一个双字符语言代码被添加到URL的开头时,?lang被添加到我的index.php中。然而,这是一个问题,因为我的JavaScript文件夹被称为“JS”,这意味着这将被视为是一种语言代码。我其实认为这两个第一个RewriteCond会阻止这种情况发生,但显然不是这样。

我必须承认,.htaccess不是我最擅长的,所以我可能错过了某种简单的解决方案。

回答

4

选项#1:使用此规则(而不是你的最后一行):

RewriteRule ^(?!js)([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

这将什么也不干/js/hello但如果/en/hello(例如)要求将重写。

选项#2:添加类似的条件,你有什么过去的规则(我假设/public/js/是JavaScript文件的实际文件夹 - 如果不是,accordignly调整名称):

RewriteCond %{REQUEST_URI} !^/public/js/ 
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L] 

我建议#1 - 这可能会更难理解..但它都在单线和更快一点(单个正则表达式与#2中的两个)。

相关问题