Apache 服务器上的 500 错误 - “此处不允许允许覆盖”

Posted

技术标签:

【中文标题】Apache 服务器上的 500 错误 - “此处不允许允许覆盖”【英文标题】:500 Error on apache server - "AllowOverride not allowed here" 【发布时间】:2013-12-07 21:16:31 【问题描述】:

我已经在我的 Mac (OSX 10.9) 上设置了一个服务器,但它在错误日志中返回 500 错误并显示以下消息...

[alert] [client ::1] /Users/user/Sites/mysite/.htaccess: AllowOverride not allowed here

这是我的 .htaccess 文件中的代码

Options +FollowSymLinks -MultiViews
AllowOverride All

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteMap lc int:toLower
RewriteCond %REQUEST_URI [A-Z]
RewriteRule (.*) $lc:$1 [R=301,L]

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^i/(.*)/(.*)-(.*)$ /items/?id=$1&range=$2&type=$3 [L,QSA,NC]

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^c/(.*)$ /category/?menu=$1 [L,QSA,NC]

这里是相关的 httpd.conf 代码(如果还有什么可以帮助的,请告诉我)

DocumentRoot "/Users/user/Sites/mysite"

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
</Directory>

<Directory "/Users/user/Sites/mysite">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

有什么想法吗?

【问题讨论】:

从您的 .htaccess 文件中取出 AllowOverride 指令。仅允许在 &lt;directory&gt; 部分中使用 【参考方案1】:

AllowOverride 控制 .htaccess-security 和 -behaviour,无法在 .htaccess 文件中设置。

从 .htaccess 中删除“AllowOverride All”,仅此而已。

【讨论】:

【参考方案2】:

将 AllowOverride All 从您的 .htaccess 中删除。

【讨论】:

【参考方案3】:

AllowOverride All 不属于 htaccess 文件。它在服务器配置 (httpd.conf) 中用于设置 htaccess 文件可以覆盖的服务器配置参数。所以很明显,能够从 htaccess 文件中配置 htaccess 文件可以覆盖的参数是错误的。

从您的 htaccess 文件中删除它。您已经在 httpd.conf 的正确位置定义了 AllowOverride All

【讨论】:

太棒了!谢谢。我现在收到关于 RewriteMap 行的相同消息。我应该把它移到哪里? @Tom RewriteMaps 也不能在 htaccess 文件中定义(但您可以在 htacces 文件中使用它们)。您需要在 httpd.conf 中定义它们,但&lt;Directory&gt; 容器之外

以上是关于Apache 服务器上的 500 错误 - “此处不允许允许覆盖”的主要内容,如果未能解决你的问题,请参考以下文章

我的虚拟主机上的 Apache 500 内部服务器错误 [关闭]

我的虚拟主机上的 Apache 500 内部服务器错误 [关闭]

关于Apache php 报500错误

nginx 和 apache 上的 django:在哪里处理 404 和 500 错误?

如何在 PHP 错误上设置 Apache HTTP 503 错误代码而不是 HTTP 500

Apache:返回 404 错误而不是 500 错误