当前位置:  开发笔记 > 编程语言 > 正文

如何为Apache 2.2启用mod_rewrite

如何解决《如何为Apache2.2启用mod_rewrite》经验,为你挑选了10个好方法。

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

我没有注释

LoadModule rewrite_module modules/mod_rewrite.s

但是我的重写规则都没有,即使是简单的重写规则

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

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



1> Jonathan May..:

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

sudo a2enmod rewrite

之后重启apache2

sudo /etc/init.d/apache2 restart

要么

sudo service apache2 restart

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

sudo systemctl restart apache2

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


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

上述.htaccess文件(如果放在您DocumentRootindex.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将无法访问.


进一步说明:您还需要确保您的站点的配置具有"AllowOverride All",以便完全读取`.htaccess`文件.
a2enmod重写完成了这项工作
这里的想法对于UNIX CLI是正确的,但这些命令仅适用于基于Debian的Linux发行版,而不适用于OP的Windows环境.
CentOS,Fedora,RedHat没有这个命令
如何在Windows中使用`a2enmod rewrite`?
@Dennis你可以使用a2dismod重写
如果您不需要允许任何其他覆盖,请在站点配置中使用"AllowOverride FileInfo"而不是"All".

2> 小智..:

对于我的情况,我有

RewriteEngine On

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

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

AllowOverride all

在该网站的部分中.


实际上,即使在`.htaccess`中使用`a2enmod rewrite`和`RewriteEngine On` - VirtualHost文件中存在'AllowOverride all`也会阻止它工作 - 这就是让我失望的原因,将它改为`AllowOverride all `工作就像一个魅力:)
初学者在哪里..哪里是VirtualHost文件?
这是要走的路......除了这个,我还有其他一切.
`AllowOverride`指令确定`.htaccess`文件中允许的指令类型".此外,"当此指令设置为`None`时,则完全忽略`.htaccess`文件.在这种情况下,服务器甚至不会尝试读取文件系统中的`.htaccess`文件." 官方文档:http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride

3> Jarrod..:

我在一篇文章中写过这篇文章:http: //www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu

尝试设置:AllowOverride All.


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



4> 小智..:

如果不是上述工作尝试编辑/ etc/apache2/sites-enabled/000-default

几乎在顶部你会发现


    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all

更改AllowOverride NoneAllowOverride All

这对我有用



5> nickleefly..:

在Ubuntu中:

跑:

a2enmod rewrite

然后:

service apache2 restart

mod_rewrite 现在将启用!



6> Kripa Jayaku..:

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

问题1

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

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

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

    sudo a2enmod rewrite

    重启你的apache服务器.

    service apache2 restart

问题2

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

    找到"目录/ var/www /"

    将"覆盖无"更改为"覆盖所有"

问题3

如果您收到错误,指出未找到重写模块,那么可能您的userdir模块未启用.因此,您需要启用它.

    在控制台中输入以下内容:

    sudo a2enmod userdir

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

要进一步阅读此内容,您可以访问以下网站:http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html


问题严重崩溃.

7> Umesh Patil..:

打开终端和打印a2enmod rewrite,它将mod_rewrite为您的模块启用Apache.

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

在下面用现有的第4到14行替换

DocumentRoot /var/www

Options FollowSymLinks
AllowOverride All


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

现在用/etc/init.d/apache2 restart或重启你的apacheservice apache2 restart

再次进行干净的URL测试,这次它将被传递.



8> Ijas Ahamed ..:

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


    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted

现在重启apache.

service apache2 reload

希望它有效.



9> Danny Battis..:

<编辑>

刚刚注意到你说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

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


    RewriteEngine On

到httpd.conf文件的末尾.

如果没有,请确保指定

RewriteEngine On

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



10> 小智..:

我只是这样做

sudo a2enmod rewrite

那么您必须通过以下命令重新启动apache服务

sudo service apache2 restart

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有