我在Amazon EC2中使用ubuntu 12.04中的apache 2.2。 我使用
启用了mod_rewritesudo 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评论我修改了问题)
答案 0 :(得分:0)
试试这个:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /good.html [QSA,L]
</IfModule>
您应该将重写规则中的Base和第二个元素更改为您的目录,如果它不是root目录。
答案 1 :(得分:0)
看起来你将有一个重写循环。 Apache重写不会运行一次规则,但每次都会请求一次路径。因此,首次加载时,它会将.*
重写为good.html
。然后它发出good.html
的内部请求并再次重新处理规则,再次重写并向无穷大发出另一个内部请求。 Revent的答案试图通过检查文件是否存在来解决这个问题。您的规则中包含index.html
,因为index.html
存在。如果您删除index.html
文件将不存在,则重写条件将匹配,规则将重写为good.html
。重新处理规则时,文件存在,条件失败,重定向在此之后停止。
要修复,您可以在重写规则之后添加[L]
标志,告诉apache在运行此规则后停止处理规则,这应该会停止循环。如果这没有帮助,您可以添加rewriteCond
以检查request_filename
是否good.html
导致规则在重定向后失败。