我有一台运行在 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
吗?
首先,请注意 .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。
Enable Apache mod_rewrite module a2enmod rewrite 添加以下代码到 /etc/apache2/sites-available/default AllowOverride All Restart 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
AllowOverride FileInfo
即可读取和使用 .htaccess
文件。 All
还启用其他配置覆盖,例如 .httpasswd
(可以使用 Authconfig
而不是 All
单独启用)。
AllowOverride All
为我解决了一个问题,但引入了另一个问题 - 现在我的服务器不解析 PHP,而是以明文形式打印它。
对于 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
只需按照 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
根据我的经验, /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
或只是转义线
默认情况下,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)
转到 /etc/apache2/apache2.conf
您必须编辑该文件(您应该具有 root 权限)。更改目录文本如下:
现在你必须重新启动 apache。
服务 apache2 重启
在 WampServer
打开 WampServer 托盘图标---->阿帕奇---> Apache 模块 --->rewrite_module
为了完整起见,如果“AllowOverride All”不能解决您的问题,您可以使用以下方法调试此问题:
运行 apachectl -S 并查看您是否有多个 namevhost。可能是 httpd 正在寻找另一个 DocumentRoot 的 .htaccess。使用 strace -f apachectl -X 并查找它从哪里加载(或不加载).htaccess。
我的虚拟机上有很多站点,我只能通过更改需要 .htaccess 的站点的配置来解决它
我做了什么:
sudo a2enmod 重写
接下来我只更改了特定站点的配置,而不是每个站点“example.com”
须藤纳米/etc/apache2/sites-enable/example.com.conf
在里面我加了
<Directory /var/www/example.com>
AllowOverride All
</Directory>
服务 apache2 重启
所以它只适用于 1 个站点,因为当我尝试对整个服务器应用更改时它崩溃了,不知道为什么,但这解决了我的问题
不定期副业成功案例分享
"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>
工作。