.htaccess "此处不允许的选项"
Posted
技术标签:
【中文标题】.htaccess "此处不允许的选项"【英文标题】:.htaccess "Options not allowed here" 【发布时间】:2011-10-29 03:32:08 【问题描述】:我的 .htaccess 中有这个:
选项 +FollowSymLinks
我在 apache error_log 中收到以下错误:
.htaccess: Options not allowed here
这是我的 httpd.conf 文件中的部分:
#htdocs symlinks here
<Directory /Users/you/code/my/folder>
Options All
AllowOverride All
</Directory>
<Directory />
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory "/Applications/XAMPP/xamppfiles/htdocs">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
所以我在任何地方都设置了 Options All 和 AllowOverride All ,但我仍然不允许设置该选项。任何人都可以理解这一点吗?
谢谢, B先生
【问题讨论】:
【参考方案1】:请注意,这是特定于 XAMPP 的问题。 XAMPP 会加载位于XAMPP/etc/extra/
中的一些附加配置文件,这些文件会覆盖httpd.conf。对我来说,有问题的文件是 http-userdir.conf
,它为 ~user 请求应用规则并包含 AllowOverride FileInfo AuthConfig Limit Indexes
行并将该行更改为 AllowOverride All
确实解决了我的问题。
这仅适用于从 OS X 上的 /Sites/ 目录提供的文件。我不知道 Windows 版本是否使用 UserDir 甚至有类似的规则。
【讨论】:
另外,你也可以阅读httpd.apache.org/docs/current/es/mod/core.html#allowoverride。该文档可以帮助您定义 AllowOverride 的特定值;) 这对与this answer 结合使用很有帮助。【参考方案2】:在我的情况下,我最终将文件 httpd-vhosts.conf 中的行 AllowOverride AuthConfig FileInfo
更改为 AllowOverride All
,该文件位于 apache\conf\extra 文件夹中
【讨论】:
【参考方案3】:您必须允许在目录上下文中覆盖“选项”。没有必要:
vhost/directory config:
AllowOverride All
但仅允许覆盖“选项”:
AllowOverride Existing options to override +Options
【讨论】:
您的意思是AllowOverride Existing options to override Options
(不带+)吗?
是的。我在 httpd 手册页 httpd.apache.org/docs/2.4/mod/core.html#allowoverride 上找不到任何对“+”的引用,指的是 AllowOverride。【参考方案4】:
我猜你的 apache 配置中有一个全局 AllowOverride
设置不允许这样做。您可以在 httpd.conf 中使用 grep 获取 AllowOverride 吗?
【讨论】:
$ cat httpd.conf | grep "AllowOverride" AllowOverride All AllowOverride All AllowOverride All AllowOverride All 有没有可能我编辑了错误的 httpd.conf?我正在编辑/Applications/XAMPP/etc/httpd.conf 中的那个。如何找出 apache 正在使用哪个配置?编辑:使用正确的 httpd.conf,更改日志文件并开始登录到另一个文件..【参考方案5】:我刚刚安装了最新版本的 XAMPP,想分享一下我是如何解决同样问题的。
这是特定于 XAMPP 的设置(每个新的 XAMPP 安装)。截至今天最新的 XAMPP - XAMPP 1.8.3 在 /xampp/apache/conf/extra/httpd-xampp.conf 中有一个设置会导致您的“服务器错误”消息。
然后您在错误日志中收到以下错误:
.htaccess: Options not allowed here
打开 /xampp/apache/conf/extra/httpd-xampp.conf 并找到:
<Directory "/xampp/htdocs/xampp">
<IfModule php5_module>
<Files "status.php">
php_admin_flag safe_mode off
</Files>
</IfModule>
AllowOverride AuthConfig
</Directory>
和改变
AllowOverride AuthConfig
与
AllowOverride All
更改后不需要身份验证或授权,除非您在 httpd.conf、额外的 confs 或 .htaccess 中指定它。
您可能还想阅读有关 AllowOverride http://httpd.apache.org/docs/current/en/mod/core.html#allowoverride 选项的 Apache 文档,并选择更优化和更安全的设置,这样您就可以使用 .htaccess 而不会导致服务器错误。
另外请记住,您可以根据您想要达到的结果找到更好的位置来重写上述规则。就我而言,这是一个令人满意的变化。
【讨论】:
感谢您的解释。直到今天仍然有效。【参考方案6】:而不是更改主 httpd.conf 文件中的全局 AllowOverride 设置,如果您有一个 httpd-vhosts.conf 文件,您希望将特定于目录的 AllowOverride All 指令放在您需要的每个主机条目中,所以您可以在服务器领域的其余部分保留一个限制集。
【讨论】:
【参考方案7】:在.htaccess 文件的所有实例中将Options +FollowSymLinks
更改为Options +SymLinksIfOwnerMatch
,由于安全风险,许多服务器上已禁用以下符号链接。
【讨论】:
【参考方案8】:在 Debian 9 上,我编辑了文件 /etc/apache2/mods-available/userdir.conf
禁用此行 AllowOverride FileInfo AuthConfig 限制索引
添加了这一行 允许全部覆盖
而且效果很好。
非常感谢所有贡献者
【讨论】:
【参考方案9】:托管您的域的服务器是否满足 Elgg 所需的所有要求?特别是 mod_rewrite 可用吗?
重新检查您已完成的所有步骤。
如果 mod_rewrite 正在工作...您是否有权访问服务器上 Apache 的配置 (http.conf)?如果是,添加以下行(调整路径):
允许覆盖所有
【讨论】:
请考虑在您提到“Elgg”时添加其他背景。我相信作者在原始问题的任何地方都没有提到该框架。以上是关于.htaccess "此处不允许的选项"的主要内容,如果未能解决你的问题,请参考以下文章
父目录中的 htaccess 导致“此处不允许 RewriteEngine”
父目录中的 htaccess 导致“此处不允许 RewriteEngine”
WordPress 中的 .htaccess 错误:此处不允许重写引擎