未指定文件或文件丢失时出现内部服务器错误
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]
我正在使用这个重写规则:
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]