0

这是我现有的 .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/files/$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,它会将我带到那里,但如果我转到任何其他 URL,它会将我定向到 subpage.php。

所以我不明白的是:为什么里面有两个 RewriteRule,我无法访问 index.php,但只有第二个 RewriteRule,我可以?

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

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

4

1 回答 1

1

The RewriteConds only apply to the next RewriteRule. With both there, the RewriteConds only apply to the first one.

With only the second RewriteRule in there and the first removed, the test for index.php being a file prevents the rule applying.

With both there, the second rule applies to everything regardless of whether there is a file in place.

It looks like you want to repeat the RewriteConds for the second rule too.

于 2013-03-14T02:30:50.477 回答