rewrite_mod已启用,但.htaccess不起作用

我在Amazon EC2的ubuntu 12.04中使用apache 2.2。 我使用了mod_rewrite

sudo a2enmod rewrite 

并能够看到

 apache2ctl -M 

现在我写了如下的.htaccess代码,并不工作

 # Redirect everything in this directory to "good.html" Options +FollowSymlinks RewriteEngine on RewriteRule .* good.html 

这里是我的/ etc / apache2 / sites-available / default http://pastebin.com/urNfmqan的内容

当我添加LoadModule rewrite_module modules/mod_rewrite.so到httpd.conf我得到这个waiting [Thu Apr 11 18:44:12 2013] [warn] module rewrite_module is already loaded, skipping和htaccess不工作,即使(假设在apache2.2我们不编辑httpd.conf来启用rewrite_mod,但按照anubhava评论我修改了这个问题)

尝试这个:

 <Ifmodulee mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /good.html [QSA,L] </Ifmodulee> 

如果不是根目录,您应该将重写规则中的Base和第二个元素更改为您的目录。

看起来你会有一个重写循环。 Apache重写不会运行规则一次,但是每次请求路径时都会执行一次。 所以在第一次加载它重写.*good.html 。 然后对good.html进行内部请求,再次重新处理规则,再次重写,再次向内部请求无限。 Revent的答案试图通过检查文件是否存在来解决这个问题。 由于index.html存在,你可以在他的规则中获得index.html 。 如果你删除了index.html文件将不存在,重写条件将匹配和规则将重写为good.html 。 当重新处理规则时,文件存在,条件失败,之后停止重定向。

为了解决这个问题,你可以在你的重写规则之后添加[L]标志,告诉Apache在这个运行后停止处理规则,这应该停止循环。 如果没有帮助,可以添加一个rewriteCond来检查request_filename是否为good.html导致规则在重定向后失败。