.htaccess htaccess/mod_重写可能存在的子目录问题

.htaccess htaccess/mod_重写可能存在的子目录问题,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我在一个非常动态的系统上工作,在/somepath和/somepath中有两个相同的htaccess文件。原因是域可以被指向/somepath,但我永远不知道它是否是 当它指向/somepath时没有问题,但当它不是问题时,就好像当我请求/somepath/page/foo/bar时,/somepath中的htaccess文件覆盖了/中的htaccess文件。在后一种情况下,我根本不希望运行/somepath/.htaccess,或者至少忽略其中的mod_重写 一个解决方案是,如果我可以检查后一

我在一个非常动态的系统上工作,在/somepath和/somepath中有两个相同的htaccess文件。原因是域可以被指向/somepath,但我永远不知道它是否是

当它指向/somepath时没有问题,但当它不是问题时,就好像当我请求/somepath/page/foo/bar时,/somepath中的htaccess文件覆盖了/中的htaccess文件。在后一种情况下,我根本不希望运行/somepath/.htaccess,或者至少忽略其中的mod_重写

一个解决方案是,如果我可以检查后一个htaccess是否不位于文档根目录中。这可能吗?如何将htaccess路径与htaccess文件中的文档根进行比较

两个htaccess文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule .* uri_handler.php [L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-f[或]
重写cond%{REQUEST_FILENAME}\.php$
重写规则。*uri_handler.php[L]
有人知道这里发生了什么吗?
谢谢

我认为这是不可能的。但不管怎样,这听起来都像是一个构造错误。最好将两个.htaccess文件合并到一个文件中。(或者
/somepath
中的第二个是必要的吗?为什么?)


在什么情况下请求的域指向
/somepath
?它是一个不同的域吗?

除非试图简化您的设置,我认为最简单的方法是确保
/somepath
中的
.htaccess
文件在文档根目录为
/somepath>时不会处理对
/somepath
的请求

假设关于文档根目录,我们都在同一个页面上,我们可以通过修改
/somepath/.htaccess

编辑:更简单的方法是让它始终请求位于根目录的
uri\u handler.php

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_FILENAME} \.php$
  RewriteRule .* /uri_handler.php [L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-f[或]
重写cond%{REQUEST_FILENAME}\.php$
重写规则。*/uri_handler.php[L]

将域指向/somepath是用户的选择,我无法控制。当域指向
/somepath
时,
/somepath
会成为
文档根吗?另外,
uri_handler.php
是否关心它在哪个目录中,或者不管域指向何处,它是否能够完成它的工作,无论它位于何处?@komakino所以它不需要简单地删除/somepath中的htaccess?(现在不确定它将在哪里查找相对指定的
uri_handler.php
。@Tim-是的,它将成为文档根目录。uri_处理程序可以以任何一种方式完成它的工作,但它给我带来了其他难以解释的逻辑问题@佩卡-我不能删除它,因为我不知道是否需要它。哦,两个目录中都有uri\u处理程序。@komakino您可以删除它:
。htaccess
文件适用于所有子目录。父目录中的htaccess文件将捕获对
/somepath
的请求。唯一的问题是重写规则是否会被正确解析(即url_handler.php引用是否指向正确的文件)。我已经尝试过了,但是/.htaccess中的重写逻辑仍然被忽略。所以我得到了一个普通的404。我的意思是,当我请求一个像/somepath/foo/bar这样的假uri时,我得到了一个普通的404。当请求/nonexistantpath/foo/bar时,/.htaccess中的逻辑工作正常。嗯,你说得对。我将不得不回去仔细检查这一个的源代码,因为它肯定不是我预期的。有趣的不过,我会修改一下。@komakino-事实上……我认为这和添加正斜杠一样简单,不管怎样,哎呀。首先,我得到了一个500的日志条目“由于可能的配置错误,请求超出了10个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“日志级别调试”获取回溯。“第二,我知道这是a**中的一个难题,我还需要支持将整个系统放置在子目录中。这样,上面的uri\u handler也就不在文档根目录中了;”