htaccess / mod_rewrite可能的子目录问题

时间:2010-08-13 08:10:43

标签: .htaccess mod-rewrite

我正在开发一个非常动态的系统,我在/和/ somepath中有两个相同的htaccess文件。这个域的原因可以指向/ somepath,但我不知道是不是。

当指向/ somepath时没有问题,但是当它不是我请求/ somepath / page / foo / bar时,/ somepath中的htaccess文件会覆盖/中的那个。在后一种情况下,我不希望/somepath/.htaccess完全运行,或者至少忽略其中的mod_rewrite。

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

两个htaccess文件都是这样的:

<IfModule mod_rewrite.c>
RewriteEngine On

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

有谁知道这里发生了什么? 谢谢!

2 个答案:

答案 0 :(得分:0)

我不认为这是可能的。但这听起来像是一种构造错误。将两个.htaccess文件合并为一个会好得多。 (或者/somepath中的第二个甚至是必要的?为什么?)

在哪种情况下请求的域指向/somepath?它是一个可以在RewriteCond中使用的不同域吗?

答案 1 :(得分:0)

除非尝试简化您的设置,否则我认为这里最简单的方法是确保.htaccess中的/somepath文件无法处理/somepath的请求。文档根目录为/

假设我们都在关于文档根目录的同一页面上,我们可以通过修改/somepath/.htaccess来实现这一点:

修改:更简单的方法是让它始终请求位于根目录的uri_handler.php

<IfModule mod_rewrite.c>
  RewriteEngine On

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