2010-08-08 158 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