.htaccess没有工作的apache

Sha*_*hah 124 apache .htaccess amazon-ec2 apache-config amazon-web-services

我有一个运行在Linux ubuntu上的AWS EC2服务的服务器,我已经安装了apache,php和mysql.

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

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

我多次输入此命令:sudo service httpd restart重启服务器但没有显示更改...

我怎么能解决这个问题......我做错了什么?

提前致谢!

Ric*_*wen 265

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

  • 将垃圾放入.htaccess文件中作为诊断工具+1. (127认同)
  • 编程中的垃圾比听起来更有用. (40认同)
  • 另请注意,`<Directory>` 指令需要绝对路径而不是相对路径。在我的例子中,`<Directory />` **failed** 而 `<Directory /var/www/html/subdir>` 工作。 (2认同)

小智 106

  1. 启用Apache mod_rewrite模块

    a2enmod rewrite

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

    AllowOverride All

  3. 重启apache

    /etc/init.d/apache2 restart

  • 请注意,在Apache 2.4中,/ etc/apache2/sites-available下的配置文件现在必须以.conf结尾.我的服务器上有一些混合,在/ etc/apache2/sites-available中有一个default.conf,在/ etc/apache2 /中有一个. (7认同)
  • 谢谢,在我的情况下,默认情况下apache2中没有启用重写 (2认同)

use*_*891 40

如果您已经尝试了以上所有这些,这些都是有效且良好的答案,并且您的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>
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的问题,并在Ubuntu Ask上找到答案和解释!论坛https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

  • 或者,它可以添加到 VHost (2认同)

kha*_*val 18

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

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

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

sudo nano /etc/apache2/sites-available/000-default.conf
Run Code Online (Sandbox Code Playgroud)

然后在000-default.conf文件中,在行之后添加DocumentRoot /var/www/html.如果您的root html目录是其他的,那么写下: -

<Directory "/var/www/html">
  AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

完成所有操作后,使用该命令重启apache sudo service apache2 restart


小智 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

要么

DocumentRoot/var/www

线.之后添加以下代码.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用以下命令重新启动Apache服务器

    sudo service apache2 restart


Erd*_*acı 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>
Run Code Online (Sandbox Code Playgroud)

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


Kaw*_*iKx 5

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

尝试将其设置为AllowOverride All


Aba*_*ael 5

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

步骤 1 — 启用 mod_rewrite(如果未启用) 首先,我们需要激活 mod_rewrite。它可用,但未通过干净的 Apache 2 安装启用。

$ sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

这将激活模块或提醒您该模块已启用。要使这些更改生效,请重新启动 Apache。

$ sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

mod_rewrite 现在完全启用。在下一步中,我们将设置一个 .htaccess 文件,用于定义重定向的重写规则。

步骤 2 — 设置 .htaccess 使用 nano 或您喜欢的文本编辑器打开默认的 Apache 配置文件。

$ sudo nano /etc/apache2/sites-available/000-default.conf
Run Code Online (Sandbox Code Playgroud)

在该文件中,您会发现从第一行开始的块。在该块内,添加以下新块,使您的配置文件如下所示。确保所有块都正确缩进。

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

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

    . . . 
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

$ sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

完毕。您的 .htacess 应该可以工作。 此链接实际上可能对某人有所帮助 https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04