2010-08-08 159 views
0

我想知道爲什麼下面的htaccess文件生成一個500錯誤:重寫URL問題

<IfModule !mod_rewrite.c> 
    ErrorDocument 500 "Your_Server_Is_Not_Compatible: Apache does not have mod_rewrite loaded. Please check your Apache setup." 
    RedirectMatch 302 .* index.php 
</IfModule> 

<IfModule mod_rewrite.c> 

RewriteEngine on 
RewriteRule ^(.*)$ versions/0/1/$1 

</IfModule> 

感謝在此先感謝

+0

所以我想要任何文件重定向到文件夾/版本/ 0/1中的等價物,例如,index.php => versions/0/1/index.php等... – fabjoa 2010-08-08 20:40:47

+2

爲什麼不問錯誤日誌? – 2010-08-08 20:41:06

+0

我做到了,沒有錯誤顯示日誌 – fabjoa 2010-08-08 20:43:24

回答

2

,因爲你使服務器你得到一個500錯誤進入一個無限循環(它生氣,並拋出錯誤停止)。

這是因爲你RewriteRule的,這將永遠匹配:

RewriteRule ^(.*)$ versions/0/1/$1 

^(.*)$versions/0/1/匹配,等你以後執行初始重寫,規則集被重新評估,並創建了一個循環,看起來像這樣:

versions/0/1/something 
versions/0/1/versions/0/1/something 
versions/0/1/versions/0/1/versions/0/1/something 

..等等。

你應該條件你RewriteRule防止循環,也許如下:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/versions 
RewriteRule ^(.*)$ versions/0/1/$1 

此外,您ErrorDocument 500聲明沒有多大意義,因爲你永遠不會產生一個500錯誤因爲你不沒有啓用mod_rewrite,因爲您已將相關的mod_rewrite指令與<IfModule mod_rewrite.c>包含在一起。

+0

你這個人,蒂姆!正確的錢!多麼愚蠢我不去想那個!那麼,這就是爲什麼社區動力網站搖滾! – fabjoa 2010-08-08 21:10:53

+0

順便說一句,這是我的情況下,想出它有助於在 \t \t#開發 \t#黑客 \t RewriteEngine敘述,以避免無限循環 \t的RewriteCond%{REQUEST_URI}!/版本/ \t#重定向到dev \t重寫規則^ dev的/(.+)版本/ 0/1/$ 1 [L] \t \t #穩定 \t#劈以避免無限循環 \t的RewriteCond%{REQUEST_URI}!/版本/ \t#重定向到穩定 \t重寫規則^(。+)版本/ 0/0/$ 1 fabjoa 2010-08-17 12:12:24