虚拟子文件夹.htaccess忽略语言代码以用于源代码

时间:2014-02-12 11:03:24

标签: php apache .htaccess mod-rewrite redirect

我使用以下规则进行语言翻译。

两者都很好:

RewriteRule ^([a-z]{2})/?$ /index.php?act=setlang&val=$1  [L,CO=LANG:$1:%{HTTP_HOST}]

RewriteRule ^([a-z]{2})/([a-zA-Z0-9-]+)\.php$ $2.php?act=setlang&val=$1 [L,CO=lang:$1:%{HTTP_HOST}]

所以请访问www.mysite.com/en/test.php,这可以按预期工作。

但是,如果我从mysite.com to mysite.com/(2letterlangcodehere)更改基本网址  所以所有的链接自动都有lang前缀,然后一切都搞砸了(我认为这是由于相对路径,因为希望找到mysite.com/(2letterlangcodehere)下的某些资源,这显然不存在,因为我没有在物理上创建了文件夹。

我怎么能让mysite.com/(langcodehere)只是直观地显示并执行上面的规则,但实质上这个文件夹只是指向mysite.com/的脚本,css,源视角就可以了。 htaccess?

1 个答案:

答案 0 :(得分:1)

尝试在现有规则之前插入此规则:

RewriteRule ^[a-z]{2}/(.+?\.(?:jpe?g|gif|bmp|png|tiff|css|js))$ /$1 [L,NC,R=301]

如果这不起作用,那么您有两个选择:

  1. 在css,js,images文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http://或斜杠/开头。
  2. 尝试在页面标题中添加此内容:<base href="/" />