rewrite_mod已启用,但.htaccess无效

时间:2013-04-11 18:26:36

标签: php apache .htaccess mod-rewrite url-rewriting

我在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评论我修改了问题)

2 个答案:

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

相关问题