.htaccess 文件中的 Apache 选项

.htaccess 文件中的 Apache 选项

我在 .htaccess 文件中使用Options +FollowSymLinks -MultiViews,该文件存储在图片文件夹上方的 1 个文件夹中,但这会导致在通过 URL 输出到页面上时无法看到这些目录中的图片。一旦我从 .htaccess 中删除它,所有图片都可以正常显示。

以下是我拥有的整个 .htaccess 文件:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ http://%{HTTP_HOST}/ [R=301,L]

<img>这有什么问题吗?因为在标签 src 属性中输出图像时,图像根本就不会显示。

在实际的图像目录中,我有另一个 .htaccess 文件,如下所示:

<FilesMatch "\.(jpg|jpeg|png|gif|bmp)$">
  <IfModule mod_headers.c>
      Header unset Pragma
      FileETag None
      Header unset ETag
      Header set Cache-Control "max-age=864000, public, must-revalidate"
      Header unset Last-Modified
  </IfModule>
</FilesMatch>

也许有更好的替代方案,可以让我在服务器上的文件夹中正常查看图像?老实说,我想知道到底是什么导致了这种情况。

删除此行是否会导致任何安全风险? Options +FollowSymLinks -MultiViews 我可以简单地将其替换为: Options -Indexes

基本上,我仍然希望文件夹中的文件可以访问,但我不希望在浏览文件夹的 URL 时,所有文件都显示在那里,如果你明白我的意思。另外,我想知道,是否可以这样做,以便它只接受来自我的服务器的文件,而不接受任何其他服务器的文件?如果可能或甚至有意义......?

答案1

当我遇到这样的问题时,我做的第一件事就是查看返回的实际 HTTP 响应标头。

最简单的方法是使用 curl 命令(http://curl.haxx.se/download.html):

curl -D headers.txt http://my_url.com

这会将响应标头保存到 headers.txt,这应该能让您更好地了解实际情况。希望这足以为您指明解决方案。

相关内容