【问题标题】:How can I obscure the requested asset's file path when serving an Apache error page?在提供 Apache 错误页面时,如何隐藏请求的资产的文件路径?
【发布时间】:2016-03-01 03:25:54
【问题描述】:

我们的服务器使用以下重写规则来隐藏我们的图像位置,它将www.domain.com/media/* 指向www.domain.com/secret/sub/directory/to/images/

RewriteRule ^media/(.*) /secret/sub/directory/to/images/$1 

这在提供有效图像时效果很好,但是当请求无效资产 URL 时,404 通知会显示完整的真实文件路径,而不是用户友好的 URL。 (我也注意到 403 也会发生这种情况)。

例如:

Not Found

The requested URL /secret/sub/directory/to/images/image.png was not found on this server.

Apache/2.2.22 (Ubuntu) Server at www.domain.com Port 443

如何说服服务器显示面向用户的 URL 而不是完整的文件路径?

【问题讨论】:

  • 请显示您用于完成此操作的规则集。
  • @MikeRockett 已编辑。

标签: apache .htaccess mod-rewrite permissions


【解决方案1】:

请尝试使用以下规则集:

RewriteEngine on

# If the file requested exists in the images directory
# then serve it as if it were in media.
RewriteCond %{REQUEST_URI} ^/media/(.+) [NC]
RewriteCond %{DOCUMENT_ROOT}/secret/sub/directory/to/images/%1 -f
RewriteRule ^ /secret/sub/directory/to/images/%1 [L]

第一个条件检查我们是否从 media 请求,如果是,则将该文件名传递给下一个条件,该条件检查我们请求的内容是否确实存在于机密目录中。

如果两个条件都通过,则使用对第一个条件的捕获部分的反向引用 ((.+) => %1) 将请求在内部重写到机密目录。

如果请求的文件在secret目录中不存在,则跳过内部重写,Apache会显示/media/non-existent.png在服务器上不存在。

【讨论】:

  • 完美,谢谢。我不得不在最后一行将^ 更改为^media/(.+),但一切都很好。
  • 由于条件的原因,这应该无关紧要,但如果它有效,那么它就有效。不客气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2017-02-02
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多