2013-03-08 35 views
0

我有以下代碼:的.htaccess讓互聯網服務器錯誤

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

這是返回Internet服務器錯誤,爲什麼呢?

但是,當我刪除|contact,它的工作原理。

工作代碼:

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

爲什麼它的工作原理,以及更早版本不?

回答

2

爲什麼它是一個URI引起無限循環(代碼500),喜歡它的原因:/contact/因爲你在你的重寫規則匹配以下正則表達式:

^(feedback|contact)/? 

然後你在網絡內部轉發匹配的URI :

/contact-us.php?ct=contact 

,你可以看到將再次匹配您的正則表達式:^(feedback|contact)/?和您的規則將再次重定向到/contact-us.php?ct=contact。這個匹配的&轉發將繼續,直到達到重寫限制並且Apache拋出錯誤。

爲了避免這種情況的循環,你應該使用以下規則:

​​

上述規則將匹配下面的URI:

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

不會匹配 URI:/contact-us.php從而防止無限循環。

0

你可以試試:

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

將匹配該兩種選擇。