如何为Apache 2.2启用mod_rewrite

时间:2009-05-15 14:37:41

标签: apache mod-rewrite

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

我已取消评论

LoadModule rewrite_module modules/mod_rewrite.s

但我的重写规则都不起作用,即使像

那样简单
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

我正在使用的所有规则都在处理我的托管,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的内容,可以阻止mod重写?

15 个答案:

答案 0 :(得分:953)

要使用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中)会将所有流量重定向到index.php中的DocumentRoot文件,除非该文件存在。

所以,假设您有以下目录结构,而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中的应用程序文件。

答案 1 :(得分:221)

对于我的情况,我有

RewriteEngine On

在我的.htaccess中,以及正在加载的模块,但它无法正常工作。

我的问题的解决方案是将我的vhost条目编辑为inlcude

AllowOverride all

在相关网站的<Directory>部分。

答案 2 :(得分:79)

尝试设置:AllowOverride All


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

答案 3 :(得分:73)

如果上述情况不起作用,请尝试编辑/ 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

这对我有用

答案 4 :(得分:43)

在Ubuntu中:

执行命令

a2enmod rewrite

然后:

service apache2 restart

mod_rewrite现在已启用!

答案 5 :(得分:28)

如果您知道问题的根源,有多种方法可以解决此问题。

问题1

首先,您的apache没有安装或启用mod_rewrite.c模块可能会出现问题。

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

  1. 打开你的控制台并输入它,这个:

    sudo a2enmod rewrite

  2. 重新启动您的Apache服务器。

    service apache2 restart

  3. 问题2

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

    2. 找到“目录/ var / www /”

    3. 将“覆盖无”更改为“覆盖所有”

    4. 问题3

      如果您收到错误,说明找不到重写模块,则可能是您的userdir模块 未启用。因此,您需要启用它。

      1. 在控制台中输入:

        sudo a2enmod userdir

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

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

答案 6 :(得分:26)

打开终端和typin 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测试,这次将通过。

答案 7 :(得分:22)

新的apache版本在某种程度上有所改变。如果您的apache版本是2.4,那么您必须转到/etc/apache2/。将有一个名为apache2.conf的文件。你必须编辑那个(你应该有root权限)。像这样更改目录文本

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

现在重启apache。

service apache2 reload

希望它有效。

答案 8 :(得分:15)

<强>&LT;编辑&gt;

刚刚注意到你说mod_rewrite.s而不是mod_rewrite.so - 希望你的问题是一个拼写错误,而不是在httpd.conf文件中! :)

<强>&LT; /编辑&gt;

我更习惯在Linux上使用Apache,但前几天我不得不这样做。

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

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

接下来,打开“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文件中的某个地方。

答案 9 :(得分:5)

我刚刚做了这个

sudo a2enmod rewrite

然后你必须通过以下命令重新启动apache服务

sudo service apache2 restart

答案 10 :(得分:3)

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

ErrorDocument 404 /index.php?page=404

答案 11 :(得分:3)

我第一次使用mod_rewrite规则忽略了我的流量时,我(令人沮丧地)了解到我将它们置于错误的<VirtualHost>中,这意味着我的流量会忽略所有无论他们写得多好,他们都是如此。确保没有发生这种情况:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

如果您正常重启Apache,这些参数将被激活,因此您可以将它们回收并密切监视mod_rewrite行为。解决问题后,将RewriteLogLevel重新打开并庆祝。

在我100%的经验中,我发现RewriteLog帮助我发现了重写规则的问题。我不能推荐这个。祝你的故障排除好运!

此外,这个书签是你最好的朋友: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

答案 12 :(得分:3)

旧线程,只是想把那个没有设置AllowOverride而不是使用你想要使用的特定mod,

AllowOverride mod_rewrite mod_mime

此行应该是未注释的

LoadModule rewrite_module modules/mod_rewrite.so

Refrences

答案 13 :(得分:3)

使用以下命令

sudo a2enmod rewrite

然后通过以下命令重新启动apache

sudo service apache2 restart

答案 14 :(得分:2)

对我有用(在ubuntu中):

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

另外,如前所述,请确保在AllowOverride all的相关部分设置/etc/apache2/sites-available/default