在链接的RewriteRule中检查文件是否存在RewriteCond

时间:2010-04-19 16:40:44

标签: mod-rewrite apache2

我希望你能在这里帮助我。

我有一个RewriteRule,它根据域名提供了一个crossdomain.xml文件。我有一种忽略“.dev”的方式。中间的字符串,例如:

请求:http:// site1 .dev。 mydomain.com /crossdomain.xml
返回文件:/ etc / httpd / conf / crossdomain / site.mydomain.com .xml

RewriteCond %{HTTP_HOST} "^(.*)\.dev\.(.*)"
RewriteCond %{REQUEST_URI} "/crossdomain.xml"
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
    RewriteRule ^(.*)\.dev\.([^/]*)/crossdomain.xml /etc/httpd/conf/crossdomain/$1.$2.xml [L]

问题:如何检查文件是否存在?我尝试将其添加到顶部,但它不起作用:

RewriteCond  /etc/httpd/conf/crossdomain/$1.$2.xml  -f

我猜是因为它是一个链式规则,不知道。请帮忙。

2 个答案:

答案 0 :(得分:2)

是的,我刚刚找到了解决方法,我所做的并不是终止重写并添加另一个只有在第一次应用时才有效。它检查文件是否不存在,如果是,则应用进一步重写:

RewriteCond %{HTTP_HOST} "^(.*)\.dev\.(.*)"
RewriteCond %{REQUEST_URI} "/crossdomain.xml"
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
    RewriteRule ^(.*)\.dev\.([^/]*)/crossdomain.xml /etc/httpd/conf/crossdomain/$1.$2.xml

RewriteCond /etc/httpd/conf/crossdomain/$1.xml !-f
        RewriteRule /etc/httpd/conf/crossdomain/(.*)\.xml /etc/httpd/conf/crossdomain/crossdomain-default.xml [L]

答案 1 :(得分:1)

我认为它与被链接的规则没有任何关系,你只是在比较错误的值。

RewriteCond %{REQUEST_FILENAME} -f

应该有用。