Knucklehead尝试使用mod_write正则表达式重定向

时间:2012-01-08 18:21:27

标签: regex .htaccess mod-rewrite

我有一段时间让这个合作。基本上我正在尝试将我的网站的Feed重定向到Feedburner,但我不希望任何带有参数的Feed网址重定向。

例如:

mysite.com/feed/应重定向到http://feeds.feedburner.com/mysite

但此网址不应重定向:

mysite.com/feed/?post_type=custom

现在,第二个网址被重定向到http://feeds.feedburner.com/mysite?post_type=custom,这是有问题的。我希望该URL保持不变。任何有?的网址?在/ feed /之后应该单独留下。

这是我的代码:

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
 RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
 RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/mysite [R=302,NC,L]
</IfModule>

我玩了RewriteRule,但我无法让它合作。我尝试对问号做一个负面的预测,但它没有改变任何东西。

使用([_0-9a-z-]+)?的原因是因为WordPress创建了5 different feeds

提前感谢您的帮助。我觉得自己像一个假人,因为我几个月前沉重到正则表达式,现在我不能这样做。

1 个答案:

答案 0 :(得分:1)

URL中的问号在RewriteRule中不匹配,因为它与REQUEST_URI匹配,而不是QUERY_STRING。如果您希望不重定向,如果有查询字符串,您应该只能添加RewriteCond%{QUERY_STRING} ^ $

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
 RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
 RewriteCond %{QUERY_STRING} ^$
 RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/mysite [R=302,NC,L]
</IfModule>

然后,只有在查询字符串为空时才会重定向。