. htaccess ErrorDocument 404未显示

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

我已经在我的文档根目录 /var/www/html中添加了一个 .htaccess文件。

我在里面输入了这个代码: ErrorDocument 404 /var/www/html/404.php仍然没有显示出来。

我一直输入这个命令多次: sudo service httpd restart重新启动服务器,但没有显示更改..。

我该怎么补救... 我做错什么了吗?

311814 次浏览

首先,请注意,对于以下情况,不需要重新启动 httpd。Htaccess 文件。.Htaccess 文件是专门针对那些没有 root 用户、无法访问 httpd 服务器配置文件、无法重新启动服务器的用户的。由于可以重新启动服务器,因此不需要。Htaccess 文件,并可以直接使用主服务器配置。

其次,如果。如果忽略 htaccess 文件,则需要检查 AllowOverride 是否设置正确。详情请参阅 http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride。您还需要确保它设置在正确的作用域中-即在配置中的正确块中。例如,请确保正在编辑块中的 没有

第三,如果您想确保. htaccess 文件实际上正在被读取,那么将垃圾放入其中。 中的无效行,例如“无效行此处”。当您将浏览器指向包含该文件的目录时,htaccess 文件将导致500服务器错误。如果没有,那么您就没有正确配置 AllowOverride。

  1. 启用 Apache mod _ rewrite 模块

    a2enmod rewrite

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

    AllowOverride All

  3. 重启阿帕奇

    /etc/init.d/apache2 restart

WampServer中打开 WampServer 托盘图标—— > Apache ——-> Apache 模块——-> rewrite _ module

如果您已经尝试了以上所有的方法,这些方法都是有效的和好的答案,并且您的 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上找到了答案和解释

对于 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

最有可能的情况是,AllowOverride 被设置为/etc/apache2文件夹中 apache2.conf 的 Directory 部分的 Nothing. in

尝试将其设置为“允许覆盖所有”

只要按照三个步骤

  1. 使用以下命令启用 mode _ rewrite

    改写

将询问密码。请输入您的密码

  1. 更新位于 < em >/etc/apache2/sites- 可用/ 目录的 000-default. confDefault.conf文件。你不能直接编辑它。使用以下命令打开

    Sudo gedit/etc/apache2/sites- 可用/000-default. conf

或者 Sudo gedit/etc/apache2/sites- 可用/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 服务 apache2重新启动

根据我的经验,/var/www/目录指令可以防止子文件夹的虚拟主机指令。因此,如果您已经尝试了所有的建议,仍然无法工作,您正在使用虚拟主机尝试这一点;

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

2-在 /etc/apache2/apache2.conf中检查/var/www/Directory 指令(可能在第164行) ,它看起来像;

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

如果有 AllowOverride None指令,则将其更改为 AllowOverride All或者只是逃生线

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

步骤1ー启用 mod _ rewrite (如果未启用) 首先,我们需要激活 mod _ rewrite。

$ 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- 可用/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

好了,你的头盔应该能用。 这个链接实际上可以帮助一些人 < a href = “ https://www.digital alean.com/community/Tutorials/how-to-rewrite-urls-with-mod _ rewrite-for-apache-on-ubuntu-16-04”rel = “ norefrer”> https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

我批准了这次使用。通过使用这个站点 点击这里,按照下面的步骤操作,同样的步骤会跟踪到 ubuntu 版本18.04

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

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

  2. 使用 strace -f apachectl -X并查找加载(或不加载) .htaccess 的位置。

转到/etc/apache2/apache2.conf

您必须编辑该文件(您应该有根权限):

< 目录/var/www/>
选项索引
允许覆盖全部
要求全部批准

现在必须重新启动 Apache。

服务 apache2重新启动

我的虚拟机上有很多网站, 我只是通过改变我需要.htaccess 的站点的配置来解决这个问题

我所做的:

  1. sudo a2enmod rewrite

接下来我只改变了特定网站的配置,而不是每个网站“ example.com”

  1. sudo nano /etc/apache2/sites-enable/example.com.conf

里面我加了

<Directory /var/www/example.com>
AllowOverride All
</Directory>
  1. service apache2 restart

所以它只适用于1个站点,因为当我试图应用更改整个服务器崩溃,不知道为什么,但这解决了我的问题