.htaccess获取internet服务器错误

.htaccess获取internet服务器错误,.htaccess,.htaccess,我有以下代码: RewriteRule ^(feedback|contact)/? /contact-us\.php?ct=$1 [L] 哪个返回了INTERNET服务器错误,为什么 但是当我删除| contact时,它就起作用了 工作代码: RewriteRule ^(feedback)/? /contact-us\.php?ct=$1 [L] 为什么它有效,而早些时候不行 您可以尝试: ^(feedback|contact).*? /contact-us\.php?ct=$1 [L]

我有以下代码:

RewriteRule ^(feedback|contact)/? /contact-us\.php?ct=$1 [L]
哪个返回了INTERNET服务器错误,为什么

但是当我删除
| contact
时,它就起作用了

工作代码:

RewriteRule ^(feedback)/? /contact-us\.php?ct=$1 [L]
为什么它有效,而早些时候不行

您可以尝试:

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

这将匹配这两个选项。

它导致URI出现无限循环(代码500)的原因如下:
/contact/
,因为您在重写规则中匹配了以下正则表达式:

^(feedback|contact)/?
然后在内部将匹配的URI转发到:

/contact-us.php?ct=contact
您可以看到的将再次匹配您的正则表达式:
^(反馈| 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
,从而防止无限循环