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
如您所知,如果父文件夹有 .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