我已经在我的Vista机器上安装了新的Apache 2.2,一切都很好,除了mod重写。

我已经激活

LoadModule rewrite_module modules/mod_rewrite.s

但我的重写规则都没用,即使是像这样简单的

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

我使用的所有规则都在我的主机上工作,所以他们应该是好的,所以我的问题是,在apache配置中有任何隐藏的东西,可以阻止mod重写?


当前回答

显然有不止一种方法可以做到这一点,但我建议使用更标准的方法:

ErrorDocument 404 /index.php?page=404

其他回答

对我有用的(在ubuntu中):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

另外,正如前面提到的,确保在/etc/apache2/sites-available/default的相关部分设置AllowOverride all

显然有不止一种方法可以做到这一点,但我建议使用更标准的方法:

ErrorDocument 404 /index.php?page=404

尝试设置:AllowOverride All。


第二个最常见的问题是没有启用mod重写:a2enmod重写,然后重新启动apache。

旧线程中,不要设置AllowOverride为all而是使用你想使用的特定mod,

AllowOverride mod_rewrite mod_mime

这一行应该取消注释

LoadModule rewrite_module modules/mod_rewrite.so

参考资料

http://www.eschrade.com/page/why-you-should-not-use-htaccess-allowoverride-all-in-production/ https://httpd.apache.org/docs/2.4/misc/security_tips.html https://httpd.apache.org/docs/2.4/rewrite/avoid.html

我刚刚做了这个

sudo a2enmod rewrite

然后需要执行以下命令重新启动apache服务

sudo service apache2 restart