当子目录中有.htaccess或php.ini时,排除目录的.htaccess重写条件不起作用

时间:2018-04-23 作者:Flavio Brassesco

我在服务器根目录中安装了WordPress(public_html) 对于我的一个客户,还有一个子目录,其中包含另一个程序员开发的脚本,他们仍在使用。

问题是这个子目录有一个简单的.htaccess 具有密码保护的文件,以及php.ini 具有register_globals = on (是的,我知道……)。问题是,如果存在其中一个或两个文件,则RewriteCond %{REQUEST_FILENAME} !-d 条件不起作用,并重定向到404 WordPress页面。

WordPress.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
子文件夹.htaccess:

AuthType Basic
AuthName "Orden Puerta"
require valid-user
AuthUserFile "/home3/fdm/.htpasswds/public_html/orden2/passwd"
子文件夹php.ini:

register_globals=on
你知道为什么会这样吗?

1 个回复
SO网友:MrWhite

您可以尝试添加RewriteEngine On 到子目录的顶部.htaccess 文件这将完全覆盖父级中的mod\\u rewrite指令(即WordPress).htaccess 文件,因为默认情况下不会继承mod\\u rewrite指令。

因此,通过在子目录中启用重写引擎,WordPress前端控制器将不会执行(默认情况下)。

UPDATE:

我正在尝试访问public\\u html中名为“orden2”的文件夹,因此url如下所示(例如,不是实际的域)www.example.com/orden2

请注意,如果在请求物理目录时未指定尾部斜杠,则mod\\u dir会发出301重定向以附加斜杠。mod\\u dir然后对DirectoryIndex发出内部子请求。如果DirectoryIndex设置为固定URL路径,例如。/index.php 而不是像这样的相对路径index.php 然后是WordPressindex.php 在文档中,将始终触发根目录。

可以尝试在根目录中设置DirectoryIndex.htaccess 文件,在所有WordPress指令之前# BEGIN WordPress). 例如:

DirectoryIndex index.php
您可以尝试的另一件事(尽管这应该是不必要的)是在WordPress中为您的子目录显式地创建一个例外.htaccess 文件这也应该放在现有指令之前,放在文件的最顶端。例如:

# Explicitly exclude some URL-paths
RewriteRule ^orden2 - [L]

结束