2

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

4

2 回答 2

0

看起来你会有一个重写循环。Apache rewrite 不会运行一次规则,而是每次请求路径时运行一次。所以在第一次加载时它重写.*good.html. 然后它再次对规则进行内部请求good.html并重新处理,再次重写并向无穷大发出另一个内部请求。Revent 的回答试图通过检查文件是否存在来解决这个问题。index.html因为index.html存在,所以你会遵守他的规则。如果您删除index.html该文件将不存在,则重写条件将匹配并且规则将重写为good.html. 重新处理规则时,文件存在,条件失败,此后重定向停止。

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

于 2013-04-11T18:54:41.957 回答
0

尝试这个:

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

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

于 2013-04-11T18:31:34.797 回答