.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
,从而防止无限循环