如何使用 Apache VirtualHost 获取 .htaccess 文件

Posted

技术标签:

【中文标题】如何使用 Apache VirtualHost 获取 .htaccess 文件【英文标题】:How to get .htaccess files working with Apache VirtualHost 【发布时间】:2013-01-03 09:26:09 【问题描述】:

我的问题是我的本地服务器上的.htaccess 文件没有被读取。 VirtualHost 文件中的设置似乎总是优先。

我尝试了以下方法:

启用mod_rewriteAllowOverride 更改为All,但这会导致HTTP Error 500 Internal server error。我尝试了各种选项,但总是会导致 500 错误。

我在 Ubuntu 上使用 VirtualHost 文件,如下所示:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /web/website
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /web/website>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
</VirtualHost>

/web/website 下的.htaccess 文件中,我有以下规则(未被阅读):

RewriteEngine On
RewriteCond %SCRIPT_FILENAME !-d
RewriteCond %SCRIPT_FILENAME !-f
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %HTTP_USER_AGENT ^facebookexternalhit
RewriteRule ^(.*)$ ogtags.php?$1 [L,QSA]
ErrorDocument 404 /404
ErrorDocument 401 /401

我尝试过的一件有效的事情是将这些规则直接附加到 VirtualHost 文件中,但我希望我的 .htaccess 文件能够正常工作!有这么大的要求吗? :(

编辑:所以我查看了我的 apache error.log,它说 Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration 指的是我的 .htaccess 文件。似乎没有我可以启用的名为 Action 的模块。有什么想法吗?

编辑 2: 我注意到我的 httpd.conf 文件是空白的。既然我使用的是VirtualHost 文件,这应该有什么关系吗?

【问题讨论】:

我已经尝试注释掉这些规则,但看起来并不是它们导致了问题。还有其他建议吗?我认为您是对的,但一定是这些规则之一是错误的。我什至尝试注释掉所有规则,但它再次没有效果!所以我不知道还能尝试什么! 嗯,但这些规则在实时服务器上运行良好,包括 404。所以我的本地 apache 设置中肯定有其他问题。 httpd.conf 用于添加用户配置,它包含在apache2.conf 文件中。默认为空白。 【参考方案1】:

查看我的 apache error.log 后,我意识到我只需要启用 Apache actions 模块:

sudo a2enmod 操作

不再出现 500 个内部服务器错误!

希望这可以帮助某人:)

【讨论】:

【参考方案2】:

你错过了RewriteBase / 指令

RewriteEngine 指令之后添加:

RewriteEngine On
RewriteBase /

【讨论】:

这并没有改变任何东西,仍然得到HTTP Error 500 Internal server :( 查看日志通常在/var/log/apache2/error.log

以上是关于如何使用 Apache VirtualHost 获取 .htaccess 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VirtualHost 将 http://example.com 重定向到 apache2.conf 中的 https://example.com

后端多个apache 2.4 如何同步设置virtualhost

如何设置别名或 VirtualHost 以在 Apache2 上运行 laravel 项目

导入/包含要在 Apache 的 httpd.conf 中使用的外部 VirtualHost 文件

Apache VirtualHost:如何对不同于 80 的端口进行服务器命名

如何在 AWS ElasticBeanstalk 中修改 apache VirtualHost