.htaccess 未在 Ubuntu 14.04 (Apache 2.4.7) 中加载

Posted

技术标签:

【中文标题】.htaccess 未在 Ubuntu 14.04 (Apache 2.4.7) 中加载【英文标题】:.htaccess not being loaded in Ubuntu 14.04 (Apache 2.4.7) 【发布时间】:2014-11-07 02:18:21 【问题描述】:

我正在尝试在 Ubuntu 14.04 (Apache 2.4.7) 中使用 .htaccess 文件。

这是我的.htaccess 的样子

# 1 YEAR
<FilesMatch "\.(ico|svg|woff|eot|ttf)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

# 1 WEEK
<FilesMatch "\.(jpg|png|gif|css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

# Add correct content-type for fonts 
AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType font/x-woff .woff
AddType image/svg+xml .svg

# Compress compressible fonts
AddOutputFilterByType DEFLATE font/ttf font/otf image/svg+xml

我使用 a2enmod rewrite 启用了 mod_rewrite

然后我编辑/etc/apache2/apache2.conf如下

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

AccessFileName .htaccess

但是.htaccess 文件仍未加载。如果我在.htaccess 文件中添加乱码,一切仍然正常。 .htaccess 位于/var/www/

这是apache2ctl -S的输出

VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server 127.0.1.1 (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost 127.0.1.1 (/etc/apache2/sites-enabled/000-default.conf:1)
         port 80 namevhost edmhunters.com (/etc/apache2/sites-enabled/edmhunters.com.conf:1)
                 alias www.edmhunters.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

我错过了什么?

这是apachectl -t -D DUMP_MODULES的输出

Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 filter_module (shared)
 headers_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
 wsgi_module (shared)

【问题讨论】:

您是否尝试在域“edmhunters.com”上使用它,如果是,您需要检查该域的edmhunters.com.conf,并将其 DocumentRoot 视为.htaccess 应该在的位置就是这样。 @Prix 我的edmhunters.com.conf 中有DocumentRoot /home/jaskaran/edmhunters。我在那里复制了 .htaccess 文件,但现在出现 500 错误。我已将 error.log 添加到我的问题中。 评论.htaccess的所有行并逐条取消评论,看看是否有任何问题导致问题以及是什么 @Prix 为/etc/apache2/apache2.conf 中的根目录添加AllowOverride All 消除了500 错误。由于我的文档根目录与/var/www/ 位于不同的位置,我应该这样做吗?我还看到 .htaccess 文件现在正在加载,但压缩和 Cache-Control 标头仍然无法正常工作。 您是否在服务器中启用了模块以允许它们工作?是的,最好你有每个VirtualHost 的目录选项。 【参考方案1】:

问题是我将.htaccess 文件放在/var/www/ 中,而我的网站的DocumentRoot 指向不同的目录。将 .htaccess 文件移动到该文件夹​​即可解决问题。

【讨论】:

大声笑,我也犯了同样的愚蠢错误,谢谢你的提示:) 花了几个小时才找到它-_-【参考方案2】:

apache 默认已关闭 .htaccess。

/etc/apache2/apache2.conf你应该可以找到类似的行

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

改成

AllowOverride All

然后重启apache,它应该可以工作了。

如果您愿意,也可以在 sites-enabled 文件夹中逐个站点覆盖

有不止一次的地方 AllowOverride None,搜索 AllowOverride

【讨论】:

正如问题中提到的,我已经按照你的建议做了。 是的,我确实重启了服务器。 为我工作。我一遍又一遍地检查站点可用的配置(现在必须以 *.config 结尾才能工作)。

以上是关于.htaccess 未在 Ubuntu 14.04 (Apache 2.4.7) 中加载的主要内容,如果未能解决你的问题,请参考以下文章

未在 ubuntu 14.04 上安装用于 rails 的 mysql gem

.htaccess 在 xampp Ubuntu 14.04 上不起作用

Qt WebEngine 未在 Ubuntu 14.04 上与 Qt 5.12 链接

JBoss WildFly 15.0.1 Final 未在具有 2 GB 的 ubuntu 14.04 vServer 上启动:JRE 内存不足

Laravel 未在 Ubuntu 中加载内页 - 找不到 404

我在 Ubuntu 14.04 中使用 codeigniter 得到 URL not found 问题错误