【问题标题】:Htaccess direct linking image to pageHtaccess 直接链接图片到页面
【发布时间】:2015-01-06 02:30:13
【问题描述】:

我想防止在没有整个页面的情况下直接查看图像。

如果有人去
mysite.com/images/image1.jpg 转发到 mysite.com/image1.htm
mysite.com/images/image2.jpg 转发到 mysite.com/image1.htm
mysite.com/images/image3.jpg 转发到 mysite.com/image2.htm
mysite.com/images/image4.jpg 转发到 mysite.com/image2.htm

Htaccess 是最好的方法吗?我该如何设置?

【问题讨论】:

    标签: image apache .htaccess mod-rewrite redirect


    【解决方案1】:

    您可以检查“Referer”请求标头。浏览器有时使用它来告诉服务器哪个 URL 告诉浏览器加载文件。但是,并非所有浏览器都会使用referer 标头,而且它很容易被伪造,因此这不是防止直接链接到您的图像的可靠方法。

    你可以在你的 htaccesss 文件的顶部添加这个:

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^https?://mysite\.com/
    RewriteRule ^images/(.+)\.jpg$ /$1.html [L,R]
    

    【讨论】:

    • 谢谢,但不同的页面特定于不同的图像。我想直接重定向到图像的来源。
    • @user3851589 那么除非您为每个图像制定规则,否则无法在 htaccess 文件中执行此操作。 Mod_rewrite 不知道你的页面内容是什么。
    • 我打算为每张图片制定一个规则。我只需要图像目录中的 htaccess 文件,因此任何其他规则无论如何都不会适用。
    • 这是我需要的吗? RewriteRule ^images/image1.jpg$ /image1.html [L,R]
    • @user3851589 对于每个图像,您都需要一个重写条件和一个规则。条件是您的 html 文件的 URL。
    【解决方案2】:

    阅读 cmets,我建议避免为 N 个图像维护 N RewriteRules。这样的设置将变成站点管理员的维护噩梦,他们需要为站点上的每个新图像复制和粘贴新规则。如果您需要更改规则,那么……祝您好运。

    如果您可以灵活地选择更好的目录结构,它可以将您的 .htaccess 文件简化为单个重写规则。在这种情况下,您可以选择一个目录结构,其中给定图像的路径,您可以轻松确定其所属页面的路径。例如:

    root/
      .htaccess
      page1/
        index.html
        image/
          image1.jpg
          image2.jpg
      page2/
        index.html
        image/
          img.jpg
    

    root/.htaccess 中的重写定义很简单(改编自 @jon-lin 的回答):

    # Rewrite any image URL `/<page>/images/*` to `/<page>/`.
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^https?://mysite\.com/
    RewriteRule ^([^/]+)/image/ /$1/ [L,R]
    

    优点

    • 一个RewriteRule 来统治他们。
    • 您的图片不必是 .jpg,只要它们位于 /&lt;page&gt;/image/ 中即可。

    缺点

    • 需要重新组织现有文件。
    • 非常适合重写问题的目录结构。一个页面访问“属于”另一个页面的图像会很尴尬。

    【讨论】:

    • 我认为我们走在正确的轨道上,图像的名称与我链接到的文件相似。图像将是 url/subdir/images/Random123_1.jpg、url/subdir/images/Random123_2.jpg,它们将嵌入 url/subdir/html/Random123.htm
    • 所有图片都在 /image/ 文件夹中,并且在扩展之前有一个下划线和每页的图片编号。
    • 嗯,好的,所以使用这个命名方案,您需要将规则更改为RewriteRule ^(.+)/images/([^_]+)_ /$1/html/$2.html [L,R]。请注意,这将查找像 PREFIX/images/SUFFIX_ 这样的任何 URL 并将其重定向到 PREFIX/html/SUFFIX.html 其中 PREFIX 是任何字符串,SUFFIX 是任何不带下划线的字符串。
    最近更新 更多