Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess RewriteCond在重写后进行了测试_Apache_Mod Rewrite - Fatal编程技术网

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

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

在过去的两个小时里,我一直在想办法让工作顺利进行。我已经在谷歌和apache文档上寻求帮助,但我仍然找不到解决这个问题的方法。事情是这样的:

我有两个文件:

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