153

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

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

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

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

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

4

14 回答 14

315

首先,请注意 .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。

于 2012-08-30T19:01:10.823 回答
130
  1. 启用 Apache mod_rewrite 模块

    a2enmod rewrite

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

    AllowOverride All

  3. 重启阿帕奇

    /etc/init.d/apache2 restart

于 2013-10-16T06:27:50.077 回答
54

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

更改<Directory>指向 htaccess 文件所在的公共网页的指令。从 更改AllowOverride NoneAllowOverride 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

于 2015-09-18T15:30:31.170 回答
23

对于Ubuntu,
首先,运行以下命令:-

sudo a2enmod rewrite

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

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

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

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

完成所有操作后,使用命令重新启动 apachesudo service apache2 restart

于 2016-04-20T11:15:21.510 回答
6

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

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

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

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

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

于 2018-03-05T13:27:35.910 回答
6

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

尝试将其设置为 AllowOverride All

于 2016-10-03T05:57:43.453 回答
6

只需按照 3 个步骤

  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

或者

文档根目录 /var/www

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

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

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

  1. 使用以下命令重新启动您的 apache 服务器

    须藤服务 apache2 重启

于 2017-07-02T07:34:44.630 回答
5

默认情况下,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

于 2018-08-04T19:29:41.827 回答
3

转到 /etc/apache2/apache2.conf

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

<Directory /var/www/>
选项索引 FollowSymLinks
AllowOverride All
要求全部授予

现在你必须重新启动 apache。

服务 apache2 重启

于 2020-10-10T21:38:46.287 回答
2

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

于 2019-07-16T06:30:49.247 回答
1

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

于 2015-05-27T11:14:08.243 回答
0

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

于 2015-11-19T15:27:43.170 回答
0

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

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

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

于 2020-01-12T13:13:55.117 回答
0

我的虚拟机上有很多站点,我只能通过更改需要 .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 个站点,因为当我尝试对整个服务器应用更改时它崩溃了,不知道为什么,但这解决了我的问题

于 2022-03-04T12:44:37.453 回答