.htaccess文件中的两个重写规则阻止我访问索引文件

时间:2013-03-14 02:13:56

标签: .htaccess mod-rewrite redirect

这是我现有的.htaccess文件:

 RewriteEngine On

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-l
 RewriteCond {REQUEST_FILENAME} !^images

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]
 RewriteRule ^(.+)$ subpage.php?url=$1 [QSA,L]

我会尝试尽可能地解释这一点,而不要让它过于复杂。归根结底,它归结为:

如果URL在根URL后面包含“/ files”(即:http://www.someurl.com/files/username/myFile.jpg),那么它应该将用户定向到特定的URL(在这个例子中:../../ fileManager /server / PHP /文件/ $ 1)。

使用第二条规则,如果URL在根URL之后包含“/ files”以外的任何内容,则会将它们指向“subpage.php”。 (即:http://www.someurl.com/aboutme

这两项工作都非常好。但是,有了这两个规则,我就永远无法访问/或/index.php(根URL:http://www.someurl.com)。我一直被重定向到subpage.php。

但是等等!还有更多!

如果我删除第一个RewriteRule行:

 RewriteRule ^files(.+)$ ../../fileManager/server/php/files/$1 [L]

...然后第二次重写规则就像我想要的那样工作,因为如果我去/或/index.php,它会带我到那里,但如果我去任何其他网址,它会指引我到子网页.PHP。

所以我不明白的是:为什么在那里使用RewriteRules,我无法访问index.php,但只有第二个RewriteRule,我可以吗?

此外,任何人都可以就如何解决此问题提出任何建议吗?

任何信息都将不胜感激!提前谢谢!

1 个答案:

答案 0 :(得分:1)

RewriteConds仅适用于下一个RewriteRule。在这两者中,RewriteConds仅适用于第一个。

只有第二个RewriteRule并且第一个被删除,index.php作为文件的测试阻止了规则的应用。

如果存在,则第二条规则适用于所有内容。

看起来你想要为第二条规则重复RewriteConds。