使用一系列条件使用htaccess检查文件

时间:2013-02-20 21:34:43

标签: .htaccess mod-rewrite

我正在使用以下内容传递服务器上潜在文件位置的详细信息,但第3行会导致其失败。通过删除此行,test.php文件可以看到%1 /%2

构建的正确文件位置
RewriteCond %{HTTP_HOST} ^([a-z0-9\-\_]+)\.domain\.com?
RewriteCond %{THE_REQUEST} (images/.*)
RewriteCond %{HTTP_HOST}%1 ^([a-z0-9\-\_]+)\.domain\.com(images/.*)
RewriteCond %1/%2 -f
RewriteRule ^.* test.php?file=%1/%2 [L]

一旦它正常工作,如果文件存在于新位置,我将为该文件提供服务,否则下一次重写功能将构建图像并将其放置在下一次的位置。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

你的问题缺乏一些必要的细节,但这里有一个关于发生了什么的猜测。

如果请求是http://abc123.domain.com/whatever/images/somefile.jpg,则:

RewriteCond 1匹配,%1 =“abc123”。

RewriteCond 2然后匹配并%2 =“images / somefile.jpg”。

RewriteCond 3毫无意义,因为你试图将“abc123.domain.comabc123”与“(某事)匹配.domain.comimages /.*”。

RewriteCond 4尝试确保“abc123 / images / somefile.jpg”作为真实文件存在。

所以,我猜你的目录结构是“/ domainprefix / images”所以使用上面的URL你要确保图像存在于“/abc123/images/somefile.jpg”。如果是这种情况,则应将RewriteCond 3和4修改为:

RewriteCond %{REQUEST_URI} /%1/%2
RewriteCond %{REQUEST_URI} -f

同样,我不得不猜测你的目标是什么,但这至少应该更接近你所需要的。

答案 1 :(得分:0)

好的,我已经解决了这个问题,并且在这里拯救某些人头痛的问题就是解决方案。

RewriteCond %{HTTP_HOST}%{THE_REQUEST} ^([a-z0-9\-\_]+)\.domain\.com.*?(/images[^\s]+)
RewriteCond %{DOCUMENT_ROOT}/%1%2 -f
RewriteRule ^.* %1%2 [L]

文件检查需要文档根目录,我花了几天时间尝试解决这个问题。 最终的结果是存在的文件是直接提供的,如果它们没有在上面提取请求并将文件放在正确的位置之后不进行另一次重写。 感谢David Ravetti的帮助,您现在可以理解我的目标。