Apache .htaccess RewriteCond在重写后进行了测试
在过去的两个小时里,我一直在想办法让工作顺利进行。我已经在谷歌和apache文档上寻求帮助,但我仍然找不到解决这个问题的方法。事情是这样的: 我有两个文件:Apache .htaccess RewriteCond在重写后进行了测试,apache,mod-rewrite,Apache,Mod Rewrite,在过去的两个小时里,我一直在想办法让工作顺利进行。我已经在谷歌和apache文档上寻求帮助,但我仍然找不到解决这个问题的方法。事情是这样的: 我有两个文件: index.php public/css/screen.css 我希望在浏览器中键入的任何URL都重定向到index.php?URL=$1(如果不是文件)。如果是,它应该重定向到public/$1。我尝试使用以下重写规则: RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_F
index.php
public/css/screen.css
我希望在浏览器中键入的任何URL都重定向到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执行重写规则,测试重写条件是否为真,如果不是,则撤消重写?你们会怎么做
谢谢首先比较重写规则,但是除非所有条件都匹配,否则不会发生替换——您不能直接影响这一点 由于.htaccess中的REQUEST_FILENAME是服务器已将URL映射到的文件名,因此您应该执行以下操作,例如: 重写cond%{DOCUMENT_ROOT}/public/$1-f 重写规则(.*)public/$1[L] 其中1美元是最初请求的“剩余”部分 您还需要一个适当的重写库,因为您正在重写相对URL