重写网址问题

时间:2010-08-08 20:39:56

标签: apache .htaccess url-rewriting

我想知道为什么以下htaccess文件会产生500错误:

<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>

非常感谢提前

1 个答案:

答案 0 :(得分: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,因为您' ve用mod_rewrite包围了相关的<IfModule mod_rewrite.c>指令。