网址重写国家/地区代码的网址

时间:2011-07-18 13:01:47

标签: .htaccess mod-rewrite

我正在写一个多语言网站。因此,我想对URL重写问题提供一些帮助。

案例:

  • 当有人访问www.example.com而未添加国家/地区代码(nl,en,de)时,htaccess会将访问者重定向到www.example.com/nl/ i.g。 RewriteRule !(nl|en|de)(.*).* /nl/ [R=301,L]
  • 该网站已更新,并且有许多网址指​​向该网站(谷歌,论坛)。胃内www.example.com/oldpage-nomore.html。我想要的是以下内容; htaccess应该检测到请求uri不包含nl,en或de,并且应该重定向到pagenotfound.php。 RewriteRule ^(.*)\.html /public/oldurl?section=nl&notfound=$1$2&basehref=true&%1 [PT,L]此重写规则的问题是:所有以.html结尾的文件都被重定向。

我正在寻找的是以下内容:

  • 如果有人访问www.example.com并且未输入任何请求,则应重定向到www.example.com/nl /
  • 当有请求的uri时,这不包含国家代码(nl | en | de)而不是重定向到pagenotfound.php

我尝试了以下但是它不起作用:

RewriteCond %{REQUEST_URI} !^(nl|en|de)$
RewriteRule ^([a-z]{2})/(.*)\.html$ /pagenotfound.php?page=$2 [L,R=404]

我希望有人可以提供帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

尝试将此.htaccess文件放在服务器根文件夹中:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^.*$ /nl/ [R]


RewriteCond %{REQUEST_URI} !^/(nl|en|de)
RewriteRule ^.*/(.*)\.html$ /pagenotfound.php?page=$2 [L,R=404]

(你可能犯了几个错误,我试图解决它们) 我不确定第一个RewriteCond%{REQUEST_URI}正则表达式 - 可能会删除问号或斜线,我现在不能......现在无法测试。