Apache 不会在父文件夹中搜索 .htaccess

Apache does NOT search parent folders for .htaccess

如您所知,如果父文件夹有 .htaccess 文件,apache2 应该将 .htaccess 应用于子文件夹。我的问题是这不会发生。

我有文件夹:

/var/www/program
/var/www/program/rec
/var/www/program/rec2

我想让rec和rec2继承程序的.htaccess。这不会发生。

程序的.htaccess是:

RewriteOptions inherit
RewriteEngine On
RewriteRule ^$ example.php

其中 https://www.example.com/program redirects to https://www.example.com/program/example.php 根据需要。

出于某种原因,这两个子文件夹不会发生这种情况。未应用重写规则。

如果我将 .htaccess 放在子文件夹 rec 中,那么它会按预期工作,但 rec2 仍然不会重定向。

我在任何其他父文件夹中都没有其他 .htaccess。我的 /etc/apache2/sites-enabled/000-default 包含以下内容:

<VirtualHost *:443>
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

    SSLCertificateFile /etc/apache2/ssl/ssl.crt
    SSLCertificateKeyFile /etc/apache2/ssl/private.key
    SSLCertificateChainFile /etc/apache2/ssl/server.ca.pem
    ServerAdmin webmaster@localhost
    Redirect /deluge https://www.example.com:8000
    Redirect /d https://www.example.com:8000
    RewriteOptions inherit

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/>
        RewriteOptions inherit
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
    Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我已经尝试了一天来解决这个问题。

问题是 RewriteRule 假定 root 是 .htaccess 的位置,而不是当前文件夹。

下面的代码解决了我的问题。

RewriteOptions inherit
RewriteEngine On
RewriteRule /?$ example.php

这个post帮助了我:

.htaccess RewriteRule not working in subdirectory