我在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
导致规则在重定向后失败。