为什么我使用这些RewriteRules会出现500错误

时间:2011-08-17 04:21:24

标签: apache .htaccess mod-rewrite

我正在共享主机方案上设置一个站点,所以我被困在使用Apache和.htaccess文件。我定义了2个RewriteRules。这两个规则在运行Apache的本地计算机上完美运行。

第一条规则是将/css/.css的请求重写为/www/css/.css 第二个重写其他所有内容到/www/index.php

关于CSS / JS文件的第一个规则是导致500个错误的规则,但我无法弄清楚原因。我尝试了这些规则的每一个不同的化身,总是得到500。

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.(css|js) www/$1.$2 [L]
RewriteRule ^(.*)$ www/index.php [L]

1 个答案:

答案 0 :(得分:0)

因为您编写规则的方式是他们创建无限重写循环,Apache必须在某些时候中断,因此500内部服务器错误。如果您检查错误日志,您将看到确切的错误消息。

[L]标志不一定意味着“重写完成” - 它只是意味着“在此迭代中完成重写 - 让我们从开始再次”。

阅读非常有用: RewriteRule Last [L] flag not working?

要解决您的问题 - 您需要添加一些条件,以便不会一次又一次地重写已重写的规则。这些规则应该为您完成工作(可能的解决方案之一 - 这一切都取决于您的实际项目的设置方式):

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} !^/www/
RewriteRule ^(.*)\.(css|js) www/$1.$2 [L]

RewriteCond %{REQUEST_URI} !^/www/
RewriteRule ^(.*)$ www/index.php [L]