.htaccess上网服务器错误

时间:2013-03-08 21:14:56

标签: .htaccess

我有以下代码:

RewriteRule ^(feedback|contact)/? /contact-us\.php?ct=$1 [L]

返回 INTERNET SERVER ERROR ,为什么?

但是当我删除|contact时,它就可以了。

工作代码:

RewriteRule ^(feedback)/? /contact-us\.php?ct=$1 [L]

为什么它有效,而早先没有?

2 个答案:

答案 0 :(得分:2)

为什么它会导致像/contact/这样的URI的无限循环(代码500),因为你在RewriteRule中匹配以下正则表达式:

^(feedback|contact)/?

然后你在内部将匹配的URI转发到:

/contact-us.php?ct=contact

您可以看到的内容将再次与您的正则表达式匹配:^(feedback|contact)/?,您的规则将再次重定向到/contact-us.php?ct=contact。这个匹配&转发将继续,直到达到重写限制并且Apache抛出错误。

要避免此循环,您应使用以下规则:

RewriteRule ^(feedback|contact)(/.*|)$ /contact-us.php?ct=$1 [L,QSA,NC]

以上规则将匹配以下URI:

/contact
/contact/
/contact/foo
/contact/foo/bar
...

但它将不匹配 URI:/contact-us.php,从而阻止了无限循环。

答案 1 :(得分:0)

您可以尝试:

^(feedback|contact).*? /contact-us\.php?ct=$1 [L]

哪两个选项匹配。