Apache mod_rewrite规则

时间:2014-01-28 04:44:28

标签: apache .htaccess mod-rewrite

如果我有以下规则:

Rewrite 301 /page/22 http://newdomain.com/
Rewrite 301 /page/23 http://newdomain.com/test
Rewrite 301 /page/24 http://newdomain.com/test2
Rewrite 301 / http://newdomain.com

顶部的规则是否优先于我底部的规则? 并将使用:

Rewrite 301 / http://newdomain.com

将其他规则未捕获的所有请求重定向到新域? 或者仅当URL的domainName.com后面带斜杠时才会起作用吗?

我还需要逃避规则中的问号,例如:

Redirect 301 /items/item/94?Test123 http://newdomain.com

1 个答案:

答案 0 :(得分:0)

  

顶部的规则是否优先于我底部的规则?并将使用:

规则的顺序很重要,因为规则按照它们出现的顺序应用。但是,Rewrite不是有效的apache指令。有Redirect,它是mod_alias的一部分,RewriteRule是mod_rewrite的一部分。

  

Rewrite 301 / http://newdomain.com

假设您在这里实际意味着Redirect,这将重定向所有未被先前规则捕获的请求。这是因为Redirect将两个URL路径链接在一起,因此/之后的任何内容都会传递给目标。您可能还需要/

末尾的http://newdomain.com
  

我还需要逃避规则中的问号,例如:

没有。 Redirect语句与查询字符串或URL中?之后的所有内容都不匹配。您可以匹配查询字符串的唯一方法是使用mod_rewrite和%{QUERY_STRING}变量。与您尝试做的相同的是:

RewriteCond %{QUERY_STRING} ^Test123$
RewriteRule ^items/item/94$ http://newdomain.com/ [L,R=301]