【问题标题】:.htaccess ErrorDocument 404 not showing up.htaccess ErrorDocument 404 未显示
【发布时间】:2012-08-25 12:09:42
【问题描述】:

我有一台运行在 Linux ubuntu 上的 AWS EC2 服务的服务器,并且我已经安装了 apache、php 和 mysql。

我在文档根/var/www/html 中添加了一个.htaccess 文件。

我在其中输入了以下代码: ErrorDocument 404 /var/www/html/404.php 仍然没有出现。

我多次输入此命令:sudo service httpd restart 重新启动服务器,但没有显示任何更改...

我该如何解决这个问题...我做错了什么吗?

【问题讨论】:

  • 您确定要将400 Bad Request 错误映射到/var/www/html/404.php 吗?

标签: apache .htaccess amazon-ec2 amazon-web-services apache-config


【解决方案1】:

首先,请注意,.htaccess 文件不需要重新启动 httpd。 .htaccess 文件是专门为那些没有 root 权限的人设计的 - 即,没有访问 httpd 服务器配置文件的权限,也无法重新启动服务器。由于您可以重新启动服务器,因此您不需要 .htaccess 文件,可以直接使用主服务器配置。

其次,如果 .htaccess 文件被忽略,您需要检查 AllowOverride 是否设置正确。有关详细信息,请参阅http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride。您还需要确保它设置在正确的范围内 - 即,在您的配置中的正确块中。例如,请确保您编辑块中的那个。

第三,如果你想确保 .htaccess 文件实际上正在被读取,请将垃圾放入其中。 当您将浏览器指向包含该文件的目录时,.htaccess 文件中的无效行(例如“INVALID LINE HERE”)将导致 500 服务器错误。如果没有,则说明您的 AllowOverride 配置不正确。

【讨论】:

  • +1 用于将垃圾放入 .htaccess 文件中作为诊断工具。
  • 编程中的垃圾比听起来更有用。
  • 我把"A STRING"放在我的.htaccess中,所以我会收到一个错误,所以我把AllowOverride All放在我的Debian中的所有apache2.conf中,它可以工作
  • 请注意,AllowOverride 仅适用于 <Directory> 指令,如果放在 <Location ...> 部分中,将被忽略,请参阅:httpd.apache.org/docs/2.4/mod/core.html#allowoverride
  • 还要注意<Directory> 指令需要一个绝对路径而不是相对路径。就我而言,<Directory /> 失败,而 <Directory /var/www/html/subdir> 工作。
【解决方案2】:
  1. 启用 Apache mod_rewrite 模块

    a2enmod rewrite

  2. 将以下代码添加到/etc/apache2/sites-available/default

    AllowOverride All

  3. 重启apache

    /etc/init.d/apache2 restart

