我正在尝试让我的.htaccess文件正常工作。好吧它已经有效,但现在有些烦人。
我已经修改了我的.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不是我最擅长的,所以我可能错过了某种简单的解决方案。
答案 0 :(得分:4)
选项#1:使用此规则(而不是最后一行):
RewriteRule ^(?!js)([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L]
这对/js/hello
无效,但如果请求/en/hello
(例如),则会重写。
选项#2:添加类似于之前规则的条件(我假设/public/js/
是JavaScript文件的实际文件夹 - 如果不是,请根据需要调整名称) :
RewriteCond %{REQUEST_URI} !^/public/js/
RewriteRule ^([a-z]{2})/(.*)$ index.php?lang=$1&url=$2 [PT,L]
我建议#1 - 它可能更难理解..但它都是单行且速度更快(单个正则表达式与#2中的两个)。