未指定文件或文件丢失时出现内部服务器错误

Internal server error when no file specified or file is missing

我正在使用这个重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^img.domain.com [NC]
RewriteRule ^(.*)$ data/photos/ [L]

它这样做,当我使用 f.e http://img.domain.com/profile_image.jpg 时,它将显示文件 http://www.domain.com/data/photos/profile_image.jpg 的内容而不更改 url(屏蔽)。这个可以。

问题是,为了以防万一,当有人输入http://img.domain.com时,它会return 500 Internal server error,但我希望它显示403 Forbidden,就像你输入http://www.domain.com/data/photos/。无奈,如何修改这个rewrite规则来实现?

已编辑:

同样的问题是当 /data/photos/ 中不存在文件时,我想 return 404... 但它 returning 500.

错误日志中的递归太多...

您应该先检查目标文件是否存在,然后重写:

# 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/ -f
RewriteRule ^(.+)$ data/photos/ [L]