我们有一个rails应用程序正在处理来自m.host.com
和host.com
的请求。如果请求进入m.host.com
,则rails应用页面缓存目录为/public/cache/m/
,如果请求到达host.com
,则页面缓存目录为/public/cache/www/
。
问题在于,对RewriteCond
和m.host.com
的两个请求都匹配了第一个host.com
。
# if the `HTTP_HOST` starts with "m." (m.host.com), look for the cache in /cache/m/...
RewriteCond %{HTTP_HOST} ^m\..*
RewriteRule ^([^.]+)/$ /cache/m/$1.html [QSA]
RewriteRule ^([^.]+)$ /cache/m/$1.html [QSA]
# if not, look for the cache in /cache/www/...
RewriteCond %{HTTP_HOST} !^m\..*
RewriteRule ^([^.]+)/$ /cache/www/$1.html [QSA]
RewriteRule ^([^.]+)$ /cache/www/$1.html [QSA]
答案 0 :(得分:2)
尝试一下:
# if the `HTTP_HOST` starts with "m." (m.host.com), look for the cache in /cache/m/...
RewriteCond %{HTTP_HOST} ^m\.
RewriteRule ^([^.]+)/?$ /cache/m/$1.html [L,QSA]
# if not, look for the cache in /cache/www/...
RewriteCond %{HTTP_HOST} !^m\.
RewriteRule ^([^.]+)/?$ /cache/www/$1.html [L,QSA]
通过在参数中添加“L”,告诉解析器当前的RewriteRule是应用于当前请求的最后一个。
此外,RewriteCond仅适用于单个下一个RewriteRule,这就是为什么您的重写对于任何请求都是相同的,解析器会将第二个RewriteRules应用于请求。