2013-02-20 81 views
0

我正在使用以下内容来传递服务器上潜在文件位置的详细信息,但第3行会导致它失败。通过删除这一行,在test.php的文件看到由%建立了正确的文件位置1 /%2使用htaccess使用条件字符串检查文件

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] 

一旦它的工作,我会提供服务的文件,如果它在新的位置是否存在,如果不下一个重写函数将构建该图像并将其放置在下一次的位置。

任何帮助表示赞赏。

回答

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,您现在可以希望了解我之后的工作。

+0

很高兴你找到了一个可行的解决方案。如果将来您需要额外的工作,您可能需要尝试'RewriteBase'来查看它是否有助于简化规则。 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritebase – 2013-02-23 00:20:33

0

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

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

的RewriteCond 1场比赛和%1 = “ABC123”。

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

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

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 

我再次具有你的目标是什么猜测,但是这应该是至少接近你所需要的。

+0

你就是目标。 现有条件3与HOST +%1匹配,相当于http://abc123.domain.comimages/somefile.jpg,只不过是获取条件4中的文件检查所需的两个部件的一种方式。第一个条件只是为了在htaccess文件中过滤掉其他条件。 我会尝试你的建议,并让你知道它的结果。 – 2013-02-21 13:44:48

+0

唉,不要运气!但是你让我重新思考需要的检查,这是一个缩短版本,但文件检查仍然没有通过! 'RewriteCond%{HTTP_HOST}%{THE_REQUEST} ^([a-z0-9 \ - \ _] +)\。domain \ .com(images /.*)? RewriteCond%1 /%2 -f RewriteRule ^。* test.php?file =%1 /%2 [L]' – 2013-02-21 13:56:23

+0

我更接近这个,但文件检查失败! 'RewriteRule%{THE_REQUEST} ^([a-z0-9 \ - \ _] +)\。domain \ .com。*?(/ images [^ \ s] +) 'RewriteRule ^。* test.php?文件=%1%2 [L]' 使用REQUEST_URI和THE_REQUEST的原始文件不完全匹配图像名称。此版本显示正确的文件名,现在我需要添加文件检查... 1行,它不再有效! '带有或不带斜杠的'RewriteCond%1 /%2 -f'! – 2013-02-21 14:11:35