Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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重写if/else场景?_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache htaccess重写if/else场景?

Apache htaccess重写if/else场景?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,简而言之:我希望htaccess决定重写两个css文件中的哪一个,这取决于存在哪一个 详细说明:我想在格式vendor/project/style.css中包含我的css(稍后的js、字体等) <link rel="stylesheet" type="text/css" href="/vendor/project/style.css"> 但是:您也可以将每个项目直接克隆为根项目,这样它就不会进入供应商文件夹。然后,重写应该如下所示: RewriteRule ^([a-zA-Z0-9

简而言之:我希望htaccess决定重写两个css文件中的哪一个,这取决于存在哪一个

详细说明:我想在格式vendor/project/style.css中包含我的css(稍后的js、字体等)

<link rel="stylesheet" type="text/css" href="/vendor/project/style.css">
但是:您也可以将每个项目直接克隆为根项目,这样它就不会进入供应商文件夹。然后,重写应该如下所示:

RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ $3.css [L]
我现在的问题是:我如何告诉apache检查实际存在的文件?我试过这样的方法:

RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$     
RewriteCond %{DOCUMENT_ROOT}/vendor/%1/%2/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ vendor/$1/$2/$3.css [L]

RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$     
RewriteCond %{DOCUMENT_ROOT}/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ $3.css [L]

但是没有成功。

请尝试以下方法:

重新编写引擎打开
#检查“供应商”中是否存在文件`
重写cond%{REQUEST\u URI}^/(\w+)/(\w+)/(.+)\.css$
重写cond%{DOCUMENT_ROOT}/vendor/%1/%2/%3.css-f
重写规则^vendor/%1/%2/%3.css[L]
#检查根目录中是否存在文件
重写cond%{REQUEST\u URI}^/(\w+)/(\w+)/(.+)\.css$
重写cond%{DOCUMENT_ROOT}/%3.css-f
重写规则^3.css[L]
您可以根据
请求URI
进行检查,无需在规则中再次检查(请注意重写目标中的
%
)。此外,已将您的匹配组改为使用
\w+
——这是您以前使用过的内容的简写,但
*
已替换为
+
,因为前者也会检查空字符串


这已在我的本地服务器上进行了测试,并按预期工作。

因为如果我同时对这两个文件进行重写,则其中一个将始终失败。如果没有@mike rockett的建议条件,我将尝试重写到一个不存在的文件。因为该文件位于供应商或本地根目录中。因此,如果我重写到vendor/project/style.css,而这个文件不存在,显然它将无法加载。第二个文件工作得很好,第一个文件以[INTERNAL REDIRECT]结束。我不确定问题出在哪里。两个都对我很好。你在用什么URI进行测试?作为参考,我使用
/test/test1/testing.css
进行了测试,然后使用一个输出
\uuuuuu file\uuuuuu
值的PHP文件进行了测试,以确保调用了正确的文件。我使用:/scipper/haushalt/style\u 1.0.css对root进行了测试,而使用:/traiwi/traiwicore/style.css对供应商进行了测试。apache将绝对路径解析为完全正确的/var/www/haushalt/vendor/traiwi/traiwicore/style.css,但不会重写为..您的
.htaccess
文件中的任何其他内容?一定是发生了某种冲突,因为当两个文件都存在时,这些URI对我有效。整个文件看起来像:
RewriteEngine on RewriteBase/RewriteCond%{REQUEST\u URI}^/(\w+/(\w+)/(.+)\.css$RewriteCond%{DOCUMENT\u ROOT}/vendor/%1/%2/%3.css-f RewriteRule^vendor/%1/%2/%3.css[L]RewriteCond%{REQUEST_URI}^/(\w+)/(\w+)/(.+)\.css$RewriteCond%{DOCUMENT_ROOT}/%3.css-f RewriteRule^%3.css[L]RewriteRule^ uploads/(.*)$client/uploads/$1[L]RewriteRule^(.*)ico$$1.ico[L]RewriteRule^(.*)$client/main.php?url=$1[QSA,L]
RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$     
RewriteCond %{DOCUMENT_ROOT}/vendor/%1/%2/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ vendor/$1/$2/$3.css [L]

RewriteCond %{REQUEST_FILENAME} ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$     
RewriteCond %{DOCUMENT_ROOT}/%3\.css -f
RewriteRule ^([a-zA-Z0-9_]*)/([a-zA-Z0-9_]*)/(.*)\.css$ $3.css [L]