.htaccess 301将目录中的所有页面重定向到其他域而不使用查询字符串

时间:2013-11-21 18:31:19

标签: .htaccess redirect http-status-code-301

这个问题可能已经得到解答,但我似乎无法找到合适的解决方案。

我想301重定向所有页面,如下面的

http://www.domain1.com/nl/dolor/sith
http://www.domain1.com/nl/loremipsum
http://www.domain1.com/nl

到一个新域,同时删除查询字符串,如下所示:

http://www.domain2.nl

所有其他网页(例如http://www.domain1.com/be/loremipsum)仍应有效。只有后缀为nl的应重定向。

请注意,这些不是真正的目录:在我的.htaccess文件中,我有以下语句来重写我的查询字符串:

# Personal Rewrites
RewriteRule ^([A-Za-z0-9-_]+)/?$                                                                                            index.php?lid=$1                                        [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                                                           index.php?lid=$1&pl1=$2                                 [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                                          index.php?lid=$1&pl1=$2&pl2=$3                          [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                                         index.php?lid=$1&pl1=$2&pl2=$3&pl3=$4                   [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                        index.php?lid=$1&pl1=$2&pl2=$3&pl3=$4&pl4=$5            [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$       index.php?lid=$1&pl1=$2&pl2=$3&pl3=$4&pl4=$5&pl5=$6     [L] 

我尝试过传统的重写,但这也会发送查询字符串:

Redirect 301 /nl http://www.domain2.nl

其他技术似乎不起作用。而且我不擅长正则表达式......

有人可以提供或链接到合适的解决方案吗?提前致谢

2 个答案:

答案 0 :(得分:6)

将此规则添加为 DOCUMENT_ROOT / .htaccess中的第一条规则:

RewriteRule ^nl(/.*|)$ http://www.domain2.nl/? [L,R=301,NC]

关于正则表达式的另一个提示:

您应该更改正则表达式使用:[\w-]而不是[A-Za-z0-9-_],因为:

  1. 连字符应该是字符类中的第一个或最后一个字符,以避免转义
  2. \w相当于[a-zA-Z0-9_]

答案 1 :(得分:4)

您只需在目标的末尾添加?即可。也可以使用mod_alias执行此操作:

Redirect 301 /nl http://www.domain2.nl?

但是,您会在浏览器的地址栏中看到迷路?

如果你不想要迷路?,你必须坚持使用mod_rewrite:

RewriteRule ^nl/(.*)$ http://www.domain2.nl/$1? [L,R=301]

(在之前,你想要 任何你已经拥有的重写。