我希望你能在这里帮助我。
我有一个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
我猜是因为它是一个链式规则,不知道。请帮忙。
答案 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
应该有用。