我有一个正在工作的WordPress站点,它也提供一个旧的平面文件夹。我在家里用Ubuntu 22.04和XAMPP设置了一个克隆环境,虽然WordPress部分很好,但试图访问子文件夹会导致错误。
[Sun Feb 26 17:36:06.779271 2023] [core:alert] [pid 81557] [client 127.0.0.1:37060] /srv/www/site/classic/.htaccess: DirectoryIndex not allowed here
该文件夹具有与公共站点上使用的相同的.htaccess
文件:
DirectoryIndex index.html
如果我删除.htaccess
,我得到这个错误:
[Sun Feb 26 17:42:03.345577 2023] [autoindex:error] [pid 93553] [client 127.0.0.1:48984] AH01276: Cannot serve directory /srv/www/site/classic/: No matching DirectoryIndex (index.php) found, and server-generated directory index forbidden by Options directive
然而,在删除.htaccess
后,虽然你不能直接进入http://site.local/classic/
,但它将与http://site.local/classic/index.html
这样的显式页面一起工作。
我绝对不理解这些错误,因为一个似乎与另一个相矛盾。
由于我没有控制我的公共主机的httpd-vhosts.conf
,我假设故障就在那里,但无论修复是什么,我想复制一个子文件夹设置DirectoryIndex
中的.htaccess
文件,而不仅仅是一个单一的修复这一个子文件夹。httpd-vhosts.conf
的相关部分:
<VirtualHost *:80>
DocumentRoot "/srv/www/site/"
ServerName site.local
<Directory /srv/www/site>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Require all granted
</Directory>
<Directory /srv/www/site/wp-content>
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
站点根目录.htaccess
(WordPress默认):
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这里绝对处于学习模式,所以欢迎所有的建议。
1条答案
按热度按时间pgccezyw1#
为了能够在
.htaccess
中设置DirectoryIndex
(特别是,为了能够在.htaccess
上下文中 * 覆盖 *DirectoryIndex
),您需要在AllowOverride
指令中使用Indexes
* directive-type *。例如:或者,您更常见的是使用
All
关键字(它还包括AuthConfig
-允许使用授权指令),即AllowOverride All
。注意WordPress的配置依赖于
DirectoryIndex index.php
的设置(当主页被请求时)。你已经在服务器配置中设置了DirectoryIndex index.php
。你可以在一个指令中同时设置DirectoryIndex index.php
,例如:(在这种情况下,
index.php
优先。)如果
DirectoryIndex
未设置为 * anywhere *,则默认值仅为index.html
。