如何启用mod_rewrite的Apache 2.2

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

我已经激活

LoadModule rewrite_module modules/mod_rewrite.s

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

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

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

1465465 次浏览

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

ErrorDocument 404 /index.php?page=404

& lt; edit>

刚刚注意到你说了mod_rewrite。S代替mod_rewrite。所以-希望这是您的问题中的拼写错误,而不是httpd.conf文件中的拼写错误!:)

& lt; / edit>

我更习惯于在Linux上使用Apache,但有一天我不得不这样做。

首先,查看一下Apache安装目录。(我假设你安装到“C:\Program Files”这里)

查看一下文件夹:“C:\Program Files\Apache Software Foundation\Apache2.2\modules”,并确保有一个名为mod_rewrite的文件。在这里。(应该是,它是作为默认安装的一部分提供的。

接下来,打开“C:\Program Files\Apache Software Foundation\Apache2.2\conf”,然后打开httpd.conf。确保台词:

#LoadModule rewrite_module modules/mod_rewrite.so

注释:

LoadModule rewrite_module modules/mod_rewrite.so

此外,如果您希望在默认情况下启用RewriteEngine,则可能需要添加如下内容

<IfModule mod_rewrite>
RewriteEngine On
</IfModule>

到httpd.conf文件的末尾。

如果不是,请确保指定

RewriteEngine On

在你的。htaccess文件中。

在我的情况下,我必须

RewriteEngine On

在我的.htaccess,随着模块正在加载,它不工作。

我的问题的解决方案是编辑我的vhost条目包括

AllowOverride all

<Directory>部分的网站的问题。

为了使用mod_rewrite,你可以在终端中输入以下命令:

sudo a2enmod rewrite

之后重新启动apache2

sudo /etc/init.d/apache2 restart

sudo service apache2 restart

或按新的统一系统控制方式

sudo systemctl restart apache2

然后,如果您愿意,可以使用下面的.htaccess文件。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

上面的.htaccess文件(如果放在DocumentRoot中)将把所有流量重定向到DocumentRoot中的index.php文件,除非该文件存在。

假设你有如下的目录结构,httpdocs是DocumentRoot

httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php

httpdocs中存在的任何文件都将使用上面所示的.htaccess提供给请求者,然而,其他所有文件将被重定向到httpdocs/index.php。您在includes/app中的应用程序文件将无法访问。

尝试设置:AllowOverride All


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

在Ubuntu中:

运行:

a2enmod rewrite

然后:

service apache2 restart

mod_rewrite现在将被启用!

如果没有以上工作尝试编辑/etc/apache2/sites-enabled/000-default

几乎在顶部你会发现

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

AllowOverride None改为AllowOverride All

这对我很有效

对我有用的(在ubuntu中):

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

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

如果你知道问题的根源,有很多方法可以解决这个问题。

问题1

首先,这可能是apache没有安装或启用mod_rewrite.c模块的问题。

因此,您必须按如下方式启用它

  1. 打开你的控制台,输入以下内容:

    # EYZ0 < / p >

  2. 重启apache服务器。

    # EYZ0 < / p >

问题2

  1. 除此之外,如果它不起作用,您还可以更改apache conf文件(apache2.conf, http.conf或000-default文件)的覆盖规则。

  2. 查找目录/var/www/

  3. 将“Override None”更改为“Override All”

问题3

如果你得到一个错误,说明重写模块没有找到,那么可能是你的userdir模块 未启用。因此,您需要启用它。< / p >
  1. 输入控制台:

    # EYZ0 < / p >

  2. 然后尝试启用重写模块,如果仍然未启用(如上所述)。

要进一步了解,您可以访问这个网站:http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

打开终端,输入a2enmod rewrite,它将为Apache启用mod_rewrite模块。

然后转到/etc/apache2/sites-available并编辑默认文件。(为此,您必须对该文件和站点可用文件夹具有可写权限。)

用现有的第4至14行替换下面的内容

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

现在通过/etc/init.d/apache2 restartservice apache2 restart重新启动apache

再次进行干净的URL测试,这一次它将通过。

我刚刚做了这个

sudo a2enmod rewrite

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

sudo service apache2 restart

当我第一次纠结于mod_rewrite规则忽略我的流量时,我(沮丧地)发现我把它们放在了错误的<VirtualHost>中,这意味着我的流量会忽略其中的所有,不管它们写得有多好。确保这不会发生在你身上:

#更改日志位置以适合您的系统。 RewriteLog /var/log/apache-rw.log RewriteLogLevel 2 < /代码> < / p >

如果您重新启动Apache,这些参数将被激活,因此您可以重新使用它们并密切监视mod_rewrite行为。一旦你的问题解决了,把RewriteLogLevel调低,庆祝一下。

在我100%的经验中,我发现RewriteLog帮助我发现了重写规则的问题。我怎么推荐都不为过。祝您在故障排除中好运!

此外,这个书签是你最好的朋友: # EYZ0 < / p >

新的apache版本在某些方面有所改变。如果你的apache版本是2.4,那么你必须去/etc/apache2/。将有一个名为apache2.conf的文件。你必须编辑它(你应该有根权限)。像这样更改目录文本

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

现在重新启动apache。

service apache2 reload

希望它有用。

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

AllowOverride mod_rewrite mod_mime

这一行应该取消注释

LoadModule rewrite_module modules/mod_rewrite.so

具有一定

使用以下命令

sudo a2enmod rewrite

并通过下面的命令重新启动apache

sudo service apache2 restart