htaccess重写条件重定向到根域

时间:2015-02-18 13:53:46

标签: apache .htaccess mod-rewrite redirect

我只是简单地尝试将多个页面重定向到根域,并且不确定其失败的原因,没有任何反应。

RewriteEngine On
RewriteCond %{QUERY_STRING} /category/uncategorized/
RewriteCond %{QUERY_STRING} /2014/12/
RewriteCond %{QUERY_STRING} attachment_id=19
RewriteCond %{QUERY_STRING} attachment_id=18
RewriteCond %{QUERY_STRING} attachment_id=5
RewriteCond %{QUERY_STRING} attachment_id=20
RewriteCond %{QUERY_STRING} attachment_id=72
RewriteCond %{QUERY_STRING} attachment_id=6
RewriteCond %{QUERY_STRING} attachment_id=10
RewriteCond %{QUERY_STRING} attachment_id=15
RewriteCond %{QUERY_STRING} attachment_id=14
RewriteCond %{QUERY_STRING} attachment_id=16
RewriteCond %{QUERY_STRING} attachment_id=17
RewriteCond %{QUERY_STRING} attachment_id=99
RewriteCond %{QUERY_STRING} attachment_id=44
RewriteRule http://domain.com? [L,R=301]

WP重写是在同一个.htaccess中,但是如果我删除它们就没有变化。

2 个答案:

答案 0 :(得分:1)

下面的内容应该有效。确保它位于.htaccess

中的DocumentRoot
RewriteEngine On
RewriteRule category/uncategorized/? http://domain.com? [L,R=301]

RewriteRule 2014/12/? http://domain.com? [L,R=301]

RewriteCond %{QUERY_STRING} attachment_id=([56]|1[4-9]|20|44|72|99)
RewriteRule ^ http://domain.com? [L,R=301]

答案 1 :(得分:0)

编辑: @ arco444的答案对您有用(确实是一个更好的答案),但您必须尝试准确理解什么是如果您想使用它,就会发生。

选项1

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/uncategorized/ [OR]
RewriteCond %{REQUEST_URI} ^/2014/12/ [OR]
RewriteCond %{QUERY_STRING} attachment_id=19 [OR]
RewriteCond %{QUERY_STRING} attachment_id=18 [OR]
RewriteCond %{QUERY_STRING} attachment_id=5 [OR]
RewriteCond %{QUERY_STRING} attachment_id=20 [OR]
RewriteCond %{QUERY_STRING} attachment_id=72 [OR]
RewriteCond %{QUERY_STRING} attachment_id=6 [OR]
RewriteCond %{QUERY_STRING} attachment_id=10 [OR]
RewriteCond %{QUERY_STRING} attachment_id=15 [OR]
RewriteCond %{QUERY_STRING} attachment_id=14 [OR]
RewriteCond %{QUERY_STRING} attachment_id=16 [OR]
RewriteCond %{QUERY_STRING} attachment_id=17 [OR]
RewriteCond %{QUERY_STRING} attachment_id=99 [OR]
RewriteCond %{QUERY_STRING} attachment_id=44
RewriteRule ^ http://domain.com? [L,R=301]

这里的主要内容是[OR]标志。在原始代码中,您基本上是说必须满足所有条件。请记住,最后一个条件不应该是[OR]

其次,您使用QUERY_STRING检查category/...,但这与查询字符串无关,后者显示在?之后。所以,我已将其更改为%{REQUEST_URI}

此外,您的RewriteRule没有要匹配的URI。我在域名前添加了^,表示它应该匹配所有内容(即,条件已满足)。

选项2

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/uncategorized/ [OR]
RewriteCond %{REQUEST_URI} ^/2014/12/ [OR]
RewriteCond %{QUERY_STRING} attachment_id=(5|6|10|14|15|16|17|18|19|20|44|72|99)
RewriteRule ^ http://domain.com? [L,R=301]

在这里,我简化了查询字符串检查。我们现在使用一个条件来检查不同的附件ID。

您可以进一步简化这一点,但我的回答的目的是让您知道哪里出错了,哪些事情可以简化一点。