ChatGPT解决这个技术问题 Extra ChatGPT

.htaccess ErrorDocument 404 未显示

我有一台运行在 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 吗?

R
Rich Bowen

首先,请注意 .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> 工作。
D
Danny Sofftie

Enable Apache mod_rewrite module a2enmod rewrite 添加以下代码到 /etc/apache2/sites-available/default AllowOverride All Restart 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,这是为什么呢?我可以修复它吗?
C
Community

如果您已尝试上述所有方法,这些都是有效且良好的答案,并且您的 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


或者,可以添加到虚拟主机上
实际上,在第 3 行中只需要 AllowOverride FileInfo 即可读取和使用 .htaccess 文件。 All 还启用其他配置覆盖,例如 .httpasswd(可以使用 Authconfig 而不是 All 单独启用)。
添加 AllowOverride All 为我解决了一个问题,但引入了另一个问题 - 现在我的服务器不解析 PHP,而是以明文形式打印它。
D
Deval Khandelwal

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


K
KawaiKx

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

尝试将其设置为 AllowOverride All


s
shafiq.rst

只需按照 3 个步骤

使用以下命令启用 mode_rewrite sudo a2enmod rewrite

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

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

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

你会得到

DocumentRoot /var/www/html

或者

文档根目录 /var/www

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

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

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

使用以下命令重新启动您的 apache 服务器 sudo service apache2 restart


谢谢。来自巴西的问候。
E
Erdinç Çorbacı

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

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

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

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

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


A
Abayomi Israel

默认情况下,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)
S
Shamal Sabah

转到 /etc/apache2/apache2.conf

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

选项索引 FollowSymLinks AllowOverride All 要求全部授予

现在你必须重新启动 apache。

服务 apache2 重启


R
Raghul SK

我清除了这个用途。通过使用此站点 click Here,按照步骤操作,直到 ubuntu 版本 18.04 都遵循相同的步骤


B
Bruce

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


g
gilm

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

运行 apachectl -S 并查看您是否有多个 namevhost。可能是 httpd 正在寻找另一个 DocumentRoot 的 .htaccess。使用 strace -f apachectl -X 并查找它从哪里加载(或不加载).htaccess。


o
oruchkin

我的虚拟机上有很多站点,我只能通过更改需要 .htaccess 的站点的配置来解决它

我做了什么:

sudo a2enmod 重写

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

须藤纳米/etc/apache2/sites-enable/example.com.conf

在里面我加了

<Directory /var/www/example.com>
    AllowOverride All
</Directory>

服务 apache2 重启

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