如何为Apache2.2启用mod_重写

如何为Apache2.2启用mod_重写,apache,mod-rewrite,Apache,Mod Rewrite,我在我的Vista机器上安装了新的Apache2.2,除了mod rewrite外,一切正常 我没有注释 LoadModule rewrite_module modules/mod_rewrite.s 但是我的重写规则都不起作用,即使是像这样简单的规则 RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404 我使用的所有规则都适用于我的主机,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可能会阻止mod

我在我的Vista机器上安装了新的Apache2.2,除了mod rewrite外,一切正常

我没有注释

LoadModule rewrite_module modules/mod_rewrite.s
但是我的重写规则都不起作用,即使是像这样简单的规则

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

我使用的所有规则都适用于我的主机,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可能会阻止mod rewrite?

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

ErrorDocument 404 /index.php?page=404

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

我更习惯于在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
此外,如果您希望在默认情况下启用重写引擎,您可能需要添加以下内容

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

在你的.htaccess文件中的某个地方。

对于我的情况,我

RewriteEngine On
在my
.htaccess
中,随着模块被加载,它无法工作

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

AllowOverride all

在有关站点的
部分中。

要使用
mod_rewrite
,您可以在终端中键入以下命令:

sudo a2enmod rewrite
之后重新启动apache2

sudo /etc/init.d/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>

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

尝试设置:
AllowOverride All


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

在Ubuntu中:

service apache2 reload
运行:

然后:

service apache2 restart

mod_rewrite
现在将启用!

如果没有上述工作,请尝试编辑/etc/apache2/sites enabled/000默认值

几乎在顶端你会发现

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

选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
AllowOverride None
更改为
AllowOverride All

这对我有用(在ubuntu中):


此外,如前所述,确保在
/etc/apache2/sites available/default

的相关部分中设置了
AllowOverride all
,如果您知道问题的根源,可以通过多种方法解决此问题

问题1

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

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

  • 打开控制台并键入以下内容:

    sudo a2enmod重写

  • 重新启动apache服务器

    服务apache2重启

  • 问题2

  • 除上述内容外,如果不起作用,您可能还必须更改apache conf文件(apache2.conf、http.conf或000默认文件)中的覆盖规则

  • 找到“目录/var/www/”

  • 将“覆盖无”更改为“覆盖全部”

  • 问题3

    如果您得到一个错误,说明未找到重写模块,那么可能是您的userdir模块 未启用。因此,您需要启用它

  • 在控制台中键入以下内容:

    sudo a2enmod userdir

  • 如果仍然没有启用重写模块(如上所述),请尝试启用该模块


  • 要进一步了解这一点,您可以访问以下站点:

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

    然后转到
    /etc/apache2/sites available
    并编辑默认文件。(为此,您必须对此文件和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>
    
    DocumentRoot/var/www
    选项如下符号链接
    允许超越所有
    选项索引跟随符号链接多视图
    允许超越所有
    命令允许,拒绝
    通融
    
    现在通过
    /etc/init.d/apache2重新启动
    服务apache2重新启动

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

    我刚刚做了这个

    sudo a2enmod rewrite
    
    然后,您必须通过以下命令重新启动apache服务

    sudo service apache2 restart
    

    当我第一次在mod_rewrite rules(忽略我的流量)中挣扎时,我(令人沮丧地)了解到我将它们放在了错误的
    ,这意味着我的流量将忽略所有这些规则,无论它们写得多么好。请确保这不会发生在你身上:

    #更改日志位置以适合您的系统。
    重写日志/var/log/apache-rw.log
    重写日志级别2

    如果您顺利重新启动Apache,这些参数将被激活,因此您可以将它们回收并密切监视mod_重写行为。问题解决后,请将RewriteLogLevel调低并庆祝

    根据我100%的经验,我发现“重写日志”帮助我发现了重写规则的问题。我对此的建议还不够。祝你在故障排除中好运

    此外,此书签是您最好的朋友: <
    sudo su
    cd /etc/apache2/mods-enabled
    ln ../mods-available/rewrite.load rewrite.load
    
    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>
    
    sudo a2enmod rewrite
    
    sudo service apache2 restart
    
    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    service apache2 reload
    
    AllowOverride mod_rewrite mod_mime
    
    LoadModule rewrite_module modules/mod_rewrite.so
    
    sudo a2enmod rewrite
    
    sudo service apache2 restart