我想设置AllowOverride all
但我不知道该怎么做。我通过搜索谷歌找到了以下代码并将其粘贴到.htaccess
:
<Directory>
AllowOverride All
</Directory>
但在粘贴后我开始接收"Internal Server Error"
任何人都可以指导我在哪里放置此代码或如何操作?
答案 0 :(得分:273)
如果您使用的是Ubuntu,请修改文件/etc/apache2/apache2.conf
(此处我们有/var/www
的示例):
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
并将其更改为;
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
然后,
sudo service apache2 restart
您可能还需要执行sudo a2enmod rewrite
以启用模块重写。
答案 1 :(得分:42)
AllowOverride
的主要目标是apache的主要配置文件管理器(主要在/ etc / apache2 /中找到),以决定在每个路径上动态更改配置的哪个部分应用基础。
如果您不是服务器的管理员,则依赖于这些管理员允许的AllowOverride级别。这样他们就可以阻止你改变一些重要的安全设置;
如果您是主apache配置管理器,则应始终使用AllowOverride None
并将基于.htaccess文件的所有google_based示例传输到主配置文件上的Directory
部分。由于.htaccess
中/my/path/to/a/directory
文件的.htaccess内容与<Directory /my/path/to/a/directory>
指令相同,但.htaccess
动态每HTTP请求配置更改会减慢速度关闭您的Web服务器。总是更喜欢没有.htaccess
检查的静态配置(并且还会通过.htaccess
更改来避免安全攻击。
顺便提一下,在您的示例中,您使用的是<Directory>
,这始终是错误的,目录说明始终包含路径,例如<Directory />
或<Directory C:>
或<Directory /my/path/to/a/directory>
。当然,这不能放在.htaccess
中,因为.htaccess
就像一个目录指令,但是在这个目录中的文件中。当然,您无法更改AllowOverride
中的.htaccess
,因为此说明正在管理.htaccess
个文件的安全级别。
答案 2 :(得分:16)
转到your_severpath/apache_ver/conf/
在记事本中打开文件httpd.conf
。
找到这一行:
#LoadModule vhost_alias_module modules / mod_vhost_alias.so
删除哈希符号:
LoadModule vhost_alias_module modules / mod_vhost_alias.so
然后转到<Directory />
并改为:
<Directory />
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
然后重新启动本地服务器。
答案 3 :(得分:12)
在Linux上,为了放宽对文档根目录的访问,您应该编辑以下文件:
/etc/httpd/conf/httpd.conf
根据您希望放宽访问权限的目录级别,您必须更改指令
AllowOverride None
到
AllowOverride All
因此,假设您要允许访问/ var / www / html目录中的文件,您应该更改以下行:
<Directory "/var/www/html">
AllowOverride None
</Directory>
到
<Directory "/var/www/html">
AllowOverride All
</Directory>
答案 4 :(得分:7)
如果您使用的是linux,则可以编辑
目录中的代码/etc/httpd/conf/httpd.conf
现在这里的代码行有点像
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
将 AllowOveride 无更改为 AllowOveride All
现在,您可以在目录中的.httacess文件中设置任何类型的规则 如果任何其他操作系统只是试图找到 httpd.conf 的文件并进行编辑。
答案 5 :(得分:5)
我认为您要将其设置在httpd.conf
文件而不是.htaccess
文件中。
我不确定您使用的操作系统,但是Ubuntu的这个链接可能会为您提供一些指示。
https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles
答案 6 :(得分:5)
正如其他用户在此解释的有关allowoveride指令的用法,该指令用于授予.htaccess使用权限。有一件事我想指出,如果其他用户有权写入.htaccess而不使用allowoveride来允许某些模块,那么永远不要使用allowoverride。
例如AllowOverride AuthConfig mod_rewrite
而不是
AllowOverride All
因为像mod_mime这样的模块可以将服务器端文件呈现为纯文本。
答案 7 :(得分:1)
我也遇到了这个问题,我发现解决方案分为以下两步: 1.在apache2的启用站点的文件夹中,您可以在目录元素中按设置&#34; AllowOverride all&#34;进行编辑。 (应该是&#34;所有&#34;不是&#34;没有&#34;) 2.在www文件夹中的kohana项目中,重命名&#34; example.htaccess&#34;到&#34; .htaccess&#34;
我在ubuntu上做过。希望它会对你有所帮助。
答案 8 :(得分:1)
如果在使用Linux,请在此处输入代码
`/etc/apache2/sites-available/000-default.conf`
在Documentroot下。添加以下代码
`<Directory /var/www/>
AllowOverride all
Require all granted
</Directory>`
然后,
`sudo service apache2 restart`
并且您必须启用apache mod rewrite
`sudo a2enmod rewrite`
答案 9 :(得分:0)
SuSE Linux Enterprise Server
确保您正在编辑正确的文件 https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_apache2_configuration.html
httpd.conf
主Apache服务器配置文件。 避免更改此文件。它主要包含include语句和全局设置。覆盖此处列出的相关配置文件中的全局设置。在虚拟主机配置中更改特定于主机的设置(例如文档根目录)。
在这种情况下,必须编辑vhosts.d/*.conf
答案 10 :(得分:0)
加上那些被推崇的正确答案,有时会由于网络服务器配置SSL
部分的不匹配和不同设置而看到相同的错误。 (很明显,当不使用.htaccess
文件时)。
答案 11 :(得分:0)
有几个答案,但这个问题有很多问题,我想解决这些问题:
/var/log/apache2/ssl_error.log
例如
cat /var/log/apache2/ssl_error.log
[Tue Jun 01 19:05:34 2021] [alert] [pid 31154] config.c(2119):
[client *******] /var/www/mysite/public/tmp/.htaccess:
<Directory not allowed here [lid YLZo3quRlv2EKOAABVoFLwAAAIM]
AllowOverrides
放在 .htaccess 中是没有意义的,也是不允许的。见Context。另见我下面的解释。它应该在 Apache 配置中定义(例如 /etc/apache2
)Directory
指令缺少目录,应该是例如<Directory /var/www/html/etc>
Directory
指令在 .htaccess
中没有意义。 .htaccess
在目录中的位置已经具有使其中的语句适用于特定目录的效果/etc/apache2/...
中)的代码段与打算放在 .htaccess
中的语句混合和匹配 - 尽管在大多数情况下,它们将是相同的,有一些细微的差异.htaccess
并停用它。 (出于性能原因,等等。您也可以将所有配置集中在一个地方,将其置于版本控制中或通过软件配置管理工具(例如 Puppet、Ansible、SaltStack)进行管理)除非您确实无法直接访问和修改 Apache 配置,否则您不需要 .htaccess
。这是一个常见的误解。
您看到 500 错误证明了我的观点。如果您直接在 Apache 配置中更改配置(而不是在 .htaccess 中),您通常会收到一条错误消息,其中包含有关错误和行号的解释和信息(例如,当您执行 service apache2 reload
或 {{1 }}).
另外,查看文档。这真的很好。对于大多数指令,您可以找到它们的适用位置(请参阅“上下文”)。
例如,对于 IfModule,您可以看到:
<块引用>上下文:服务器配置、虚拟主机、目录、.htaccess
因为,AllowOverrides 是:
<块引用>上下文:目录
注意上下文中缺少的 .htaccess!
与其在谷歌上搜索一遍又一遍地重复相同错误的信息,不如查看文档!
文档