【讨论】:

  • 请注意,在 Apache 2.4 中,/etc/apache2/sites-available 下的配置文件现在必须以 .conf 结尾。我的服务器上有一些混淆,在 /etc/apache2/sites-available 中有一个 default.conf,在 /etc/apache2/ 中有一个
  • 谢谢,在我的情况下,在 apache2 中默认没有启用重写
  • 我已经按照这些步骤操作,但它在 apache 2.4 中不起作用我做错了什么=[
  • 看起来需要 ip 覆盖需要身份验证,这种行为是出乎意料的(在 apache 2.2 中允许某些 ip 不这样做),在我看来可能非常危险,因为 ip 异常正在验证身份验证,在 apache 2.2 中它们是完全不同的东西!
  • 我省略了第一步,但在我的 apache.conf(Debian 8,/etc/apache2/apache.conf)中将 AllowOverride 更改为 All,重新启动,文件无法访问,很好。但是错误不是权限被拒绝而是 500 Internal Server Error,这是为什么呢?我可以修复它吗?
【解决方案3】:

WampServer 打开 WampServer 托盘图标 ----> Apache ---> Apache 模块 --->rewrite_module

【讨论】:

    【解决方案4】:

    如果您已尝试上述所有方法,这些都是有效且良好的答案,并且您的 htaccess 文件无法正常工作或被读取,请更改 apache2.conf 文件中的指令。在 Ubuntu 下,路径是 /etc/apache2/apache2.conf

    更改指向 htaccess 文件所在的公共网页的 <Directory> 指令。从AllowOverride None 更改为AllowOverride All

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

    我遇到了同样的问题,在 Ubuntu Ask 上找到了答案和解释!论坛https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

    【讨论】:

    • 或者,可以添加到VHost上
    • 实际上,.htaccess 文件的读取和使用只需要在第三行中的AllowOverride FileInfoAll 还启用其他配置覆盖,例如 .httpasswd(可以通过使用 Authconfig 而不是 All 单独启用)。
    • 添加 AllowOverride All 为我解决了一个问题,但又引入了另一个问题 - 现在我的服务器不解析 PHP,而是以明文形式打印它。
    【解决方案5】:

    在您的 .htaccess 上使用 RewriteBase /{your folder}/

    【讨论】:

      【解决方案6】:

      对于 Ubuntu,
      首先,运行这个命令:-

      sudo a2enmod rewrite
      

      然后,使用 nano 或 vim 使用以下命令编辑文件 /etc/apache2/sites-available/000-default.conf:-

      sudo nano /etc/apache2/sites-available/000-default.conf
      

      然后在000-default.conf 文件中,将其添加到DocumentRoot /var/www/html 行之后。如果您的根 html 目录是其他目录,请写下:-

      <Directory "/var/www/html">
        AllowOverride All
      </Directory>
      

      一切完成后,使用命令sudo service apache2 restart重启apache

      【讨论】:

        【解决方案7】:

        很可能,AllowOverride 设置为 None。在位于 /etc/apache2 文件夹中的 apache2.conf 的目录部分中

        尝试将其设置为 AllowOverride All

        【讨论】:

          【解决方案8】:

          只需三步

          1. 使用以下命令启用 mode_rewrite

            sudo a2enmod 重写

          将询问密码。所以输入你的密码

          1. 更新您位于 /etc/apache2/sites-available/000-default.confdefault.conf 文件 目录。你不能直接编辑它。所以使用以下命令打开

            sudo gedit /etc/apache2/sites-available/000-default.conf

          或者 sudo gedit /etc/apache2/sites-available/default.conf

          你会得到

          DocumentRoot /var/www/html

          DocumentRoot /var/www

          线。在其后添加以下代码。

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

          使用户的目录标签路径与您的文件中显示的相同。

          1. 使用以下命令重启你的 apache 服务器

            sudo service apache2 重启

          【讨论】:

          • 谢谢。来自巴西的问候。
          【解决方案9】:

          根据我的经验,/var/www/ 目录指令会阻止子文件夹虚拟主机指令。因此,如果您尝试了所有建议但仍然无法正常工作并且您正在使用虚拟主机,请尝试此操作;

          1 - 确保您有 AllowOverride All 指令 /etc/apache2/sites-available/example.com.conf

          2 - 检查 /etc/apache2/apache2.conf 中的 /var/www/ 目录指令(可能在第 164 行),如下所示;

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

          如果有 AllowOverride None 指令,请将其更改为 AllowOverride All 或者只是转义线

          【讨论】:

            【解决方案10】:

            默认情况下,Apache 禁止使用 .htaccess 文件来应用重写规则,所以

            第 1 步 - 启用 mod_rewrite(如果未启用) 首先,我们需要激活 mod_rewrite。它可用,但未通过干净的 Apache 2 安装启用。

            $ sudo a2enmod rewrite
            

            这将激活模块或提醒您该模块已启用。要使这些更改生效,请重新启动 Apache。

            $ sudo systemctl restart apache2
            

            mod_rewrite 现在已完全启用。在下一步中,我们将设置一个 .htaccess 文件,我们将使用该文件来定义重定向的重写规则。

            第 2 步 - 设置 .htaccess 使用 nano 或您喜欢的文本编辑器打开默认的 Apache 配置文件。

            $ sudo nano /etc/apache2/sites-available/000-default.conf
            

            在该文件中,您会发现从第一行开始的块。在该块内,添加以下新块,使您的配置文件如下所示。确保所有块都正确缩进。

            /etc/apache2/sites-available/000-default.conf

            <VirtualHost *:80>
                <Directory /var/www/html>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                    Require all granted
                </Directory>
            
                . . . 
            </VirtualHost>
            

            保存并关闭文件。要使这些更改生效,请重新启动 Apache。

            $ sudo systemctl restart apache2
            

            完成。您的 .htacess 应该可以工作。 此链接实际上可能对某人有所帮助 https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

            【讨论】:

            • 对我有用的重启命令是$ sudo httpd -k restart (Red Hat 4.4.7-23)
            【解决方案11】:

            我清除了这个用途。通过使用此站点click Here,按照步骤进行操作,直到 ubuntu 版本 18.04

            【讨论】:

              【解决方案12】:

              为了完整起见,如果“AllowOverride All”不能解决您的问题,您可以使用以下方法调试此问题:

              1. 运行apachectl -S 并查看您是否拥有多个名称虚拟主机。可能是 httpd 正在寻找另一个 DocumentRoot 的 .htaccess。

              2. 使用strace -f apachectl -X 并查找它从哪里加载(或不加载).htaccess。

              【讨论】:

                【解决方案13】:

                转到 /etc/apache2/apache2.conf

                您必须编辑该文件(您应该具有 root 权限)。更改目录文本如下:


                选项索引 FollowSymLinks
                允许覆盖全部
                要求全部授予

                现在你必须重新启动 apache。

                服务 apache2 重启

                【讨论】:

                  猜你喜欢
                  • 2011-05-05
                  • 2013-02-10
                  • 2012-12-17
                  • 2013-01-04
                  • 2021-06-10
                  • 2011-12-01
                  • 1970-01-01
                  • 2014-04-23
                  • 2016-10-12
                  相关资源
                  最近更新 更多