我将 Ubuntu 升级到 14.04 LTS,将 Apache 升级到 2.4。当服务器首次重新启动时,访问页面时出现 403 错误。这时我才意识到我需要更改为Require all granted
。我以为一切都正常了,直到我意识到.htaccess
任何地方都没有加载。我认为那也需要更改,但据我所知,Apache 文档说没问题。以下是我Directory
目前的规则。
VirtualDocumentRoot /var/hosts/%-2.0.%-1.0/%-3+/public_html
<DirectoryMatch "^/var/hosts/[^/]+/[^/]+/public_html">
Options FollowSymLinks
AllowOverride All
Require all granted
</DirectoryMatch>
我首先想到的是正则表达式是错误的,并且没有加载任何规则。所以我注释掉了Require all granted
,发现它阻止了网站再次加载。所以我知道它正在加载它们。我必须执行以下操作才能使它们正常工作。
<Directory /var/hosts/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
我可以把它留在那里吗?有什么想法吗?为什么它不起作用?
答案1
尝试这个:
配置 Apache mod_rewrite
a2enmod rewrite
添加以下代码到
/etc/apache2/sites-available/default
AllowOverride All
重启 Apache
/etc/init.d/apache2 restart
答案2
我解决了我的问题。
Apache 2.4 似乎在[^/]+
匹配目录时存在问题。我能够让它与匹配*
。它匹配除 之外的所有内容/
。
我在尝试保护 的任何子域时再次遇到了这个问题dev
。我发现在 VirtualHost 中指定域而不是使用 REGEX 是可行的。
在看过目录文档我了解了*
并尝试了一下。还了解到这DirectoryMatch
不会影响子目录并且Directory
允许使用 REGEX。