.htaccess RewriteCond在重写后进行了测试

时间:2011-01-07 19:14:40

标签: apache mod-rewrite

过去两个小时我一直试图让事情顺利运转,没有任何运气。我在谷歌和apache文档上寻求帮助,但我仍然无法找到解决这个问题的方法。事情就是这样:

我有两个文件:

index.php
public/css/screen.css

我希望浏览器中输入的任何网址都重定向到index.php?url = $ 1(如果它不是文件)。如果是,它应该重定向到public / $ 1。我尝试使用以下重写规则:

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) public/$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?url=$1 [QSA,L]

不幸的是,由于重写只发生在RewriteCond满足之后,前两个RewriteCond将测试css / screen.css而不是public / css / screen.css。

是否有一个魔术标志告诉apache执行RewriteRule,测试RewriteConds是否为真,如果不是则撤消重写?你们会怎么做?

由于

1 个答案:

答案 0 :(得分:0)

首先比较RewriteRule,但除非所有条件也匹配,否则不会发生替换 - 你不能直接影响它。

由于.htaccess中的REQUEST_FILENAME是服务器已经将URL映射到的地址,因此您应该这样做:

RewriteCond%{DOCUMENT_ROOT} / public / $ 1 -f RewriteRule(。*)public / $ 1 [L]

其中$ 1是最初请求的“剩余”部分

您还需要一个合适的RewriteBase,因为您正在重写相对URL。

相关问题