如何启用Apache 2.2的mod_rewrite

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

我没有注释

LoadModule rewrite_module modules/mod_rewrite.s 

但是我的重写规则都不起作用,即使是简单的规则也是如此

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

我正在使用的所有规则正在处理我的托pipe,所以他们应该没问题,所以我的问题是,有没有在Apacheconfiguration隐藏的东西,可以阻止国防部重写?

为了使用mod_rewrite你可以在terminal里input以下命令:

 a2enmod rewrite 

之后重新启动apache2

 /etc/init.d/apache2 restart 

要么

 service apache2 restart 

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

 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 )将会把所有的stream量redirect到DocumentRootindex.php文件,除非文件存在。

所以,假设您有以下目录结构,并且httpdocs是DocumentRoot

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

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

对于我的情况,我有

RewriteEngine On

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

我的问题的解决scheme是编辑我的虚拟主机条目进入

AllowOverride全部

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

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

尝试设置: AllowOverride All


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

如果以上的工作不行,请尝试编辑/ 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中:

跑:

 a2enmod rewrite 

接着:

 service apache2 restart 

mod_rewrite现在将被启用!

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

问题1

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

出于这个原因,你必须启用它如下

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

    sudo a2enmod rewrite

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

    service apache2 restart

问题2

  1. 除上述之外,如果不起作用,还可能需要从apache conf文件(apache2.conf,http.conf或000-default file)中更改覆盖规则。

  2. find“Directory / var / www /”

  3. 将“覆盖无”更改为“覆盖全部”

问题3

如果你得到一个错误,说明重写模块没有find,那么可能你的userdir模块没有启用。 出于这个原因,你需要启用它。

  1. input到控制台中:

    sudo a2enmod userdir

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

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

打开terminal和typ2的a2enmod rewrite ,它会启用你的mod_rewrite模块的Apache。

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

下面用现有的4到14行replace

 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 restart或者service apache2 restart启动你的apache

再次进行干净的URLtesting,这次它会通过。

<编辑>

只是注意到你说的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,你可能需要添加类似的东西

 <IfModule mod_rewrite> RewriteEngine On </IfModule> 

到你的httpd.conf文件的末尾。

如果不是,请确保您指定

 RewriteEngine On 

在你的.htaccess文件的某处。

新的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 

希望它的作品。

我只是做了这个

 sudo a2enmod rewrite 

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

 sudo service apache2 restart 

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

 ErrorDocument 404 /index.php?page=404 

我第一次用mod_rewrite规则来处理,忽略了我的stream量,我(很沮丧地)知道我把它们放在了错误的<VirtualHost> ,这就意味着我的stream量无论写得多好都会忽略掉所有的stream量。 确保这不会发生在你身上:

# 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

什么对我有用(在Ubuntu中):

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

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

我强烈build议每个人都想在.htacces文件中启用mod_rewrite指令来使用AllowOverride FileInfo而不是允许所有的东西,因为这个页面上的所有答案都是build议的。 很遗憾,看到所有这些答案都采取了“长期工作 – 好的方法”,而不是试图理解所提出的“解决scheme”的后果。 尝试了解您在服务器上所做的工作,以及如何限制AllowOverride All提供的权限。 RTFM! 在这个问题上是非常清楚的。 来吧,这不是火箭科学,它只是一个networking服务器!

老线程,只是想把不要设置AllowOverride而是使用你想使用的特定的MOD,

 AllowOverride mod_rewrite mod_mime 

这条线应该是un-comment

 LoadModule rewrite_module modules/mod_rewrite.so 

Refrences