.htaccess ErrorDocument 404 not showing up



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

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

我在里面输入了这个代码:CCD_ 3并且它仍然没有出现。

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

我该如何解决。。。我做错什么了吗?

首先,注意.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. 启用Apache mod_rewrite模块

    a2enmod rewrite

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

    AllowOverride All

  3. 重新启动apache

    /etc/init.d/apache2 restart

如果您尝试了以上所有操作,这些操作都是有效且正确的答案,但您的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设置为None。位于/etc/apache2文件夹中的apache2.conf的目录部分

尝试将其设置为AllowOverride All

  1. 使用以下命令启用模式写入

    sudo a2enmod重写

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

  1. 更新/etc/apache2/可用站点目录下的000 default.confdefault.conf文件。你不能直接编辑它。所以使用以下命令打开

    sudo gedit/etc/apache2/站点可用/00-default.conf

或者sudo gedit/etc/apache2/站点可用/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/directory指令阻止子文件夹虚拟主机指令。所以,如果你已经尝试了所有的建议,但仍然不起作用,并且你正在使用虚拟主机,那么试试这个;

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。它是可用的,但没有在干净的Apache2安装中启用。

$ 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/可用站点/00-default.conf

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

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

$ sudo systemctl restart apache2

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

我清除了这种使用。通过使用此网站,单击此处,按照步骤操作,同样的步骤一直到ubuntu版本18.04

转到/etc/apache2/apache2.conf

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

<目录/var/www/>
选项索引跟随符号链接
AllowOverride All
要求全部授予

现在您必须重新启动apache。

service-apache2重新启动

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

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

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

  2. 使用strace -f apachectl -X并查找它从何处加载(或未加载).htaccess。

我的虚拟机上有很多站点,我只是通过更改我需要的网站的配置来解决它。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个站点,因为当我试图对整个服务器进行更改时,它崩溃了,不知道为什么,但这解决了我的问题

最新更新