我有一个 .htaccess 文件执行以下操作:
RewriteRule ^system(.*)$ /system/app/$1 [QSA,L]
...然后在 /system/app 下面,我有另一个 .htaccess 文件执行以下操作:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [QSA]
因此,当您连接到 /system 和 /system/login 时,它应该在两种情况下调用 /system/app/index.php。
在我正在使用的大多数托管计划中,这都是可行的。但在一些客户托管计划中,我得到了一个不寻常的结果。这个不寻常的结果是,我可以正常连接到 /system 并且 index.php 加载,但如果我连接到 /system/login,我就会得到 404。我甚至简化了 /system/app/index.php 并使其简单地执行:
<?php print_r($_SERVER);
...但它只显示 /system 上的结果,如果是 /system/login 则显示 404。现在,切换到另一个人的托管计划,它工作正常 - 它只在某些托管计划上。
您认为可能是什么问题?是 mod_security 吗?是 MultiViews 已打开吗?是 Apache 的某个版本导致的吗?是 Apache 中的错误吗?我感到很困惑。
编辑:我几乎想知道是否有一个新的 Apache 配置,它只允许您在根目录中拥有一个 .htaccess 文件,或者不允许您加载一个 .htaccess 文件然后调用子文件夹中的另一个 .htaccess 文件。
编辑:请稍等,不要试图关闭这个问题,因为它“太本地化”。听我说一分钟。如果这是 Apache 或 cPanel 中可以打开的一个全新选项,从而导致此问题,或者是一个新的 mod_security 问题,您不认为这会是一个影响大量用户的问题,而不仅仅是 HostGator 上的人吗?