ApacheWordPress子文件夹.htaccess:此处不允许使用目录索引

e5nszbig  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(186)

我有一个正在工作的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

这里绝对处于学习模式,所以欢迎所有的建议。

pgccezyw

pgccezyw1#

<Directory /srv/www/site>
    Options FollowSymLinks
    AllowOverride Limit Options FileInfo
    DirectoryIndex index.php

为了能够在.htaccess中设置DirectoryIndex(特别是,为了能够在.htaccess上下文中 * 覆盖 * DirectoryIndex),您需要在AllowOverride指令中使用Indexes * directive-type *。例如:

AllowOverride Limit Options FileInfo Indexes

或者,您更常见的是使用All关键字(它还包括AuthConfig-允许使用授权指令),即AllowOverride All

    • 参考:**
  • https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride

注意WordPress的配置依赖于DirectoryIndex index.php的设置(当主页被请求时)。你已经在服务器配置中设置了DirectoryIndex index.php。你可以在一个指令中同时设置DirectoryIndex index.php,例如:

DirectoryIndex index.php index.html

(在这种情况下,index.php优先。)
如果DirectoryIndex未设置为 * anywhere *,则默认值仅为index.html

相关问题