2013-03-14 45 views
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(即:http://www.someurl.com/files/username/myFile.jpg)之后的“/ files”,那么它应该引导用户到一个特定的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 ^files(.+)$ ../../fileManager/server/php/files/$1 [L] 

...那么第二重写规则工程,我想它,因为如果我去/或的index.php,它需要我那里,但如果我去任何其他网址,它会指示我subpage.php。

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

此外,有谁可以提供任何建议,我怎么能解决这个问题?

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

回答

1

RewriteConds只适用于下一个RewriteRule。在那里,RewriteConds只适用于第一个。

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

在这两者中,第二个规则适用于所有内容,无论是否存在文件。

它看起来像你想重复第二条规则的RewriteConds。

+0

这样做的窍门!非常感谢! – 2013-03-14 02:37:28

+0

作为一个后续问题 - 当我将文件上传到我的服务器时,我使用相对路径不起作用,尽管它在本地工作。如果我将其更改为完整的文件路径,它会工作,但是,URL也会更改 - 我不想要。我上传后有没有办法让我的相对路径有效? – 2013-03-14 11:40:20

+0

可能值得一个单独的问题,但看看[RewriteBase指令](http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase)。 – andyhassall 2013-03-21 18:42:12