【问题标题】:How to enable mod_rewrite for Apache 2.2如何为 Apache 2.2 启用 mod_rewrite
【发布时间】:2010-10-26 12:39:37
【问题描述】:

我在我的 Vista 机器上全新安装了 Apache 2.2,一切正常,除了 mod rewrite。

我没有注释

LoadModule rewrite_module modules/mod_rewrite.s

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

这样简单的规则
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

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

【问题讨论】:

  • 实际上问题是我的路径错误,因为 ${DOCUMENT_ROOT} 将我指向根目录,这在主机上是可以的,但在本地是错误的,所以问题不只是 RewriteEngine On,我已经有..
  • 您能否将接受的答案更改为this one?当前接受答案的作者承认这还不够好。
  • How to enable mod_rewrite in Ubuntu 12.04 LTS (should work in Debian too)。这显示了安装和激活,下面的教程令人惊讶地不这样做:(
  • 我强烈建议所有想要在 .htacces 文件中启用 mod_rewrite 指令的人使用 AllowOverride FileInfo 而不是允许一切,正如本页上的所有答案所暗示的那样。很遗憾看到所有这些答案都采取了只要它可以工作就可以的方法,而不是试图理解所提出的“解决方案”的后果。尝试了解您在服务器上所做的事情以及如何限制您刚刚使用AllowOverride All 放弃的权限。 RTFM!,这个话题已经很清楚了。
  • @Black 在名为 httpd.conf 的 Apache 配置文件中。在我的 PC 中,它位于 C:\xampp\apache\conf 目录中,因为我使用 XAMPP 安装了 Apache。

标签: apache mod-rewrite


【解决方案1】:

为了使用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 中的应用程序文件将无法访问。

【讨论】:

  • 这里的想法对于 UNIX CLI 是正确的,但这些命令仅适用于基于 Debian 的 Linux 发行版,而不适用于 OP 的 Windows 环境。
  • a2enmod rewrite 完成了这项工作
  • 进一步说明:您还需要确保您的站点配置具有AllowOverride All,以便完全读取.htaccess 文件。
  • @Dennis 你可以使用 a2dismod 重写
  • 如何在 Windows 中使用a2enmod rewrite
【解决方案2】:

对于我的情况,我有

RewriteEngine On

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

我的问题的解决方案是编辑我的虚拟主机条目以包含

AllowOverride all

在相关网站的 &lt;Directory&gt; 部分中。

【讨论】:

  • 确实,即使在.htaccess 中有a2enmod rewriteRewriteEngine On - VirtualHost 文件中AllowOverride all 的存在也会阻止它工作 - 这就是让我着迷的原因,改变它到AllowOverride all 就像一个魅力:)
  • 这里是初学者.. VirtualHost 文件在哪里?
  • 这是要走的路...除了这个,我已经设置了其他所有东西。
  • AllowOverride 指令确定“.htaccess 文件中允许的指令类型”。此外,“当此指令设置为None 时,.htaccess 文件将被完全忽略。在这种情况下,服务器甚至不会尝试读取文件系统中的.htaccess 文件。”官方文档:httpd.apache.org/docs/2.2/mod/core.html#allowoverride
  • 这为我解决了这个问题——我遇到了 WordPress 漂亮的永久链接无法正常工作的问题。如果您执行a2enmod rewrite 然后在 VirtualHosts 文件中将“AllowOverride None”更改为“AllowOverride All”,它应该可以工作。如果您在同一台服务器(和 IP 地址)上运行多个域名,则适用 VirtualHosts 文件。你会设置它来设置域。
【解决方案3】:

尝试设置:AllowOverride All


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

【讨论】:

  • 这应该是排名第一的答案,因为它解决了默认 ubuntu 安装中发生的问题!
  • 这将允许 .htaccess 覆盖任何其他 apache 配置。不建议这样做。
  • 是的 :) 这也是我的问题,但这里是你为像我这样的新手解释的地方,这个“AllowOverride All”位于 /etc/apache2/sites-available/[sitename] .conf 和 [sitename-ssl].conf。因为你,我不得不进行第二次研究:D,顺便谢谢!
【解决方案4】:

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

这对我有用

【讨论】:

  • 将错误从/laravel/public/authors was not found on this server 更改为/index.php was not found on this server
  • 找不到,只有
  • @NicolasS.Xu 把它放在 标签中
  • 我也做了同样的事情,但添加了一个新部分 &lt;Directory /var/www/html&gt; 以应用此文件夹及以上文件夹中的规则。
【解决方案5】:

在 Ubuntu 中:

运行:

a2enmod rewrite

然后:

service apache2 restart

mod_rewrite 现在将启用!

【讨论】:

    【解决方案6】:

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

    希望它有效。

    【讨论】:

    • 这是最新的答案。
    • 如果您在 2019 年及以后,请为这个答案投票 :)
    • 是的,先生,这帮助我摆脱了困境!最简单的答案。
    【解决方案7】:

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

    问题 1

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

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

    1. 打开你的控制台并输入:

      sudo a2enmod rewrite

    2. 重启你的 apache 服务器。

      service apache2 restart

    问题 2

    1. 除了上述之外,如果它不起作用,您可能还必须更改 apache conf 文件(apache2.conf、http.conf 或 000-default 文件)中的覆盖规则。

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

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

    问题 3

    如果你得到一个错误说明 rewrite module is not found,那么可能是你的 userdir 模块 未启用。因此,您需要启用它。

    1. 在控制台中输入:

      sudo a2enmod userdir

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

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

    【讨论】:

    • 问题的大分解。
    • 不要使用AllowOverride All,因为它会启用太多危险的功能(比如使用 perl 脚本)。而是使用AllowOveride Options
    【解决方案8】:

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

    然后转到/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测试,这次就通过了。

    【讨论】:

      【解决方案9】:

      刚刚注意到您说的是 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 文件中的某个位置。

      【讨论】:

      • @gabehabe 你的头像看起来就像拿着我的医生的图标,哈哈
      【解决方案10】:

      我刚刚做了这个

      sudo a2enmod rewrite
      

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

      sudo service apache2 restart
      

      【讨论】:

        【解决方案11】:

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

        AllowOverride mod_rewrite mod_mime
        

        这行应该不加注释

        LoadModule rewrite_module modules/mod_rewrite.so
        

        参考

        【讨论】:

          【解决方案12】:

          使用下面的命令

          sudo a2enmod rewrite
          

          然后通过下面的命令重启 apache

          sudo service apache2 restart
          

          【讨论】:

            【解决方案13】:

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

            ErrorDocument 404 /index.php?page=404
            

            【讨论】:

              【解决方案14】:

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

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

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

              【讨论】:

                【解决方案15】:

                当我第一次遇到忽略流量的 mod_rewrite 规则时,我(令人沮丧地)得知我将它们放在错误的 &lt;VirtualHost&gt; 中,这意味着我的流量将忽略 所有 他们没有不管他们写得多么好。确保这不会发生在您身上:

                # 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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-08-13
                  • 2015-08-31
                  • 2011-01-26
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-16
                  相关资源
                  最近更新 更多