我正在使用此重写规则:
let version1 = "1.2.4"
let version2 = "2.3.6"
let result = version1.compare(version2, options: .numeric)
switch result {
case .orderedSame : print("versions are equal")
case .orderedAscending : print("version1 is less than version2")
case .orderedDescending : print("version1 is greater than version2")
}
这样做,当我使用f.e RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^img.domain.com [NC]
RewriteRule ^(.*)$ data/photos/$1 [L]
时,它将显示文件http://img.domain.com/profile_image.jpg
的内容而不更改url(蒙板)。没关系。
问题是,万一有人进入http://www.domain.com/data/photos/profile_image.jpg
,它将返回500内部服务器错误,但我希望它显示403 Forbidden,与您输入http://img.domain.com
时相同。我很无奈,如何修改这个重写规则来实现这个目标?
编辑:
同样的问题是当文件在http://www.domain.com/data/photos/
中不存在时,我想返回404 ...但它返回500.
在错误日志中有太多的递归......
答案 0 :(得分:2)
首先应检查目标文件是否存在,然后重写它:
# 403 for img subdomain when request is for landing page
RewriteCond %{HTTP_HOST} ^img\.domain\.com$ [NC]
RewriteRule ^(data/photos)?/?$ - [F,NC]
RewriteCond %{HTTP_HOST} ^img\.domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/data/photos/$1 -f
RewriteRule ^(.+)$ data/photos/$1 [L]