2

我需要检查 query_string 中指定的文件是否存在。我已经有这个规则了

RewriteCond %{QUERY_STRING} ^src=([^&]+)(.*)$
RewriteCond %1 -f
RewriteRule ^media/resizer/?(?:index\.php)?$ http://cdn.mysite.com/media/resizer/ [NC,R,L,QSA]

在 %1 我有文件名的确切路径,我尝试在第二行检查是否存在。但它只是检查模式'-f' RewriteLog:

RewriteCond: input='src=/forumsdata/images/avatars/james.jpg&w=120&h=120&zc=1' pattern='^src=([^&]+)(.*)$' => matched
RewriteCond: input='/forumsdata/images/avatars/james.jpg' pattern='-f' => not-matched

RewriteCond %{REQUEST_FILENAME} -f 是 media/resizer/index.php 并且这种方式不起作用。

有任何想法吗?谢谢。

4

1 回答 1

0

我最近遇到了与 %{REQUEST_FILENAME} 相同的“问题”。%{REQUEST_FILENAME} 根据文档参考:

与请求匹配的文件或脚本的完整本地文件系统路径,如果在引用 REQUEST_FILENAME 时服务器已经确定了这一点。否则,例如在虚拟主机上下文中使用时,与 REQUEST_URI 的值相同。根据 AcceptPathInfo 的值,服务器可能只使用了 REQUEST_URI 的一些前导组件来将请求映射到文件。

因此,如果这是一个虚拟主机设置,您可能需要使用 %{DOCUMENT_ROOT} 引用完整路径,如下所示:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
于 2013-09-07T00:17:29.893 回答