这是我现有的.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,我可以吗?
此外,任何人都可以就如何解决此问题提出任何建议吗?
任何信息都将不胜感激!提前谢谢!
答案 0 :(得分:1)
RewriteConds仅适用于下一个RewriteRule。在这两者中,RewriteConds仅适用于第一个。
只有第二个RewriteRule并且第一个被删除,index.php作为文件的测试阻止了规则的应用。
如果存在,则第二条规则适用于所有内容。
看起来你想要为第二条规则重复RewriteConds。