【问题标题】:Checking if file exist with RewriteCond in a chained RewriteRule在链式 RewriteRule 中使用 RewriteCond 检查文件是否存在
【发布时间】:2010-04-21 01:53:34
【问题描述】:

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

我有一个 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

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

【问题讨论】:

    标签: mod-rewrite apache2


    【解决方案1】:

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

    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]
    

    【讨论】:

      【解决方案2】:

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

      RewriteCond %{REQUEST_FILENAME} -f
      

      应该可以。

      【讨论】:

      • 您好,感谢您的回答,这是一个很好的尝试,但我试过了,它不起作用,我不知道为什么。
      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2013-06-04
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多